{
  "contractName": "Organization",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "members",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "hasData",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "subAccounts",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "desc",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "hasData",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Daos",
          "name": "_daos",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "member",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "SetMemberRole",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "RemoveMember",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SetToken",
      "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": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "setToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "addresses",
          "type": "address[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "roles",
          "type": "bytes32[]"
        }
      ],
      "name": "addOrUpdateMembers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_members",
          "type": "address[]"
        }
      ],
      "name": "removeMembers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "getRole",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "_removeMember",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.11+commit.c082d0b4\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"members\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"hasData\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"setToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"member\",\"type\":\"address\"}],\"name\":\"getRole\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_members\",\"type\":\"address[]\"}],\"name\":\"removeMembers\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"roles\",\"type\":\"bytes32[]\"}],\"name\":\"addOrUpdateMembers\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"subAccounts\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"desc\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"hasData\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"member\",\"type\":\"address\"}],\"name\":\"_removeMember\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Daos\",\"name\":\"_daos\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"member\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"SetMemberRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"member\",\"type\":\"address\"}],\"name\":\"RemoveMember\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SetToken\",\"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\"}],\"devdoc\":{\"methods\":{\"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\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/organization/Organization.sol\":\"Organization\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/Daos.sol\":{\"keccak256\":\"0xbf9599f3b6ba78adf5153db606ad6d145a5e4c2a65988729b4f4b05f4d74f137\",\"urls\":[\"bzz-raw://21d0366b68b152d56a2971b9485fa74235d0a7be2f27539c048939eabcafcb8b\",\"dweb:/ipfs/QmZ55FMLPN7YM17NT7VgFbcoovnAd4hTdxmuopYk9UZq5o\"]},\"/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/organization/Organization.sol\":{\"keccak256\":\"0x75659bbe70f00546a86ac3b3a98fcf3f132084c471a29fa6b00634f50808ba48\",\"urls\":[\"bzz-raw://eec968a7aa6717fd8bf863967f1d12343894f2a1e40687d0b7debef3f96d6f2c\",\"dweb:/ipfs/QmbW1N1L6EYve55MD4LgkMKJtprfGCrSQzyrrdh7zDwthj\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0xf79fb10e8235770eb4aea7249034076a3cc9f9119ad944fc48705bae9c9d20dc\",\"urls\":[\"bzz-raw://cd3429aa9a4878dcf6c73faa32c3722f4013d4be012ece543b246faa6b50f55c\",\"dweb:/ipfs/QmS55hgTvNEAKinus19m65CB4wcymN8EiUPFpRx5tYJ1i2\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzz-raw://4f5b57664069671648fb81f55b0082faecdf1b2f159eec6b1fa6cef9b7d73bc5\",\"dweb:/ipfs/QmcyytaLs7zFdb4Uu7C5PmQRhQdB3wA3fUdkV6mkYfdDFH\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162001b4338038062001b43833981810160405260408110156200003757600080fd5b8101908080519060200190929190805160405193929190846401000000008211156200006257600080fd5b838201915060208201858111156200007957600080fd5b82518660018202830111640100000000821117156200009757600080fd5b8083526020830192505050908051906020019080838360005b83811015620000cd578082015181840152602081019050620000b0565b50505050905090810190601f168015620000fb5780820380516001836020036101000a031916815260200191505b50604052505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060019080519060200190620001d6929190620006cc565b508173ffffffffffffffffffffffffffffffffffffffff166332434a2e30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620002785780820151818401526020810190506200025b565b50505050905090810190601f168015620002a65780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015620002c757600080fd5b505af1158015620002dc573d6000803e3d6000fd5b5050505060606001604051908082528060200260200182016040528015620003135781602001602082028038833980820191505090505b50905033816000815181106200032557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015620003925781602001602082028038833980820191505090505b5090507f6f776e657200000000000000000000000000000000000000000000000000000081600081518110620003c457fe5b602002602001018181525050620003e28282620003ec60201b60201c565b505050506200077b565b620003fc6200067560201b60201c565b6200046f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114620004cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062001b15602e913960400191505060405180910390fd5b60008090505b82518161ffff1610156200067057600160036000858461ffff1681518110620004f657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550818161ffff16815181106200056357fe5b602002602001015160036000858461ffff16815181106200058057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507f5dd27703e52ce4468cbaa14d83e36ddda4b69c759bc1546d9788e1da0a1be0a3838261ffff1681518110620005fb57fe5b6020026020010151838361ffff16815181106200061457fe5b6020026020010151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1806001019050620004d1565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200070f57805160ff191683800117855562000740565b8280016001018555821562000740579182015b828111156200073f57825182559160200191906001019062000722565b5b5090506200074f919062000753565b5090565b6200077891905b80821115620007745760008160009055506001016200075a565b5090565b90565b61138a806200078b6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638a799a221161008c578063da34250c11610066578063da34250c14610515578063f2fde38b14610578578063fbc990d0146105bc578063fc0c546a14610600576100ea565b80638a799a221461035d5780638da5cb5b146104a95780638f32d59b146104f3576100ea565b806344276733116100c8578063442767331461021957806346ee84b01461027157806354fd4d5014610329578063715018a614610353576100ea565b806306fdde03146100ef57806308ae4b0c14610172578063144fa6d7146101d5575b600080fd5b6100f761064a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b46004803603602081101561018857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e8565b60405180838152602001821515151581526020019250505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610719565b005b61025b6004803603602081101561022f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f2565b6040518082815260200191505060405180910390f35b6103276004803603602081101561028757600080fd5b81019080803590602001906401000000008111156102a457600080fd5b8201836020820111156102b657600080fd5b803590602001918460208302840111640100000000831117156102d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506109e3565b005b610331610a9f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b61035b610aa4565b005b6104a76004803603604081101561037357600080fd5b810190808035906020019064010000000081111561039057600080fd5b8201836020820111156103a257600080fd5b803590602001918460208302840111640100000000831117156103c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184602083028401116401000000008311171561045857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610bdd565b005b6104b1610e54565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104fb610e7d565b604051808215151515815260200191505060405180910390f35b6105576004803603602081101561052b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b60405180838152602001821515151581526020019250505060405180910390f35b6105ba6004803603602081101561058e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f05565b005b6105fe600480360360208110156105d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f8b565b005b61060861111f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b505050505081565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b610721610e54565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806112d16028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061128a6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fefc1fd16ea80a922086ee4e995739d59b025c1bcea6d1f67855747480c83214b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611327602f913960400191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6109eb610e7d565b610a5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b81518161ffff161015610a9b57610a90828261ffff1681518110610a8357fe5b6020026020010151610f8b565b806001019050610a63565b5050565b600181565b610aac610e7d565b610b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610be5610e7d565b610c57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806112f9602e913960400191505060405180910390fd5b60008090505b82518161ffff161015610e4f57600160036000858461ffff1681518110610cda57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550818161ffff1681518110610d4657fe5b602002602001015160036000858461ffff1681518110610d6257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507f5dd27703e52ce4468cbaa14d83e36ddda4b69c759bc1546d9788e1da0a1be0a3838261ffff1681518110610ddc57fe5b6020026020010151838361ffff1681518110610df457fe5b6020026020010151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1806001019050610cb7565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b610f0d610e7d565b610f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f8881611145565b50565b610f93610e7d565b611005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff161561111c57600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549060ff021916905550507f7693a3e9eac51f172f145e6f54bc5554168997a1f4efb40f3fad091aa7cfb0e781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806112ab6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f7267616e697a6174696f6e3a20546f6b656e20686173206265656e207365742e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f7267616e697a6174696f6e3a2074782e6f726967696e206973206e6f7420746865206f776e65724f7267616e697a6174696f6e3a206164644f725570646174654d656d6265727320706172616d73206572726f722e4f7267616e697a6174696f6e3a204e6f742061206d656d626572206f6620746865206f7267616e697a6174696f6e2ea265627a7a723158208b8566866ab22b7469e0152f20f7765dde6d82d4f692001ec3536ab436e08d5f64736f6c634300050b00324f7267616e697a6174696f6e3a206164644f725570646174654d656d6265727320706172616d73206572726f722e",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638a799a221161008c578063da34250c11610066578063da34250c14610515578063f2fde38b14610578578063fbc990d0146105bc578063fc0c546a14610600576100ea565b80638a799a221461035d5780638da5cb5b146104a95780638f32d59b146104f3576100ea565b806344276733116100c8578063442767331461021957806346ee84b01461027157806354fd4d5014610329578063715018a614610353576100ea565b806306fdde03146100ef57806308ae4b0c14610172578063144fa6d7146101d5575b600080fd5b6100f761064a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b46004803603602081101561018857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106e8565b60405180838152602001821515151581526020019250505060405180910390f35b610217600480360360208110156101eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610719565b005b61025b6004803603602081101561022f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f2565b6040518082815260200191505060405180910390f35b6103276004803603602081101561028757600080fd5b81019080803590602001906401000000008111156102a457600080fd5b8201836020820111156102b657600080fd5b803590602001918460208302840111640100000000831117156102d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506109e3565b005b610331610a9f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b61035b610aa4565b005b6104a76004803603604081101561037357600080fd5b810190808035906020019064010000000081111561039057600080fd5b8201836020820111156103a257600080fd5b803590602001918460208302840111640100000000831117156103c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561042457600080fd5b82018360208201111561043657600080fd5b8035906020019184602083028401116401000000008311171561045857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610bdd565b005b6104b1610e54565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104fb610e7d565b604051808215151515815260200191505060405180910390f35b6105576004803603602081101561052b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b60405180838152602001821515151581526020019250505060405180910390f35b6105ba6004803603602081101561058e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f05565b005b6105fe600480360360208110156105d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f8b565b005b61060861111f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b505050505081565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b610721610e54565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806112d16028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061128a6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fefc1fd16ea80a922086ee4e995739d59b025c1bcea6d1f67855747480c83214b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611327602f913960400191505060405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6109eb610e7d565b610a5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b81518161ffff161015610a9b57610a90828261ffff1681518110610a8357fe5b6020026020010151610f8b565b806001019050610a63565b5050565b600181565b610aac610e7d565b610b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610be5610e7d565b610c57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8051825114610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806112f9602e913960400191505060405180910390fd5b60008090505b82518161ffff161015610e4f57600160036000858461ffff1681518110610cda57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550818161ffff1681518110610d4657fe5b602002602001015160036000858461ffff1681518110610d6257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507f5dd27703e52ce4468cbaa14d83e36ddda4b69c759bc1546d9788e1da0a1be0a3838261ffff1681518110610ddc57fe5b6020026020010151838361ffff1681518110610df457fe5b6020026020010151604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1806001019050610cb7565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60046020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b610f0d610e7d565b610f7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610f8881611145565b50565b610f93610e7d565b611005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff161561111c57600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160006101000a81549060ff021916905550507f7693a3e9eac51f172f145e6f54bc5554168997a1f4efb40f3fad091aa7cfb0e781604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806112ab6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fe4f7267616e697a6174696f6e3a20546f6b656e20686173206265656e207365742e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f7267616e697a6174696f6e3a2074782e6f726967696e206973206e6f7420746865206f776e65724f7267616e697a6174696f6e3a206164644f725570646174654d656d6265727320706172616d73206572726f722e4f7267616e697a6174696f6e3a204e6f742061206d656d626572206f6620746865206f7267616e697a6174696f6e2ea265627a7a723158208b8566866ab22b7469e0152f20f7765dde6d82d4f692001ec3536ab436e08d5f64736f6c634300050b0032",
  "sourceMap": "178:2192:4:-;;;686:322;8:9:-1;5:2;;;30:1;27;20:12;5:2;686:322:4;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;686:322:4;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;384:12;379:3;372:25;420:4;415:3;411:14;404:21;;0:432;;686:322:4;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;686:322:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:10:6;657:6;;:19;;;;;;;;;;;;;;;;;;724:6;;;;;;;;;;;691:40;;720:1;691:40;;;;;;;;;;;;755:5:4;748:4;:12;;;;;;;;;;;;:::i;:::-;;770:5;:14;;;793:4;800:5;770:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;770:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;770:36:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;770:36:4;;;;817:22;856:1;842:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;842:16:4;;;;817:41;;879:10;868:5;874:1;868:8;;;;;;;;;;;;;:21;;;;;;;;;;;899:19;935:1;921:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;921:16:4;;;;899:38;;947:15;:2;950:1;947:5;;;;;;;;;;;;;:15;;;;;972:29;991:5;998:2;972:18;;;:29;;:::i;:::-;686:322;;;;178:2192;;1226:428;1018:9:6;:7;;;:9;;:::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1361:5:4;:12;1341:9;:16;:32;1333:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:8;1450:1;1439:12;;1434:214;1457:9;:16;1453:1;:20;;;1434:214;;;1526:4;1494:7;:21;1502:9;1512:1;1502:12;;;;;;;;;;;;;;;;1494:21;;;;;;;;;;;;;;;:29;;;:36;;;;;;;;;;;;;;;;;;1573:5;1579:1;1573:8;;;;;;;;;;;;;;;;1544:7;:21;1552:9;1562:1;1552:12;;;;;;;;;;;;;;;;1544:21;;;;;;;;;;;;;;;:26;;:37;;;;1600;1614:9;1624:1;1614:12;;;;;;;;;;;;;;;;1628:5;1634:1;1628:8;;;;;;;;;;;;;;;;1600:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;1475:3;;;;;1434:214;;;;1226:428;;:::o;1165:90:6:-;1205:4;1242:6;;;;;;;;;;;1228:20;;:10;:20;;;1221:27;;1165:90;:::o;178:2192:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "178:2192:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;178:2192:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;535:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;535:18:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;583:41;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;583:41:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1014:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1014:206:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;1845:199;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1845:199:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1660:179;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1660:179:4;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1660:179:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1660:179:4;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1660:179:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1660:179:4;;;;;;;;;;;;;;;:::i;:::-;;495:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1599:137:6;;;:::i;:::-;;1226:428:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1226:428:4;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1226:428:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1226:428:4;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1226:428:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1226:428:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1226:428:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1226:428:4;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;1226:428:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1226:428:4;;;;;;;;;;;;;;;:::i;:::-;;814:77:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1165:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;630:49:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;630:49:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1885:107:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1885:107:6;;;;;;;;;;;;;;;;;;;:::i;:::-;;2180:187:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2180:187:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;559:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;535;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;583:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1014:206::-;2104:7;:5;:7::i;:::-;2091:20;;:9;:20;;;2083:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1109:1;1083:28;;1091:5;;;;;;;;;;;1083:28;;;1075:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1167:6;1159:5;;:14;;;;;;;;;;;;;;;;;;1188:25;1205:6;1188:25;;;;;;;;;;;;;;;;;;;;;;1014:206;:::o;1845:199::-;1898:7;1925;:15;1933:6;1925:15;;;;;;;;;;;;;;;:23;;;;;;;;;;;;1917:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2017:7;:15;2025:6;2017:15;;;;;;;;;;;;;;;:20;;;2010:27;;1845:199;;;:::o;1660:179::-;1018:9:6;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1742:8:4;1753:1;1742:12;;1737:96;1760:8;:15;1756:1;:19;;;1737:96;;;1796:26;1810:8;1819:1;1810:11;;;;;;;;;;;;;;;;1796:13;:26::i;:::-;1777:3;;;;;1737:96;;;;1660:179;:::o;495:34::-;528:1;495:34;:::o;1599:137:6:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:1;1660:40;;1681:6;;;;;;;;;;;1660:40;;;;;;;;;;;;1727:1;1710:6;;:19;;;;;;;;;;;;;;;;;;1599:137::o;1226:428:4:-;1018:9:6;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1361:5:4;:12;1341:9;:16;:32;1333:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:8;1450:1;1439:12;;1434:214;1457:9;:16;1453:1;:20;;;1434:214;;;1526:4;1494:7;:21;1502:9;1512:1;1502:12;;;;;;;;;;;;;;;;1494:21;;;;;;;;;;;;;;;:29;;;:36;;;;;;;;;;;;;;;;;;1573:5;1579:1;1573:8;;;;;;;;;;;;;;;;1544:7;:21;1552:9;1562:1;1552:12;;;;;;;;;;;;;;;;1544:21;;;;;;;;;;;;;;;:26;;:37;;;;1600;1614:9;1624:1;1614:12;;;;;;;;;;;;;;;;1628:5;1634:1;1628:8;;;;;;;;;;;;;;;;1600:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;1475:3;;;;;1434:214;;;;1226:428;;:::o;814:77:6:-;852:7;878:6;;;;;;;;;;;871:13;;814:77;:::o;1165:90::-;1205:4;1242:6;;;;;;;;;;;1228:20;;:10;:20;;;1221:27;;1165:90;:::o;630:49:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1885:107:6:-;1018:9;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1885:107;:::o;2180:187:4:-;1018:9:6;:7;:9::i;:::-;1010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:7:4;:15;2258:6;2250:15;;;;;;;;;;;;;;;:23;;;;;;;;;;;;2246:115;;;2296:7;:15;2304:6;2296:15;;;;;;;;;;;;;;;;2289:22;;;;;;;;;;;;;;;;;;;;;;;2330:20;2343:6;2330:20;;;;;;;;;;;;;;;;;;;;;;2246:115;2180:187;:::o;559:18::-;;;;;;;;;;;;;:::o;2093:225:6:-;2186:1;2166:22;;:8;:22;;;;2158:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2275:8;2246:38;;2267:6;;;;;;;;;;;2246:38;;;;;;;;;;;;2303:8;2294:6;;:17;;;;;;;;;;;;;;;;;;2093:225;:::o",
  "source": "pragma solidity ^0.5.11;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"../Daos.sol\";\n\n\ncontract Organization is Ownable {\n\n    event SetMemberRole(address member, bytes32 role);\n    event RemoveMember(address member);\n    event SetToken(address token);\n\n    struct Member {\n        bytes32 role;\n        bool hasData;\n    }\n\n    struct SubAccount {\n        bytes32 desc;\n        bool hasData;\n    }\n\n    uint32 public constant version = 1;\n    string public name;\n    ERC20 public token;\n    mapping(address => Member) public members;\n    mapping(address => SubAccount) public subAccounts;\n\n    constructor(Daos _daos, string memory _name) public {\n        name = _name;\n        _daos.register(address(this), _name);\n\n        address[] memory addrs = new address[](1);\n        addrs[0] = msg.sender;\n        bytes32[] memory rs = new bytes32[](1);\n        rs[0] = \"owner\";\n        addOrUpdateMembers(addrs, rs);\n    }\n\n    function setToken(ERC20 _token) public onlyManager {\n        require(address(token) == address(0), \"Organization: Token has been set.\");\n        token = _token;\n        emit SetToken(address(_token));\n    }\n\n    function addOrUpdateMembers(address[] memory addresses, bytes32[] memory roles) public onlyOwner {\n        require(addresses.length == roles.length, \"Organization: addOrUpdateMembers params error.\");\n        for (uint16 i = 0; i < addresses.length; ++i) {\n            members[addresses[i]].hasData = true;\n            members[addresses[i]].role = roles[i];\n            emit SetMemberRole(addresses[i], roles[i]);\n        }\n    }\n\n    function removeMembers(address[] memory _members) public onlyOwner {\n        for (uint16 i = 0; i < _members.length; ++i) {\n            _removeMember(_members[i]);\n        }\n    }\n\n    function getRole(address member) public view returns(bytes32) {\n        require(members[member].hasData, \"Organization: Not a member of the organization.\");\n        return members[member].role;\n    }\n\n    modifier onlyManager() {\n        require(tx.origin == owner(), \"Organization: tx.origin is not the owner\");\n        _;\n    }\n\n    function _removeMember(address member) public onlyOwner {\n        if (members[member].hasData) {\n            delete members[member];\n            emit RemoveMember(member);\n        }\n    }\n\n}",
  "sourcePath": "/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/organization/Organization.sol",
  "ast": {
    "absolutePath": "/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/organization/Organization.sol",
    "exportedSymbols": {
      "Organization": [
        651
      ]
    },
    "id": 652,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 370,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 371,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 896,
        "src": "26:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 372,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 1293,
        "src": "90:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/Daos.sol",
        "file": "../Daos.sol",
        "id": 373,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 96,
        "src": "154:21:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 374,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 895,
              "src": "203:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$895",
                "typeString": "contract Ownable"
              }
            },
            "id": 375,
            "nodeType": "InheritanceSpecifier",
            "src": "203:7:4"
          }
        ],
        "contractDependencies": [
          895
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 651,
        "linearizedBaseContracts": [
          651,
          895
        ],
        "name": "Organization",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 381,
            "name": "SetMemberRole",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 377,
                  "indexed": false,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "238:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "238:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 379,
                  "indexed": false,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "254:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 378,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "254:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "237:30:4"
            },
            "src": "218:50:4"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 385,
            "name": "RemoveMember",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 383,
                  "indexed": false,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 385,
                  "src": "292:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 382,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "292:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "291:16:4"
            },
            "src": "273:35:4"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 389,
            "name": "SetToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 387,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 389,
                  "src": "328:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "328:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "327:15:4"
            },
            "src": "313:30:4"
          },
          {
            "canonicalName": "Organization.Member",
            "id": 394,
            "members": [
              {
                "constant": false,
                "id": 391,
                "name": "role",
                "nodeType": "VariableDeclaration",
                "scope": 394,
                "src": "373:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 390,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "373:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 393,
                "name": "hasData",
                "nodeType": "VariableDeclaration",
                "scope": 394,
                "src": "395:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 392,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "395:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Member",
            "nodeType": "StructDefinition",
            "scope": 651,
            "src": "349:65:4",
            "visibility": "public"
          },
          {
            "canonicalName": "Organization.SubAccount",
            "id": 399,
            "members": [
              {
                "constant": false,
                "id": 396,
                "name": "desc",
                "nodeType": "VariableDeclaration",
                "scope": 399,
                "src": "448:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 395,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "448:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 398,
                "name": "hasData",
                "nodeType": "VariableDeclaration",
                "scope": 399,
                "src": "470:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 397,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "470:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "SubAccount",
            "nodeType": "StructDefinition",
            "scope": 651,
            "src": "420:69:4",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 402,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "495:34:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 400,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "495:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 401,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "528:1:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 404,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "535:18:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 403,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "535:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 406,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "559:18:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$1292",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 405,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1292,
              "src": "559:5:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1292",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 410,
            "name": "members",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "583:41:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
              "typeString": "mapping(address => struct Organization.Member)"
            },
            "typeName": {
              "id": 409,
              "keyType": {
                "id": 407,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "591:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "583:26:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                "typeString": "mapping(address => struct Organization.Member)"
              },
              "valueType": {
                "contractScope": null,
                "id": 408,
                "name": "Member",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 394,
                "src": "602:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Member_$394_storage_ptr",
                  "typeString": "struct Organization.Member"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 414,
            "name": "subAccounts",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "630:49:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_SubAccount_$399_storage_$",
              "typeString": "mapping(address => struct Organization.SubAccount)"
            },
            "typeName": {
              "id": 413,
              "keyType": {
                "id": 411,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "638:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "630:30:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_SubAccount_$399_storage_$",
                "typeString": "mapping(address => struct Organization.SubAccount)"
              },
              "valueType": {
                "contractScope": null,
                "id": 412,
                "name": "SubAccount",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 399,
                "src": "649:10:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_SubAccount_$399_storage_ptr",
                  "typeString": "struct Organization.SubAccount"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 472,
              "nodeType": "Block",
              "src": "738:270:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 421,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 404,
                      "src": "748:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 422,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 418,
                      "src": "755:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "748:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 424,
                  "nodeType": "ExpressionStatement",
                  "src": "748:12:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 429,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1433,
                            "src": "793:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Organization_$651",
                              "typeString": "contract Organization"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Organization_$651",
                              "typeString": "contract Organization"
                            }
                          ],
                          "id": 428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "785:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "785:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 431,
                        "name": "_name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 418,
                        "src": "800:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 425,
                        "name": "_daos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 416,
                        "src": "770:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Daos_$95",
                          "typeString": "contract Daos"
                        }
                      },
                      "id": 427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "register",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 94,
                      "src": "770:14:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory) external"
                      }
                    },
                    "id": 432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "770:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 433,
                  "nodeType": "ExpressionStatement",
                  "src": "770:36:4"
                },
                {
                  "assignments": [
                    437
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 437,
                      "name": "addrs",
                      "nodeType": "VariableDeclaration",
                      "scope": 472,
                      "src": "817:22:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 435,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "817:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 436,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "817:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 443,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "856:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "842:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "846:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 439,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "846:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "817:41:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 444,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 437,
                        "src": "868:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 446,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "874:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "868:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 447,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1407,
                        "src": "879:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "879:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "868:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 450,
                  "nodeType": "ExpressionStatement",
                  "src": "868:21:4"
                },
                {
                  "assignments": [
                    454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 454,
                      "name": "rs",
                      "nodeType": "VariableDeclaration",
                      "scope": 472,
                      "src": "899:19:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 452,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "899:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 453,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "899:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 460,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "935:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 457,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "921:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 455,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "925:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 456,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "925:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "921:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "899:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "rs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 454,
                        "src": "947:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 463,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "950:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "947:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "6f776e6572",
                      "id": 464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "955:7:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0",
                        "typeString": "literal_string \"owner\""
                      },
                      "value": "owner"
                    },
                    "src": "947:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 466,
                  "nodeType": "ExpressionStatement",
                  "src": "947:15:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 437,
                        "src": "991:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 469,
                        "name": "rs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 454,
                        "src": "998:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 467,
                      "name": "addOrUpdateMembers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 565,
                      "src": "972:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,bytes32[] memory)"
                      }
                    },
                    "id": 470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "972:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 471,
                  "nodeType": "ExpressionStatement",
                  "src": "972:29:4"
                }
              ]
            },
            "documentation": null,
            "id": 473,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 416,
                  "name": "_daos",
                  "nodeType": "VariableDeclaration",
                  "scope": 473,
                  "src": "698:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Daos_$95",
                    "typeString": "contract Daos"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 415,
                    "name": "Daos",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "698:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Daos_$95",
                      "typeString": "contract Daos"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 418,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 473,
                  "src": "710:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 417,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "710:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "697:33:4"
            },
            "returnParameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "738:0:4"
            },
            "scope": 651,
            "src": "686:322:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 501,
              "nodeType": "Block",
              "src": "1065:155:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 482,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 406,
                              "src": "1091:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$1292",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$1292",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1083:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1083:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1109:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1101:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1101:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1083:28:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a20546f6b656e20686173206265656e207365742e",
                        "id": 488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1113:35:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d058d440f56030934ab9e4f7fea07f4dae5a10b664b6b74c2593bd1306b5604",
                          "typeString": "literal_string \"Organization: Token has been set.\""
                        },
                        "value": "Organization: Token has been set."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d058d440f56030934ab9e4f7fea07f4dae5a10b664b6b74c2593bd1306b5604",
                          "typeString": "literal_string \"Organization: Token has been set.\""
                        }
                      ],
                      "id": 480,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1075:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1075:74:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 490,
                  "nodeType": "ExpressionStatement",
                  "src": "1075:74:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 406,
                      "src": "1159:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1292",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 475,
                      "src": "1167:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1292",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1159:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1292",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "1159:14:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 497,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 475,
                            "src": "1205:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$1292",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$1292",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1197:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1197:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 495,
                      "name": "SetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 389,
                      "src": "1188:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1188:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 500,
                  "nodeType": "EmitStatement",
                  "src": "1183:30:4"
                }
              ]
            },
            "documentation": null,
            "id": 502,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 478,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 477,
                  "name": "onlyManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 627,
                  "src": "1053:11:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1053:11:4"
              }
            ],
            "name": "setToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 475,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "1032:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1292",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 474,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1292,
                    "src": "1032:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1292",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1031:14:4"
            },
            "returnParameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1065:0:4"
            },
            "scope": 651,
            "src": "1014:206:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 564,
              "nodeType": "Block",
              "src": "1323:331:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 514,
                            "name": "addresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 505,
                            "src": "1341:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1341:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 516,
                            "name": "roles",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 508,
                            "src": "1361:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1361:12:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1341:32:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a206164644f725570646174654d656d6265727320706172616d73206572726f722e",
                        "id": 519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1375:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_55ddcb371c564fd1cfd1f444a3906500632f37e3a0d295a05a7e4b2c452a1848",
                          "typeString": "literal_string \"Organization: addOrUpdateMembers params error.\""
                        },
                        "value": "Organization: addOrUpdateMembers params error."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_55ddcb371c564fd1cfd1f444a3906500632f37e3a0d295a05a7e4b2c452a1848",
                          "typeString": "literal_string \"Organization: addOrUpdateMembers params error.\""
                        }
                      ],
                      "id": 513,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1333:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1333:91:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 521,
                  "nodeType": "ExpressionStatement",
                  "src": "1333:91:4"
                },
                {
                  "body": {
                    "id": 562,
                    "nodeType": "Block",
                    "src": "1480:168:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 533,
                                "name": "members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 410,
                                "src": "1494:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                  "typeString": "mapping(address => struct Organization.Member storage ref)"
                                }
                              },
                              "id": 537,
                              "indexExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 534,
                                  "name": "addresses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 505,
                                  "src": "1502:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 536,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 535,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 523,
                                  "src": "1512:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1502:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1494:21:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Member_$394_storage",
                                "typeString": "struct Organization.Member storage ref"
                              }
                            },
                            "id": 538,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hasData",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 393,
                            "src": "1494:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1526:4:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1494:36:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 541,
                        "nodeType": "ExpressionStatement",
                        "src": "1494:36:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 542,
                                "name": "members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 410,
                                "src": "1544:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                  "typeString": "mapping(address => struct Organization.Member storage ref)"
                                }
                              },
                              "id": 546,
                              "indexExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 543,
                                  "name": "addresses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 505,
                                  "src": "1552:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 545,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 544,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 523,
                                  "src": "1562:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1552:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1544:21:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Member_$394_storage",
                                "typeString": "struct Organization.Member storage ref"
                              }
                            },
                            "id": 547,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "role",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 391,
                            "src": "1544:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 548,
                              "name": "roles",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 508,
                              "src": "1573:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 550,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 549,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 523,
                              "src": "1579:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1573:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1544:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 552,
                        "nodeType": "ExpressionStatement",
                        "src": "1544:37:4"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 554,
                                "name": "addresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 505,
                                "src": "1614:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 556,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 555,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 523,
                                "src": "1624:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1614:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 557,
                                "name": "roles",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 508,
                                "src": "1628:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              "id": 559,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 558,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 523,
                                "src": "1634:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1628:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 553,
                            "name": "SetMemberRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 381,
                            "src": "1600:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,bytes32)"
                            }
                          },
                          "id": 560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1600:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 561,
                        "nodeType": "EmitStatement",
                        "src": "1595:42:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 526,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 523,
                      "src": "1453:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 527,
                        "name": "addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 505,
                        "src": "1457:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 528,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1457:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1453:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 563,
                  "initializationExpression": {
                    "assignments": [
                      523
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 523,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 563,
                        "src": "1439:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 522,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 525,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1450:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1439:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1475:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 523,
                        "src": "1477:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 532,
                    "nodeType": "ExpressionStatement",
                    "src": "1475:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "1434:214:4"
                }
              ]
            },
            "documentation": null,
            "id": 565,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 511,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 510,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "1313:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1313:9:4"
              }
            ],
            "name": "addOrUpdateMembers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 505,
                  "name": "addresses",
                  "nodeType": "VariableDeclaration",
                  "scope": 565,
                  "src": "1254:26:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 503,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1254:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 504,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1254:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 508,
                  "name": "roles",
                  "nodeType": "VariableDeclaration",
                  "scope": 565,
                  "src": "1282:22:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 506,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1282:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 507,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1282:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1253:52:4"
            },
            "returnParameters": {
              "id": 512,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1323:0:4"
            },
            "scope": 651,
            "src": "1226:428:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 592,
              "nodeType": "Block",
              "src": "1727:112:4",
              "statements": [
                {
                  "body": {
                    "id": 590,
                    "nodeType": "Block",
                    "src": "1782:51:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 585,
                                "name": "_members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 568,
                                "src": "1810:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 587,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 586,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 574,
                                "src": "1819:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1810:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 584,
                            "name": "_removeMember",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 650,
                            "src": "1796:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1796:26:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 589,
                        "nodeType": "ExpressionStatement",
                        "src": "1796:26:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 577,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 574,
                      "src": "1756:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 578,
                        "name": "_members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 568,
                        "src": "1760:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1760:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1756:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 591,
                  "initializationExpression": {
                    "assignments": [
                      574
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 574,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 591,
                        "src": "1742:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 573,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1742:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 576,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1753:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1742:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1777:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 574,
                        "src": "1779:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 583,
                    "nodeType": "ExpressionStatement",
                    "src": "1777:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "1737:96:4"
                }
              ]
            },
            "documentation": null,
            "id": 593,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 571,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 570,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "1717:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1717:9:4"
              }
            ],
            "name": "removeMembers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 568,
                  "name": "_members",
                  "nodeType": "VariableDeclaration",
                  "scope": 593,
                  "src": "1683:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 566,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1683:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 567,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1683:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1682:27:4"
            },
            "returnParameters": {
              "id": 572,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1727:0:4"
            },
            "scope": 651,
            "src": "1660:179:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 613,
              "nodeType": "Block",
              "src": "1907:137:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 601,
                            "name": "members",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 410,
                            "src": "1925:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                              "typeString": "mapping(address => struct Organization.Member storage ref)"
                            }
                          },
                          "id": 603,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 602,
                            "name": "member",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 595,
                            "src": "1933:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1925:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Member_$394_storage",
                            "typeString": "struct Organization.Member storage ref"
                          }
                        },
                        "id": 604,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasData",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 393,
                        "src": "1925:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a204e6f742061206d656d626572206f6620746865206f7267616e697a6174696f6e2e",
                        "id": 605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1950:49:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d54d81c0d4dabf37bb57d25c0ac5c07e9075cc0e20b4c0935502d5d2333d53c",
                          "typeString": "literal_string \"Organization: Not a member of the organization.\""
                        },
                        "value": "Organization: Not a member of the organization."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d54d81c0d4dabf37bb57d25c0ac5c07e9075cc0e20b4c0935502d5d2333d53c",
                          "typeString": "literal_string \"Organization: Not a member of the organization.\""
                        }
                      ],
                      "id": 600,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1917:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1917:83:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 607,
                  "nodeType": "ExpressionStatement",
                  "src": "1917:83:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 608,
                        "name": "members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "2017:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                          "typeString": "mapping(address => struct Organization.Member storage ref)"
                        }
                      },
                      "id": 610,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 609,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "2025:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2017:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Member_$394_storage",
                        "typeString": "struct Organization.Member storage ref"
                      }
                    },
                    "id": 611,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "role",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 391,
                    "src": "2017:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 599,
                  "id": 612,
                  "nodeType": "Return",
                  "src": "2010:27:4"
                }
              ]
            },
            "documentation": null,
            "id": 614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRole",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 595,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 614,
                  "src": "1862:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 594,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1862:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1861:16:4"
            },
            "returnParameters": {
              "id": 599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 598,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 614,
                  "src": "1898:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1898:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1897:9:4"
            },
            "scope": 651,
            "src": "1845:199:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "2073:101:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 617,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1419,
                            "src": "2091:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2091:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 619,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 818,
                            "src": "2104:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2104:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2091:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a2074782e6f726967696e206973206e6f7420746865206f776e6572",
                        "id": 622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2113:42:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e9f676274972057c73ad9e3b50fe192c1b5696f49dae4e27e959ec45afb42f7",
                          "typeString": "literal_string \"Organization: tx.origin is not the owner\""
                        },
                        "value": "Organization: tx.origin is not the owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e9f676274972057c73ad9e3b50fe192c1b5696f49dae4e27e959ec45afb42f7",
                          "typeString": "literal_string \"Organization: tx.origin is not the owner\""
                        }
                      ],
                      "id": 616,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "2083:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2083:73:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 624,
                  "nodeType": "ExpressionStatement",
                  "src": "2083:73:4"
                },
                {
                  "id": 625,
                  "nodeType": "PlaceholderStatement",
                  "src": "2166:1:4"
                }
              ]
            },
            "documentation": null,
            "id": 627,
            "name": "onlyManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 615,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2070:2:4"
            },
            "src": "2050:124:4",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 649,
              "nodeType": "Block",
              "src": "2236:131:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 634,
                        "name": "members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "2250:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                          "typeString": "mapping(address => struct Organization.Member storage ref)"
                        }
                      },
                      "id": 636,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 635,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 629,
                        "src": "2258:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2250:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Member_$394_storage",
                        "typeString": "struct Organization.Member storage ref"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "hasData",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 393,
                    "src": "2250:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 648,
                  "nodeType": "IfStatement",
                  "src": "2246:115:4",
                  "trueBody": {
                    "id": 647,
                    "nodeType": "Block",
                    "src": "2275:86:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2289:22:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 638,
                              "name": "members",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 410,
                              "src": "2296:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                "typeString": "mapping(address => struct Organization.Member storage ref)"
                              }
                            },
                            "id": 640,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 639,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 629,
                              "src": "2304:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2296:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Member_$394_storage",
                              "typeString": "struct Organization.Member storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 642,
                        "nodeType": "ExpressionStatement",
                        "src": "2289:22:4"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 644,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 629,
                              "src": "2343:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 643,
                            "name": "RemoveMember",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 385,
                            "src": "2330:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2330:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 646,
                        "nodeType": "EmitStatement",
                        "src": "2325:25:4"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 650,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 632,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 631,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "2226:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2226:9:4"
              }
            ],
            "name": "_removeMember",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 650,
                  "src": "2203:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2203:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2202:16:4"
            },
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2236:0:4"
            },
            "scope": 651,
            "src": "2180:187:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 652,
        "src": "178:2192:4"
      }
    ],
    "src": "0:2370:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/organization/Organization.sol",
    "exportedSymbols": {
      "Organization": [
        651
      ]
    },
    "id": 652,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 370,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 371,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 896,
        "src": "26:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 372,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 1293,
        "src": "90:63:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/guoping/Documents/gp/proj/comunion/contract/dao/contracts/Daos.sol",
        "file": "../Daos.sol",
        "id": 373,
        "nodeType": "ImportDirective",
        "scope": 652,
        "sourceUnit": 96,
        "src": "154:21:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 374,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 895,
              "src": "203:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$895",
                "typeString": "contract Ownable"
              }
            },
            "id": 375,
            "nodeType": "InheritanceSpecifier",
            "src": "203:7:4"
          }
        ],
        "contractDependencies": [
          895
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 651,
        "linearizedBaseContracts": [
          651,
          895
        ],
        "name": "Organization",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 381,
            "name": "SetMemberRole",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 377,
                  "indexed": false,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "238:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "238:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 379,
                  "indexed": false,
                  "name": "role",
                  "nodeType": "VariableDeclaration",
                  "scope": 381,
                  "src": "254:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 378,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "254:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "237:30:4"
            },
            "src": "218:50:4"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 385,
            "name": "RemoveMember",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 383,
                  "indexed": false,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 385,
                  "src": "292:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 382,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "292:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "291:16:4"
            },
            "src": "273:35:4"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 389,
            "name": "SetToken",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 387,
                  "indexed": false,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 389,
                  "src": "328:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "328:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "327:15:4"
            },
            "src": "313:30:4"
          },
          {
            "canonicalName": "Organization.Member",
            "id": 394,
            "members": [
              {
                "constant": false,
                "id": 391,
                "name": "role",
                "nodeType": "VariableDeclaration",
                "scope": 394,
                "src": "373:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 390,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "373:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 393,
                "name": "hasData",
                "nodeType": "VariableDeclaration",
                "scope": 394,
                "src": "395:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 392,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "395:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Member",
            "nodeType": "StructDefinition",
            "scope": 651,
            "src": "349:65:4",
            "visibility": "public"
          },
          {
            "canonicalName": "Organization.SubAccount",
            "id": 399,
            "members": [
              {
                "constant": false,
                "id": 396,
                "name": "desc",
                "nodeType": "VariableDeclaration",
                "scope": 399,
                "src": "448:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 395,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "448:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 398,
                "name": "hasData",
                "nodeType": "VariableDeclaration",
                "scope": 399,
                "src": "470:12:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 397,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "470:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "SubAccount",
            "nodeType": "StructDefinition",
            "scope": 651,
            "src": "420:69:4",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 402,
            "name": "version",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "495:34:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 400,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "495:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 401,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "528:1:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 404,
            "name": "name",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "535:18:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 403,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "535:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 406,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "559:18:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$1292",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 405,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1292,
              "src": "559:5:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$1292",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 410,
            "name": "members",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "583:41:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
              "typeString": "mapping(address => struct Organization.Member)"
            },
            "typeName": {
              "id": 409,
              "keyType": {
                "id": 407,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "591:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "583:26:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                "typeString": "mapping(address => struct Organization.Member)"
              },
              "valueType": {
                "contractScope": null,
                "id": 408,
                "name": "Member",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 394,
                "src": "602:6:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Member_$394_storage_ptr",
                  "typeString": "struct Organization.Member"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 414,
            "name": "subAccounts",
            "nodeType": "VariableDeclaration",
            "scope": 651,
            "src": "630:49:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_SubAccount_$399_storage_$",
              "typeString": "mapping(address => struct Organization.SubAccount)"
            },
            "typeName": {
              "id": 413,
              "keyType": {
                "id": 411,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "638:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "630:30:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_SubAccount_$399_storage_$",
                "typeString": "mapping(address => struct Organization.SubAccount)"
              },
              "valueType": {
                "contractScope": null,
                "id": 412,
                "name": "SubAccount",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 399,
                "src": "649:10:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_SubAccount_$399_storage_ptr",
                  "typeString": "struct Organization.SubAccount"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 472,
              "nodeType": "Block",
              "src": "738:270:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 421,
                      "name": "name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 404,
                      "src": "748:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 422,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 418,
                      "src": "755:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "748:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 424,
                  "nodeType": "ExpressionStatement",
                  "src": "748:12:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 429,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1433,
                            "src": "793:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Organization_$651",
                              "typeString": "contract Organization"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Organization_$651",
                              "typeString": "contract Organization"
                            }
                          ],
                          "id": 428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "785:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "785:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 431,
                        "name": "_name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 418,
                        "src": "800:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 425,
                        "name": "_daos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 416,
                        "src": "770:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Daos_$95",
                          "typeString": "contract Daos"
                        }
                      },
                      "id": 427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "register",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 94,
                      "src": "770:14:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory) external"
                      }
                    },
                    "id": 432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "770:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 433,
                  "nodeType": "ExpressionStatement",
                  "src": "770:36:4"
                },
                {
                  "assignments": [
                    437
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 437,
                      "name": "addrs",
                      "nodeType": "VariableDeclaration",
                      "scope": 472,
                      "src": "817:22:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 435,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "817:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 436,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "817:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 443,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "856:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "842:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "846:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 439,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "846:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "842:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "817:41:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 444,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 437,
                        "src": "868:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 446,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "874:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "868:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 447,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1407,
                        "src": "879:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "879:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "868:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 450,
                  "nodeType": "ExpressionStatement",
                  "src": "868:21:4"
                },
                {
                  "assignments": [
                    454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 454,
                      "name": "rs",
                      "nodeType": "VariableDeclaration",
                      "scope": 472,
                      "src": "899:19:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 452,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "899:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 453,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "899:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 460,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "935:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 457,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "921:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 455,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "925:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 456,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "925:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "921:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "899:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 461,
                        "name": "rs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 454,
                        "src": "947:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 463,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "950:1:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "947:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "6f776e6572",
                      "id": 464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "955:7:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0",
                        "typeString": "literal_string \"owner\""
                      },
                      "value": "owner"
                    },
                    "src": "947:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 466,
                  "nodeType": "ExpressionStatement",
                  "src": "947:15:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 468,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 437,
                        "src": "991:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 469,
                        "name": "rs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 454,
                        "src": "998:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 467,
                      "name": "addOrUpdateMembers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 565,
                      "src": "972:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address[] memory,bytes32[] memory)"
                      }
                    },
                    "id": 470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "972:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 471,
                  "nodeType": "ExpressionStatement",
                  "src": "972:29:4"
                }
              ]
            },
            "documentation": null,
            "id": 473,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 419,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 416,
                  "name": "_daos",
                  "nodeType": "VariableDeclaration",
                  "scope": 473,
                  "src": "698:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Daos_$95",
                    "typeString": "contract Daos"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 415,
                    "name": "Daos",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 95,
                    "src": "698:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Daos_$95",
                      "typeString": "contract Daos"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 418,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 473,
                  "src": "710:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 417,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "710:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "697:33:4"
            },
            "returnParameters": {
              "id": 420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "738:0:4"
            },
            "scope": 651,
            "src": "686:322:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 501,
              "nodeType": "Block",
              "src": "1065:155:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 482,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 406,
                              "src": "1091:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$1292",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$1292",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1083:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1083:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1109:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1101:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1101:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "1083:28:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a20546f6b656e20686173206265656e207365742e",
                        "id": 488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1113:35:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1d058d440f56030934ab9e4f7fea07f4dae5a10b664b6b74c2593bd1306b5604",
                          "typeString": "literal_string \"Organization: Token has been set.\""
                        },
                        "value": "Organization: Token has been set."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1d058d440f56030934ab9e4f7fea07f4dae5a10b664b6b74c2593bd1306b5604",
                          "typeString": "literal_string \"Organization: Token has been set.\""
                        }
                      ],
                      "id": 480,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1075:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1075:74:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 490,
                  "nodeType": "ExpressionStatement",
                  "src": "1075:74:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 406,
                      "src": "1159:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1292",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 492,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 475,
                      "src": "1167:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$1292",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1159:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1292",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 494,
                  "nodeType": "ExpressionStatement",
                  "src": "1159:14:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 497,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 475,
                            "src": "1205:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$1292",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$1292",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1197:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1197:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 495,
                      "name": "SetToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 389,
                      "src": "1188:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1188:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 500,
                  "nodeType": "EmitStatement",
                  "src": "1183:30:4"
                }
              ]
            },
            "documentation": null,
            "id": 502,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 478,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 477,
                  "name": "onlyManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 627,
                  "src": "1053:11:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1053:11:4"
              }
            ],
            "name": "setToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 475,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 502,
                  "src": "1032:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$1292",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 474,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1292,
                    "src": "1032:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1292",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1031:14:4"
            },
            "returnParameters": {
              "id": 479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1065:0:4"
            },
            "scope": 651,
            "src": "1014:206:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 564,
              "nodeType": "Block",
              "src": "1323:331:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 514,
                            "name": "addresses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 505,
                            "src": "1341:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1341:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 516,
                            "name": "roles",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 508,
                            "src": "1361:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "id": 517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1361:12:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1341:32:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a206164644f725570646174654d656d6265727320706172616d73206572726f722e",
                        "id": 519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1375:48:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_55ddcb371c564fd1cfd1f444a3906500632f37e3a0d295a05a7e4b2c452a1848",
                          "typeString": "literal_string \"Organization: addOrUpdateMembers params error.\""
                        },
                        "value": "Organization: addOrUpdateMembers params error."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_55ddcb371c564fd1cfd1f444a3906500632f37e3a0d295a05a7e4b2c452a1848",
                          "typeString": "literal_string \"Organization: addOrUpdateMembers params error.\""
                        }
                      ],
                      "id": 513,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1333:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1333:91:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 521,
                  "nodeType": "ExpressionStatement",
                  "src": "1333:91:4"
                },
                {
                  "body": {
                    "id": 562,
                    "nodeType": "Block",
                    "src": "1480:168:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 540,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 533,
                                "name": "members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 410,
                                "src": "1494:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                  "typeString": "mapping(address => struct Organization.Member storage ref)"
                                }
                              },
                              "id": 537,
                              "indexExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 534,
                                  "name": "addresses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 505,
                                  "src": "1502:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 536,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 535,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 523,
                                  "src": "1512:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1502:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1494:21:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Member_$394_storage",
                                "typeString": "struct Organization.Member storage ref"
                              }
                            },
                            "id": 538,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "hasData",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 393,
                            "src": "1494:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1526:4:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "1494:36:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 541,
                        "nodeType": "ExpressionStatement",
                        "src": "1494:36:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 542,
                                "name": "members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 410,
                                "src": "1544:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                  "typeString": "mapping(address => struct Organization.Member storage ref)"
                                }
                              },
                              "id": 546,
                              "indexExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 543,
                                  "name": "addresses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 505,
                                  "src": "1552:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 545,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 544,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 523,
                                  "src": "1562:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1552:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1544:21:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Member_$394_storage",
                                "typeString": "struct Organization.Member storage ref"
                              }
                            },
                            "id": 547,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "role",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 391,
                            "src": "1544:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 548,
                              "name": "roles",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 508,
                              "src": "1573:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 550,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 549,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 523,
                              "src": "1579:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1573:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "1544:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 552,
                        "nodeType": "ExpressionStatement",
                        "src": "1544:37:4"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 554,
                                "name": "addresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 505,
                                "src": "1614:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 556,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 555,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 523,
                                "src": "1624:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1614:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 557,
                                "name": "roles",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 508,
                                "src": "1628:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              },
                              "id": 559,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 558,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 523,
                                "src": "1634:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1628:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 553,
                            "name": "SetMemberRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 381,
                            "src": "1600:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,bytes32)"
                            }
                          },
                          "id": 560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1600:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 561,
                        "nodeType": "EmitStatement",
                        "src": "1595:42:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 526,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 523,
                      "src": "1453:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 527,
                        "name": "addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 505,
                        "src": "1457:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 528,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1457:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1453:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 563,
                  "initializationExpression": {
                    "assignments": [
                      523
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 523,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 563,
                        "src": "1439:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 522,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1439:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 525,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 524,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1450:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1439:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1475:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 523,
                        "src": "1477:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 532,
                    "nodeType": "ExpressionStatement",
                    "src": "1475:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "1434:214:4"
                }
              ]
            },
            "documentation": null,
            "id": 565,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 511,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 510,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "1313:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1313:9:4"
              }
            ],
            "name": "addOrUpdateMembers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 505,
                  "name": "addresses",
                  "nodeType": "VariableDeclaration",
                  "scope": 565,
                  "src": "1254:26:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 503,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1254:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 504,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1254:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 508,
                  "name": "roles",
                  "nodeType": "VariableDeclaration",
                  "scope": 565,
                  "src": "1282:22:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 506,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1282:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 507,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1282:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1253:52:4"
            },
            "returnParameters": {
              "id": 512,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1323:0:4"
            },
            "scope": 651,
            "src": "1226:428:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 592,
              "nodeType": "Block",
              "src": "1727:112:4",
              "statements": [
                {
                  "body": {
                    "id": 590,
                    "nodeType": "Block",
                    "src": "1782:51:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 585,
                                "name": "_members",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 568,
                                "src": "1810:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 587,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 586,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 574,
                                "src": "1819:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1810:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 584,
                            "name": "_removeMember",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 650,
                            "src": "1796:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1796:26:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 589,
                        "nodeType": "ExpressionStatement",
                        "src": "1796:26:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 577,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 574,
                      "src": "1756:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 578,
                        "name": "_members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 568,
                        "src": "1760:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 579,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1760:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1756:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 591,
                  "initializationExpression": {
                    "assignments": [
                      574
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 574,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 591,
                        "src": "1742:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 573,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "1742:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 576,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1753:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1742:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "1777:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 574,
                        "src": "1779:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 583,
                    "nodeType": "ExpressionStatement",
                    "src": "1777:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "1737:96:4"
                }
              ]
            },
            "documentation": null,
            "id": 593,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 571,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 570,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "1717:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1717:9:4"
              }
            ],
            "name": "removeMembers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 568,
                  "name": "_members",
                  "nodeType": "VariableDeclaration",
                  "scope": 593,
                  "src": "1683:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 566,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1683:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 567,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1683:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1682:27:4"
            },
            "returnParameters": {
              "id": 572,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1727:0:4"
            },
            "scope": 651,
            "src": "1660:179:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 613,
              "nodeType": "Block",
              "src": "1907:137:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 601,
                            "name": "members",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 410,
                            "src": "1925:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                              "typeString": "mapping(address => struct Organization.Member storage ref)"
                            }
                          },
                          "id": 603,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 602,
                            "name": "member",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 595,
                            "src": "1933:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1925:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Member_$394_storage",
                            "typeString": "struct Organization.Member storage ref"
                          }
                        },
                        "id": 604,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hasData",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 393,
                        "src": "1925:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a204e6f742061206d656d626572206f6620746865206f7267616e697a6174696f6e2e",
                        "id": 605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1950:49:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d54d81c0d4dabf37bb57d25c0ac5c07e9075cc0e20b4c0935502d5d2333d53c",
                          "typeString": "literal_string \"Organization: Not a member of the organization.\""
                        },
                        "value": "Organization: Not a member of the organization."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d54d81c0d4dabf37bb57d25c0ac5c07e9075cc0e20b4c0935502d5d2333d53c",
                          "typeString": "literal_string \"Organization: Not a member of the organization.\""
                        }
                      ],
                      "id": 600,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "1917:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1917:83:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 607,
                  "nodeType": "ExpressionStatement",
                  "src": "1917:83:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 608,
                        "name": "members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "2017:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                          "typeString": "mapping(address => struct Organization.Member storage ref)"
                        }
                      },
                      "id": 610,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 609,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 595,
                        "src": "2025:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2017:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Member_$394_storage",
                        "typeString": "struct Organization.Member storage ref"
                      }
                    },
                    "id": 611,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "role",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 391,
                    "src": "2017:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 599,
                  "id": 612,
                  "nodeType": "Return",
                  "src": "2010:27:4"
                }
              ]
            },
            "documentation": null,
            "id": 614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRole",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 595,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 614,
                  "src": "1862:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 594,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1862:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1861:16:4"
            },
            "returnParameters": {
              "id": 599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 598,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 614,
                  "src": "1898:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 597,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1898:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1897:9:4"
            },
            "scope": 651,
            "src": "1845:199:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "2073:101:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 621,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 617,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1419,
                            "src": "2091:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2091:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 619,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 818,
                            "src": "2104:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2104:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2091:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f7267616e697a6174696f6e3a2074782e6f726967696e206973206e6f7420746865206f776e6572",
                        "id": 622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2113:42:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e9f676274972057c73ad9e3b50fe192c1b5696f49dae4e27e959ec45afb42f7",
                          "typeString": "literal_string \"Organization: tx.origin is not the owner\""
                        },
                        "value": "Organization: tx.origin is not the owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e9f676274972057c73ad9e3b50fe192c1b5696f49dae4e27e959ec45afb42f7",
                          "typeString": "literal_string \"Organization: tx.origin is not the owner\""
                        }
                      ],
                      "id": 616,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1410,
                        1411
                      ],
                      "referencedDeclaration": 1411,
                      "src": "2083:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2083:73:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 624,
                  "nodeType": "ExpressionStatement",
                  "src": "2083:73:4"
                },
                {
                  "id": 625,
                  "nodeType": "PlaceholderStatement",
                  "src": "2166:1:4"
                }
              ]
            },
            "documentation": null,
            "id": 627,
            "name": "onlyManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 615,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2070:2:4"
            },
            "src": "2050:124:4",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 649,
              "nodeType": "Block",
              "src": "2236:131:4",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 634,
                        "name": "members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 410,
                        "src": "2250:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                          "typeString": "mapping(address => struct Organization.Member storage ref)"
                        }
                      },
                      "id": 636,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 635,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 629,
                        "src": "2258:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2250:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Member_$394_storage",
                        "typeString": "struct Organization.Member storage ref"
                      }
                    },
                    "id": 637,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "hasData",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 393,
                    "src": "2250:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 648,
                  "nodeType": "IfStatement",
                  "src": "2246:115:4",
                  "trueBody": {
                    "id": 647,
                    "nodeType": "Block",
                    "src": "2275:86:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "2289:22:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 638,
                              "name": "members",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 410,
                              "src": "2296:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Member_$394_storage_$",
                                "typeString": "mapping(address => struct Organization.Member storage ref)"
                              }
                            },
                            "id": 640,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 639,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 629,
                              "src": "2304:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2296:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Member_$394_storage",
                              "typeString": "struct Organization.Member storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 642,
                        "nodeType": "ExpressionStatement",
                        "src": "2289:22:4"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 644,
                              "name": "member",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 629,
                              "src": "2343:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 643,
                            "name": "RemoveMember",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 385,
                            "src": "2330:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2330:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 646,
                        "nodeType": "EmitStatement",
                        "src": "2325:25:4"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 650,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 632,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 631,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 828,
                  "src": "2226:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2226:9:4"
              }
            ],
            "name": "_removeMember",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "member",
                  "nodeType": "VariableDeclaration",
                  "scope": 650,
                  "src": "2203:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2203:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2202:16:4"
            },
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2236:0:4"
            },
            "scope": 651,
            "src": "2180:187:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 652,
        "src": "178:2192:4"
      }
    ],
    "src": "0:2370:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.11+commit.c082d0b4.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.15",
  "updatedAt": "2019-11-05T03:22:27.816Z",
  "devdoc": {
    "methods": {
      "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": {}
  }
}