{
  "contractName": "PosterRegistry",
  "abi": [
    {
      "inputs": [
        {
          "name": "_treasuryAddress",
          "type": "address"
        },
        {
          "name": "_events",
          "type": "address"
        },
        {
          "name": "_auth",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor",
      "signature": "constructor"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokensContributed",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xd244ac32"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xfc0c546a"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0x61d027b3"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "tokensRegisteredFor",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xa5988a6f"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "msgSender",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "registerTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function",
      "signature": "0x89c966c5"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "msgSender",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "releaseTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function",
      "signature": "0xf40d71f1"
    }
  ],
  "bytecode": "0x6080604052600060025534801561001557600080fd5b506040516060806108788339810180604052606081101561003557600080fd5b50805160208083015160409384015160008054600160a060020a03808416600160a060020a0319928316179092556004805483881692169190911780825587517ffe2ada6b000000000000000000000000000000000000000000000000000000008152975196979496939592169363fe2ada6b9381830193929091829003018186803b1580156100c457600080fd5b505afa1580156100d8573d6000803e3d6000fd5b505050506040513d60208110156100ee57600080fd5b505160038054600160a060020a03928316600160a060020a03199182161790915560058054949092169316929092179091555050610747806101316000396000f3fe6080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166361d027b3811461007c57806389c966c5146100ad578063a5988a6f146100e8578063d244ac321461012d578063f40d71f114610142578063fc0c546a1461017b575b600080fd5b34801561008857600080fd5b50610091610190565b60408051600160a060020a039092168252519081900360200190f35b3480156100b957600080fd5b506100e6600480360360408110156100d057600080fd5b50600160a060020a03813516906020013561019f565b005b3480156100f457600080fd5b5061011b6004803603602081101561010b57600080fd5b5035600160a060020a031661032a565b60408051918252519081900360200190f35b34801561013957600080fd5b5061011b61033b565b34801561014e57600080fd5b506100e66004803603604081101561016557600080fd5b50600160a060020a038135169060200135610341565b34801561018757600080fd5b50610091610566565b600454600160a060020a031690565b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b15801561020357600080fd5b505afa158015610217573d6000803e3d6000fd5b505050506040513d602081101561022d57600080fd5b5051151561023a57600080fd5b60048054604080517ffe417fa5000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163fe417fa59160448082019260009290919082900301818387803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b50506002546102d8925090508263ffffffff61057516565b600255600160a060020a038216600090815260016020526040902054610304908263ffffffff61057516565b600160a060020a0383166000908152600160205260409020556103268261058e565b5050565b6000610335826106eb565b92915050565b60025490565b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b1580156103a557600080fd5b505afa1580156103b9573d6000803e3d6000fd5b505050506040513d60208110156103cf57600080fd5b505115156103dc57600080fd5b60035460048054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0392831693810193909352602483018590525192169163095ea7b3916044808201926020929091908290030181600087803b15801561044f57600080fd5b505af1158015610463573d6000803e3d6000fd5b505050506040513d602081101561047957600080fd5b505060048054604080517ff40d71f1000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163f40d71f19160448082019260009290919082900301818387803b1580156104ed57600080fd5b505af1158015610501573d6000803e3d6000fd5b505050600160a060020a03831660009081526001602052604090205461052e91508263ffffffff61070616565b600160a060020a03831660009081526001602052604090205560025461055a908263ffffffff61070616565b6002556103268261058e565b600354600160a060020a031690565b60008282018381101561058757600080fd5b9392505050565b60408051600280825260608083018452926020830190803883395050815191925050600160a060020a03831690829060009081106105c857fe5b602090810290910101526105db826106eb565b8151829060019081106105ea57fe5b6020908102909101810191909152600554604080517f2790240100000000000000000000000000000000000000000000000000000000815260048101918252601460448201527f506f7374657252656769737472795570646174650000000000000000000000006064820152608060248201908152855160848301528551600160a060020a039094169463279024019487949384939260a490910191868201910280838360005b838110156106a9578181015183820152602001610691565b505050509050019350505050600060405180830381600087803b1580156106cf57600080fd5b505af11580156106e3573d6000803e3d6000fd5b505050505050565b600160a060020a031660009081526001602052604090205490565b60008282111561071557600080fd5b5090039056fea165627a7a7230582075660210d1f58aa43daa2a45ed450b9aabb5b09cefceb8eea9cf9bfee180466b0029",
  "deployedBytecode": "0x6080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166361d027b3811461007c57806389c966c5146100ad578063a5988a6f146100e8578063d244ac321461012d578063f40d71f114610142578063fc0c546a1461017b575b600080fd5b34801561008857600080fd5b50610091610190565b60408051600160a060020a039092168252519081900360200190f35b3480156100b957600080fd5b506100e6600480360360408110156100d057600080fd5b50600160a060020a03813516906020013561019f565b005b3480156100f457600080fd5b5061011b6004803603602081101561010b57600080fd5b5035600160a060020a031661032a565b60408051918252519081900360200190f35b34801561013957600080fd5b5061011b61033b565b34801561014e57600080fd5b506100e66004803603604081101561016557600080fd5b50600160a060020a038135169060200135610341565b34801561018757600080fd5b50610091610566565b600454600160a060020a031690565b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b15801561020357600080fd5b505afa158015610217573d6000803e3d6000fd5b505050506040513d602081101561022d57600080fd5b5051151561023a57600080fd5b60048054604080517ffe417fa5000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163fe417fa59160448082019260009290919082900301818387803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b50506002546102d8925090508263ffffffff61057516565b600255600160a060020a038216600090815260016020526040902054610304908263ffffffff61057516565b600160a060020a0383166000908152600160205260409020556103268261058e565b5050565b6000610335826106eb565b92915050565b60025490565b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b1580156103a557600080fd5b505afa1580156103b9573d6000803e3d6000fd5b505050506040513d60208110156103cf57600080fd5b505115156103dc57600080fd5b60035460048054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0392831693810193909352602483018590525192169163095ea7b3916044808201926020929091908290030181600087803b15801561044f57600080fd5b505af1158015610463573d6000803e3d6000fd5b505050506040513d602081101561047957600080fd5b505060048054604080517ff40d71f1000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163f40d71f19160448082019260009290919082900301818387803b1580156104ed57600080fd5b505af1158015610501573d6000803e3d6000fd5b505050600160a060020a03831660009081526001602052604090205461052e91508263ffffffff61070616565b600160a060020a03831660009081526001602052604090205560025461055a908263ffffffff61070616565b6002556103268261058e565b600354600160a060020a031690565b60008282018381101561058757600080fd5b9392505050565b60408051600280825260608083018452926020830190803883395050815191925050600160a060020a03831690829060009081106105c857fe5b602090810290910101526105db826106eb565b8151829060019081106105ea57fe5b6020908102909101810191909152600554604080517f2790240100000000000000000000000000000000000000000000000000000000815260048101918252601460448201527f506f7374657252656769737472795570646174650000000000000000000000006064820152608060248201908152855160848301528551600160a060020a039094169463279024019487949384939260a490910191868201910280838360005b838110156106a9578181015183820152602001610691565b505050509050019350505050600060405180830381600087803b1580156106cf57600080fd5b505af11580156106e3573d6000803e3d6000fd5b505050505050565b600160a060020a031660009081526001602052604090205490565b60008282111561071557600080fd5b5090039056fea165627a7a7230582075660210d1f58aa43daa2a45ed450b9aabb5b09cefceb8eea9cf9bfee180466b0029",
  "sourceMap": "206:3451:9:-;;;364:1;330:35;;746:222;8:9:-1;5:2;;;30:1;27;20:12;5:2;746:222:9;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;746:222:9;;;;;;;;;;;;557:17:1;:67;;-1:-1:-1;;;;;557:67:1;;;-1:-1:-1;;;;;;557:67:1;;;;;;;853:9:9;:38;;;;;;;;;;;;;;910:16;;;;;;;746:222;;;;;;910:9;;;:14;;:16;;;;746:222;910:16;;;;;;;:9;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;910:16:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;910:16:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;910:16:9;901:6;:25;;-1:-1:-1;;;;;901:25:9;;;-1:-1:-1;;;;;;901:25:9;;;;;;;936:1;:25;;;;;;;;;;;;;;;-1:-1:-1;;206:3451:9;;;;;;",
  "deployedSourceMap": "206:3451:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1615:94:9;;;;;;;;-1:-1:-1;;;;;1615:94:9;;;;;;;;;;;;;;2184:407;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2184:407:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2184:407:9;;;;;;;;;;;1897:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1897:105:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1897:105:9;-1:-1:-1;;;;;1897:105:9;;;;;;;;;;;;;;;;;;;1189:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1189:100:9;;;;2768:452;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2768:452:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2768:452:9;;;;;;;;;1401:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1401:88:9;;;;1615:94;1692:9;;-1:-1:-1;;;;;1692:9:9;1615:94;:::o;2184:407::-;770:17:1;;:49;;;;;;808:10;770:49;;;;;;-1:-1:-1;;;;;770:17:1;;;;:37;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;770:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;770:49:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;770:49:1;762:58;;;;;;;;2388:9:9;;;:40;;;;;;-1:-1:-1;;;;;2388:40:9;;;;;;;;;;;;;;;;;;:9;;;;;:21;;:40;;;;;:9;;:40;;;;;;;;:9;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;2388:40:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2459:18:9;;:30;;-1:-1:-1;2459:18:9;-1:-1:-1;2482:6:9;2459:30;:22;:30;:::i;:::-;2438:18;:51;-1:-1:-1;;;;;2522:20:9;;;;;;:9;:20;;;;;;:32;;2547:6;2522:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;2499:20:9;;;;;;:9;:20;;;;;:55;2564:20;2509:9;2564;:20::i;:::-;2184:407;;:::o;1897:105::-;1960:4;1983:12;1993:1;1983:9;:12::i;:::-;1976:19;1897:105;-1:-1:-1;;1897:105:9:o;1189:100::-;1264:18;;1189:100;:::o;2768:452::-;770:17:1;;:49;;;;;;808:10;770:49;;;;;;-1:-1:-1;;;;;770:17:1;;;;:37;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;770:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;770:49:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;770:49:1;762:58;;;;;;;;2963:6:9;;2986:9;;;2963:42;;;;;;-1:-1:-1;;;;;2986:9:9;;;2963:42;;;;;;;;;;;;;;:6;;;:14;;:42;;;;;;;;;;;;;;;:6;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;2963:42:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2963:42:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3015:9:9;;;:42;;;;;;-1:-1:-1;;;;;3015:42:9;;;;;;;;;;;;;;;;;;:9;;;;;:23;;:42;;;;;:9;;:42;;;;;;;;:9;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;3015:42:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;3090:20:9;;;;;;:9;:20;;;;;;:32;;-1:-1:-1;3115:6:9;3090:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;3067:20:9;;;;;;:9;:20;;;;;:55;3153:18;;:30;;3176:6;3153:30;:22;:30;:::i;:::-;3132:18;:51;3193:20;3203:9;3193;:20::i;1401:88::-;1475:6;;-1:-1:-1;;;;;1475:6:9;1401:88;:::o;1431:145:14:-;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;;1568:1;1431:145;-1:-1:-1;;;1431:145:14:o;3241:313:9:-;3403:16;;;3417:1;3403:16;;;3379:21;3403:16;;;;;3379:21;3403:16;;;;;105:10:-1;3403:16:9;88:34:-1;-1:-1;;3429:7:9;;3379:40;;-1:-1:-1;;;;;;;3447:7:9;;;3379:40;;3434:1;;3429:7;;;;;;;;;;;;;;:26;3483:12;3493:1;3483:9;:12::i;:::-;3465:7;;:4;;3475:21;;3465:7;;;;;;;;;;;;;;;:31;;;;3506:1;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3506:1:9;;;;:11;;3542:4;;3506:41;;;;;;;;;;;;;;;;;:1;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3506:41:9;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3506:41:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3506:41:9;;;;3241:313;;:::o;3560:95::-;-1:-1:-1;;;;;3636:12:9;3613:4;3636:12;;;:9;:12;;;;;;;3560:95::o;1205:145:14:-;1263:7;1290:6;;;;1282:15;;;;;;-1:-1:-1;1319:5:14;;;1205:145::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"../treasury/Treasury.sol\";\nimport \"../event/EventEmitter.sol\";\n\n/** @title PosterRegistry\n    @author Freydal\n*/\ncontract PosterRegistry is Authorizable {\n    using SafeMath for uint;\n\n    mapping(address => uint) private _balances;\n    uint private _tokensContributed = 0;\n    DigmToken private _token;\n    Treasury private _treasury;\n    EventEmitter private e;\n\n    /** @dev Creates a new PosterRegistry\n        @notice Creates a new PosterRegistry\n        @param _treasuryAddress Deployed Treasury contract address\n        @param _events Deployed Events contract address\n        @param _auth Deployed AuthorizedAddresses contract address\n    */\n    constructor(address _treasuryAddress, address _events, address _auth) Authorizable(_auth) public {\n        _treasury = Treasury(_treasuryAddress);\n        _token = _treasury.digm();\n        e = EventEmitter(_events);\n    }\n\n    /** @dev The number of tokens that have been contributed to the contract\n        @notice The number of tokens that have been contributed to the contract\n        @return Total number of tokens contributed\n    */\n    function tokensContributed() external view returns (uint) {\n        return _tokensContributed;\n    }\n\n    /** @dev The token address\n        @notice The token address\n        @return DigmToken address\n    */\n    function token() external view returns (address) {\n        return address(_token);\n    }\n\n    /** @dev The Treasury address\n        @notice The Treasury address\n        @return Deployed Treasury address\n    */\n    function treasury() external view returns (address) {\n        return address(_treasury);\n    }\n\n    /** @dev Tokens registered for a user\n        @notice Tokens registered for a user\n        @param a Address to get value for\n        @return Tokens registered for address\n    */\n    function tokensRegisteredFor(address a) external view returns (uint) {\n        return tokensFor(a);\n    }\n\n    /** @dev Register tokens.\n        @notice Register tokens.\n        @param msgSender Address that called the proxy\n        @param amount Number of tokens to register\n    */\n    function registerTokens(address msgSender, uint amount) external isAuthorized {\n        //Claim tokens from the treasury, delivering them to this contract and accounting for the balances locally.\n        _treasury.claimTokens(msgSender, amount);\n        _tokensContributed = _tokensContributed.add(amount);\n        _balances[msgSender] = _balances[msgSender].add(amount);\n        emitEvent(msgSender);\n    }\n\n    /** @dev Release tokens\n        @notice Release tokens\n        @param msgSender Address that called the proxy\n        @param amount Number of tokens to release\n    */\n    function releaseTokens(address msgSender, uint amount) external isAuthorized {\n        //Approve treasury to take tokens from this contract, treasury takes tokens and updates accounting.\n        _token.approve(address(_treasury), amount);\n        _treasury.releaseTokens(msgSender, amount);\n        _balances[msgSender] = _balances[msgSender].sub(amount);\n        _tokensContributed = _tokensContributed.sub(amount);\n        emitEvent(msgSender);\n    }\n\n    //Internal\n    function emitEvent(address a) internal {\n        //Emits an event for the address that made a change and the new current balance.\n        bytes32[] memory data = new bytes32[](2);\n        data[0] = bytes32(uint(a));\n        data[1] = bytes32(tokensFor(a));\n        e.emitEvent(\"PosterRegistryUpdate\", data);\n    }\n\n    function tokensFor(address a) internal view returns (uint) {\n        return _balances[a];\n    }\n}\n",
  "sourcePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/poster/PosterRegistry.sol",
  "ast": {
    "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/poster/PosterRegistry.sol",
    "exportedSymbols": {
      "PosterRegistry": [
        1045
      ]
    },
    "id": 1046,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 810,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 811,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 3905,
        "src": "25:59:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/treasury/Treasury.sol",
        "file": "../treasury/Treasury.sol",
        "id": 812,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 1562,
        "src": "85:34:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/event/EventEmitter.sol",
        "file": "../event/EventEmitter.sol",
        "id": 813,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 141,
        "src": "120:35:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 814,
              "name": "Authorizable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 102,
              "src": "233:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Authorizable_$102",
                "typeString": "contract Authorizable"
              }
            },
            "id": 815,
            "nodeType": "InheritanceSpecifier",
            "src": "233:12:9"
          }
        ],
        "contractDependencies": [
          102
        ],
        "contractKind": "contract",
        "documentation": "@title PosterRegistry\n@author Freydal",
        "fullyImplemented": true,
        "id": 1045,
        "linearizedBaseContracts": [
          1045,
          102
        ],
        "name": "PosterRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 818,
            "libraryName": {
              "contractScope": null,
              "id": 816,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3904,
              "src": "258:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$3904",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "252:24:9",
            "typeName": {
              "id": 817,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "271:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 822,
            "name": "_balances",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "282:42:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 821,
              "keyType": {
                "id": 819,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "290:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "282:24:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 820,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "301:4:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 825,
            "name": "_tokensContributed",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "330:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 823,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "330:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 824,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "364:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 827,
            "name": "_token",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "371:24:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DigmToken_$712",
              "typeString": "contract DigmToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 826,
              "name": "DigmToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 712,
              "src": "371:9:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DigmToken_$712",
                "typeString": "contract DigmToken"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 829,
            "name": "_treasury",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "401:26:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Treasury_$1561",
              "typeString": "contract Treasury"
            },
            "typeName": {
              "contractScope": null,
              "id": 828,
              "name": "Treasury",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1561,
              "src": "401:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Treasury_$1561",
                "typeString": "contract Treasury"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 831,
            "name": "e",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "433:22:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_EventEmitter_$140",
              "typeString": "contract EventEmitter"
            },
            "typeName": {
              "contractScope": null,
              "id": 830,
              "name": "EventEmitter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 140,
              "src": "433:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EventEmitter_$140",
                "typeString": "contract EventEmitter"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 861,
              "nodeType": "Block",
              "src": "843:125:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 843,
                      "name": "_treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 829,
                      "src": "853:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Treasury_$1561",
                        "typeString": "contract Treasury"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 845,
                          "name": "_treasuryAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 833,
                          "src": "874:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 844,
                        "name": "Treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1561,
                        "src": "865:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Treasury_$1561_$",
                          "typeString": "type(contract Treasury)"
                        }
                      },
                      "id": 846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "865:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Treasury_$1561",
                        "typeString": "contract Treasury"
                      }
                    },
                    "src": "853:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Treasury_$1561",
                      "typeString": "contract Treasury"
                    }
                  },
                  "id": 848,
                  "nodeType": "ExpressionStatement",
                  "src": "853:38:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 849,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 827,
                      "src": "901:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DigmToken_$712",
                        "typeString": "contract DigmToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 850,
                          "name": "_treasury",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 829,
                          "src": "910:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Treasury_$1561",
                            "typeString": "contract Treasury"
                          }
                        },
                        "id": 851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "digm",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1056,
                        "src": "910:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DigmToken_$712_$",
                          "typeString": "function () view external returns (contract DigmToken)"
                        }
                      },
                      "id": 852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "910:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DigmToken_$712",
                        "typeString": "contract DigmToken"
                      }
                    },
                    "src": "901:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DigmToken_$712",
                      "typeString": "contract DigmToken"
                    }
                  },
                  "id": 854,
                  "nodeType": "ExpressionStatement",
                  "src": "901:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 855,
                      "name": "e",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 831,
                      "src": "936:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventEmitter_$140",
                        "typeString": "contract EventEmitter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 857,
                          "name": "_events",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 835,
                          "src": "953:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 856,
                        "name": "EventEmitter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "940:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_EventEmitter_$140_$",
                          "typeString": "type(contract EventEmitter)"
                        }
                      },
                      "id": 858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "940:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventEmitter_$140",
                        "typeString": "contract EventEmitter"
                      }
                    },
                    "src": "936:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventEmitter_$140",
                      "typeString": "contract EventEmitter"
                    }
                  },
                  "id": 860,
                  "nodeType": "ExpressionStatement",
                  "src": "936:25:9"
                }
              ]
            },
            "documentation": "@dev Creates a new PosterRegistry\n@notice Creates a new PosterRegistry\n@param _treasuryAddress Deployed Treasury contract address\n@param _events Deployed Events contract address\n@param _auth Deployed AuthorizedAddresses contract address",
            "id": 862,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 840,
                    "name": "_auth",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 837,
                    "src": "829:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 841,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 839,
                  "name": "Authorizable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 102,
                  "src": "816:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Authorizable_$102_$",
                    "typeString": "type(contract Authorizable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "816:19:9"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 833,
                  "name": "_treasuryAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "758:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 832,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 835,
                  "name": "_events",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "784:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 834,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "784:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 837,
                  "name": "_auth",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "801:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 836,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "801:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "757:58:9"
            },
            "returnParameters": {
              "id": 842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "843:0:9"
            },
            "scope": 1045,
            "src": "746:222:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 869,
              "nodeType": "Block",
              "src": "1247:42:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 867,
                    "name": "_tokensContributed",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 825,
                    "src": "1264:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 866,
                  "id": 868,
                  "nodeType": "Return",
                  "src": "1257:25:9"
                }
              ]
            },
            "documentation": "@dev The number of tokens that have been contributed to the contract\n@notice The number of tokens that have been contributed to the contract\n@return Total number of tokens contributed",
            "id": 870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensContributed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1215:2:9"
            },
            "returnParameters": {
              "id": 866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 865,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 870,
                  "src": "1241:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 864,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1241:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1240:6:9"
            },
            "scope": 1045,
            "src": "1189:100:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 879,
              "nodeType": "Block",
              "src": "1450:39:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 827,
                        "src": "1475:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      ],
                      "id": 875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1467:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1467:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 874,
                  "id": 878,
                  "nodeType": "Return",
                  "src": "1460:22:9"
                }
              ]
            },
            "documentation": "@dev The token address\n@notice The token address\n@return DigmToken address",
            "id": 880,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 871,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1415:2:9"
            },
            "returnParameters": {
              "id": 874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 873,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 880,
                  "src": "1441:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1440:9:9"
            },
            "scope": 1045,
            "src": "1401:88:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 889,
              "nodeType": "Block",
              "src": "1667:42:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 886,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "1692:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      ],
                      "id": 885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1684:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1684:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 884,
                  "id": 888,
                  "nodeType": "Return",
                  "src": "1677:25:9"
                }
              ]
            },
            "documentation": "@dev The Treasury address\n@notice The Treasury address\n@return Deployed Treasury address",
            "id": 890,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "treasury",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1632:2:9"
            },
            "returnParameters": {
              "id": 884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 883,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 890,
                  "src": "1658:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 882,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1658:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1657:9:9"
            },
            "scope": 1045,
            "src": "1615:94:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 901,
              "nodeType": "Block",
              "src": "1966:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 898,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "1993:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 897,
                      "name": "tokensFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1044,
                      "src": "1983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1983:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 896,
                  "id": 900,
                  "nodeType": "Return",
                  "src": "1976:19:9"
                }
              ]
            },
            "documentation": "@dev Tokens registered for a user\n@notice Tokens registered for a user\n@param a Address to get value for\n@return Tokens registered for address",
            "id": 902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensRegisteredFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 892,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "1926:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1926:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1925:11:9"
            },
            "returnParameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "1960:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1960:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1959:6:9"
            },
            "scope": 1045,
            "src": "1897:105:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 940,
              "nodeType": "Block",
              "src": "2262:329:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 914,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2410:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 915,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 906,
                        "src": "2421:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 911,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "2388:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      },
                      "id": 913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1176,
                      "src": "2388:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2388:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 917,
                  "nodeType": "ExpressionStatement",
                  "src": "2388:40:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 918,
                      "name": "_tokensContributed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "2438:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 921,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 906,
                          "src": "2482:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 919,
                          "name": "_tokensContributed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "2459:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3883,
                        "src": "2459:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2459:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2438:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 924,
                  "nodeType": "ExpressionStatement",
                  "src": "2438:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 925,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "2499:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 927,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 926,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2509:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2499:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 932,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 906,
                          "src": "2547:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 928,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "2522:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 930,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 929,
                            "name": "msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 904,
                            "src": "2532:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2522:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3883,
                        "src": "2522:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2522:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2499:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 935,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:55:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 937,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2574:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 936,
                      "name": "emitEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1032,
                      "src": "2564:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2564:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 939,
                  "nodeType": "ExpressionStatement",
                  "src": "2564:20:9"
                }
              ]
            },
            "documentation": "@dev Register tokens.\n@notice Register tokens.\n@param msgSender Address that called the proxy\n@param amount Number of tokens to register",
            "id": 941,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 909,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 908,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "2249:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2249:12:9"
              }
            ],
            "name": "registerTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 904,
                  "name": "msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "2208:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 903,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2208:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 906,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "2227:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2227:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2207:32:9"
            },
            "returnParameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2262:0:9"
            },
            "scope": 1045,
            "src": "2184:407:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 988,
              "nodeType": "Block",
              "src": "2845:375:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 954,
                            "name": "_treasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 829,
                            "src": "2986:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Treasury_$1561",
                              "typeString": "contract Treasury"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Treasury_$1561",
                              "typeString": "contract Treasury"
                            }
                          ],
                          "id": 953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2978:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2978:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 956,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "2998:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 950,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 827,
                        "src": "2963:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      },
                      "id": 952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4125,
                      "src": "2963:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2963:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 958,
                  "nodeType": "ExpressionStatement",
                  "src": "2963:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 962,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3039:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 963,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "3050:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 959,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "3015:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      },
                      "id": 961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "releaseTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1208,
                      "src": "3015:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3015:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 965,
                  "nodeType": "ExpressionStatement",
                  "src": "3015:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 966,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "3067:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 968,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 967,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3077:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3067:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 973,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 945,
                          "src": "3115:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 969,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "3090:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 971,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 970,
                            "name": "msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 943,
                            "src": "3100:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3090:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3859,
                        "src": "3090:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3090:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3067:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 976,
                  "nodeType": "ExpressionStatement",
                  "src": "3067:55:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 977,
                      "name": "_tokensContributed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "3132:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 980,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 945,
                          "src": "3176:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 978,
                          "name": "_tokensContributed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "3153:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3859,
                        "src": "3153:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3153:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3132:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 983,
                  "nodeType": "ExpressionStatement",
                  "src": "3132:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 985,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3203:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 984,
                      "name": "emitEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1032,
                      "src": "3193:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3193:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 987,
                  "nodeType": "ExpressionStatement",
                  "src": "3193:20:9"
                }
              ]
            },
            "documentation": "@dev Release tokens\n@notice Release tokens\n@param msgSender Address that called the proxy\n@param amount Number of tokens to release",
            "id": 989,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 948,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 947,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "2832:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2832:12:9"
              }
            ],
            "name": "releaseTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 943,
                  "name": "msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 989,
                  "src": "2791:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2791:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 945,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 989,
                  "src": "2810:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2810:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2790:32:9"
            },
            "returnParameters": {
              "id": 949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2845:0:9"
            },
            "scope": 1045,
            "src": "2768:452:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1031,
              "nodeType": "Block",
              "src": "3280:274:9",
              "statements": [
                {
                  "assignments": [
                    997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 997,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 1031,
                      "src": "3379:21:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 995,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3379:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 996,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3379:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3417:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 1000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3403:13:9",
                      "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": 998,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3407:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 999,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3407:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 1002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3403:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3379:40:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1004,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3429:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 1006,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3434:1:9",
                        "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": "3429:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1009,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 991,
                              "src": "3452:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3447:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 1010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3447:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3439:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 1011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3439:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3429:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1013,
                  "nodeType": "ExpressionStatement",
                  "src": "3429:26:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1014,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3465:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 1016,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3470:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3465:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1019,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 991,
                              "src": "3493:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1018,
                            "name": "tokensFor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1044,
                            "src": "3483:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 1020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3483:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3475:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 1021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3475:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3465:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1023,
                  "nodeType": "ExpressionStatement",
                  "src": "3465:31:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "506f737465725265676973747279557064617465",
                        "id": 1027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3518:22:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e920ca0423529a76e76653b74cf056e7efd338c4b2f9736a8d5d745c68f4e1a6",
                          "typeString": "literal_string \"PosterRegistryUpdate\""
                        },
                        "value": "PosterRegistryUpdate"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1028,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3542:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_e920ca0423529a76e76653b74cf056e7efd338c4b2f9736a8d5d745c68f4e1a6",
                          "typeString": "literal_string \"PosterRegistryUpdate\""
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "e",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 831,
                        "src": "3506:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventEmitter_$140",
                          "typeString": "contract EventEmitter"
                        }
                      },
                      "id": 1026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "emitEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 139,
                      "src": "3506:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,bytes32[] memory) external"
                      }
                    },
                    "id": 1029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3506:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1030,
                  "nodeType": "ExpressionStatement",
                  "src": "3506:41:9"
                }
              ]
            },
            "documentation": null,
            "id": 1032,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "emitEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 991,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 1032,
                  "src": "3260:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3260:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3259:11:9"
            },
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3280:0:9"
            },
            "scope": 1045,
            "src": "3241:313:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1043,
              "nodeType": "Block",
              "src": "3619:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1039,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 822,
                      "src": "3636:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1041,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1040,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "3646:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3636:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1038,
                  "id": 1042,
                  "nodeType": "Return",
                  "src": "3629:19:9"
                }
              ]
            },
            "documentation": null,
            "id": 1044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1034,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 1044,
                  "src": "3579:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3579:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3578:11:9"
            },
            "returnParameters": {
              "id": 1038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1037,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1044,
                  "src": "3613:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1036,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3613:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3612:6:9"
            },
            "scope": 1045,
            "src": "3560:95:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 1046,
        "src": "206:3451:9"
      }
    ],
    "src": "0:3658:9"
  },
  "legacyAST": {
    "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/poster/PosterRegistry.sol",
    "exportedSymbols": {
      "PosterRegistry": [
        1045
      ]
    },
    "id": 1046,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 810,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 811,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 3905,
        "src": "25:59:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/treasury/Treasury.sol",
        "file": "../treasury/Treasury.sol",
        "id": 812,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 1562,
        "src": "85:34:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/event/EventEmitter.sol",
        "file": "../event/EventEmitter.sol",
        "id": 813,
        "nodeType": "ImportDirective",
        "scope": 1046,
        "sourceUnit": 141,
        "src": "120:35:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 814,
              "name": "Authorizable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 102,
              "src": "233:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Authorizable_$102",
                "typeString": "contract Authorizable"
              }
            },
            "id": 815,
            "nodeType": "InheritanceSpecifier",
            "src": "233:12:9"
          }
        ],
        "contractDependencies": [
          102
        ],
        "contractKind": "contract",
        "documentation": "@title PosterRegistry\n@author Freydal",
        "fullyImplemented": true,
        "id": 1045,
        "linearizedBaseContracts": [
          1045,
          102
        ],
        "name": "PosterRegistry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 818,
            "libraryName": {
              "contractScope": null,
              "id": 816,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3904,
              "src": "258:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$3904",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "252:24:9",
            "typeName": {
              "id": 817,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "271:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 822,
            "name": "_balances",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "282:42:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 821,
              "keyType": {
                "id": 819,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "290:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "282:24:9",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 820,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "301:4:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 825,
            "name": "_tokensContributed",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "330:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 823,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "330:4:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 824,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "364:1:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 827,
            "name": "_token",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "371:24:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DigmToken_$712",
              "typeString": "contract DigmToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 826,
              "name": "DigmToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 712,
              "src": "371:9:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DigmToken_$712",
                "typeString": "contract DigmToken"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 829,
            "name": "_treasury",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "401:26:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Treasury_$1561",
              "typeString": "contract Treasury"
            },
            "typeName": {
              "contractScope": null,
              "id": 828,
              "name": "Treasury",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1561,
              "src": "401:8:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Treasury_$1561",
                "typeString": "contract Treasury"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 831,
            "name": "e",
            "nodeType": "VariableDeclaration",
            "scope": 1045,
            "src": "433:22:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_EventEmitter_$140",
              "typeString": "contract EventEmitter"
            },
            "typeName": {
              "contractScope": null,
              "id": 830,
              "name": "EventEmitter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 140,
              "src": "433:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EventEmitter_$140",
                "typeString": "contract EventEmitter"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 861,
              "nodeType": "Block",
              "src": "843:125:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 843,
                      "name": "_treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 829,
                      "src": "853:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Treasury_$1561",
                        "typeString": "contract Treasury"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 845,
                          "name": "_treasuryAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 833,
                          "src": "874:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 844,
                        "name": "Treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1561,
                        "src": "865:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Treasury_$1561_$",
                          "typeString": "type(contract Treasury)"
                        }
                      },
                      "id": 846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "865:26:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Treasury_$1561",
                        "typeString": "contract Treasury"
                      }
                    },
                    "src": "853:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Treasury_$1561",
                      "typeString": "contract Treasury"
                    }
                  },
                  "id": 848,
                  "nodeType": "ExpressionStatement",
                  "src": "853:38:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 849,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 827,
                      "src": "901:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DigmToken_$712",
                        "typeString": "contract DigmToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 850,
                          "name": "_treasury",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 829,
                          "src": "910:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Treasury_$1561",
                            "typeString": "contract Treasury"
                          }
                        },
                        "id": 851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "digm",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1056,
                        "src": "910:14:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DigmToken_$712_$",
                          "typeString": "function () view external returns (contract DigmToken)"
                        }
                      },
                      "id": 852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "910:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DigmToken_$712",
                        "typeString": "contract DigmToken"
                      }
                    },
                    "src": "901:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DigmToken_$712",
                      "typeString": "contract DigmToken"
                    }
                  },
                  "id": 854,
                  "nodeType": "ExpressionStatement",
                  "src": "901:25:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 855,
                      "name": "e",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 831,
                      "src": "936:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventEmitter_$140",
                        "typeString": "contract EventEmitter"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 857,
                          "name": "_events",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 835,
                          "src": "953:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 856,
                        "name": "EventEmitter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 140,
                        "src": "940:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_EventEmitter_$140_$",
                          "typeString": "type(contract EventEmitter)"
                        }
                      },
                      "id": 858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "940:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EventEmitter_$140",
                        "typeString": "contract EventEmitter"
                      }
                    },
                    "src": "936:25:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventEmitter_$140",
                      "typeString": "contract EventEmitter"
                    }
                  },
                  "id": 860,
                  "nodeType": "ExpressionStatement",
                  "src": "936:25:9"
                }
              ]
            },
            "documentation": "@dev Creates a new PosterRegistry\n@notice Creates a new PosterRegistry\n@param _treasuryAddress Deployed Treasury contract address\n@param _events Deployed Events contract address\n@param _auth Deployed AuthorizedAddresses contract address",
            "id": 862,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 840,
                    "name": "_auth",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 837,
                    "src": "829:5:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 841,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 839,
                  "name": "Authorizable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 102,
                  "src": "816:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Authorizable_$102_$",
                    "typeString": "type(contract Authorizable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "816:19:9"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 833,
                  "name": "_treasuryAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "758:24:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 832,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 835,
                  "name": "_events",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "784:15:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 834,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "784:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 837,
                  "name": "_auth",
                  "nodeType": "VariableDeclaration",
                  "scope": 862,
                  "src": "801:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 836,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "801:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "757:58:9"
            },
            "returnParameters": {
              "id": 842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "843:0:9"
            },
            "scope": 1045,
            "src": "746:222:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 869,
              "nodeType": "Block",
              "src": "1247:42:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 867,
                    "name": "_tokensContributed",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 825,
                    "src": "1264:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 866,
                  "id": 868,
                  "nodeType": "Return",
                  "src": "1257:25:9"
                }
              ]
            },
            "documentation": "@dev The number of tokens that have been contributed to the contract\n@notice The number of tokens that have been contributed to the contract\n@return Total number of tokens contributed",
            "id": 870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensContributed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1215:2:9"
            },
            "returnParameters": {
              "id": 866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 865,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 870,
                  "src": "1241:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 864,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1241:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1240:6:9"
            },
            "scope": 1045,
            "src": "1189:100:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 879,
              "nodeType": "Block",
              "src": "1450:39:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 827,
                        "src": "1475:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      ],
                      "id": 875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1467:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1467:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 874,
                  "id": 878,
                  "nodeType": "Return",
                  "src": "1460:22:9"
                }
              ]
            },
            "documentation": "@dev The token address\n@notice The token address\n@return DigmToken address",
            "id": 880,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 871,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1415:2:9"
            },
            "returnParameters": {
              "id": 874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 873,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 880,
                  "src": "1441:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1441:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1440:9:9"
            },
            "scope": 1045,
            "src": "1401:88:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 889,
              "nodeType": "Block",
              "src": "1667:42:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 886,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "1692:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      ],
                      "id": 885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1684:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1684:18:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 884,
                  "id": 888,
                  "nodeType": "Return",
                  "src": "1677:25:9"
                }
              ]
            },
            "documentation": "@dev The Treasury address\n@notice The Treasury address\n@return Deployed Treasury address",
            "id": 890,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "treasury",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1632:2:9"
            },
            "returnParameters": {
              "id": 884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 883,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 890,
                  "src": "1658:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 882,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1658:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1657:9:9"
            },
            "scope": 1045,
            "src": "1615:94:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 901,
              "nodeType": "Block",
              "src": "1966:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 898,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 892,
                        "src": "1993:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 897,
                      "name": "tokensFor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1044,
                      "src": "1983:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1983:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 896,
                  "id": 900,
                  "nodeType": "Return",
                  "src": "1976:19:9"
                }
              ]
            },
            "documentation": "@dev Tokens registered for a user\n@notice Tokens registered for a user\n@param a Address to get value for\n@return Tokens registered for address",
            "id": 902,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensRegisteredFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 893,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 892,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "1926:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1926:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1925:11:9"
            },
            "returnParameters": {
              "id": 896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 895,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 902,
                  "src": "1960:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 894,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1960:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1959:6:9"
            },
            "scope": 1045,
            "src": "1897:105:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 940,
              "nodeType": "Block",
              "src": "2262:329:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 914,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2410:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 915,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 906,
                        "src": "2421:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 911,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "2388:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      },
                      "id": 913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1176,
                      "src": "2388:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2388:40:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 917,
                  "nodeType": "ExpressionStatement",
                  "src": "2388:40:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 918,
                      "name": "_tokensContributed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "2438:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 921,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 906,
                          "src": "2482:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 919,
                          "name": "_tokensContributed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "2459:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3883,
                        "src": "2459:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2459:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2438:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 924,
                  "nodeType": "ExpressionStatement",
                  "src": "2438:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 925,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "2499:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 927,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 926,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2509:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2499:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 932,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 906,
                          "src": "2547:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 928,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "2522:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 930,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 929,
                            "name": "msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 904,
                            "src": "2532:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2522:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3883,
                        "src": "2522:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2522:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2499:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 935,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:55:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 937,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 904,
                        "src": "2574:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 936,
                      "name": "emitEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1032,
                      "src": "2564:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2564:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 939,
                  "nodeType": "ExpressionStatement",
                  "src": "2564:20:9"
                }
              ]
            },
            "documentation": "@dev Register tokens.\n@notice Register tokens.\n@param msgSender Address that called the proxy\n@param amount Number of tokens to register",
            "id": 941,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 909,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 908,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "2249:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2249:12:9"
              }
            ],
            "name": "registerTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 904,
                  "name": "msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "2208:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 903,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2208:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 906,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 941,
                  "src": "2227:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 905,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2227:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2207:32:9"
            },
            "returnParameters": {
              "id": 910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2262:0:9"
            },
            "scope": 1045,
            "src": "2184:407:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 988,
              "nodeType": "Block",
              "src": "2845:375:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 954,
                            "name": "_treasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 829,
                            "src": "2986:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Treasury_$1561",
                              "typeString": "contract Treasury"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Treasury_$1561",
                              "typeString": "contract Treasury"
                            }
                          ],
                          "id": 953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2978:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2978:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 956,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "2998:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 950,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 827,
                        "src": "2963:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DigmToken_$712",
                          "typeString": "contract DigmToken"
                        }
                      },
                      "id": 952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4125,
                      "src": "2963:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2963:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 958,
                  "nodeType": "ExpressionStatement",
                  "src": "2963:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 962,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3039:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 963,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 945,
                        "src": "3050:6:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 959,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 829,
                        "src": "3015:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Treasury_$1561",
                          "typeString": "contract Treasury"
                        }
                      },
                      "id": 961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "releaseTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1208,
                      "src": "3015:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3015:42:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 965,
                  "nodeType": "ExpressionStatement",
                  "src": "3015:42:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 966,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "3067:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 968,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 967,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3077:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3067:20:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 973,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 945,
                          "src": "3115:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 969,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "3090:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 971,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 970,
                            "name": "msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 943,
                            "src": "3100:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3090:20:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3859,
                        "src": "3090:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3090:32:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3067:55:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 976,
                  "nodeType": "ExpressionStatement",
                  "src": "3067:55:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 977,
                      "name": "_tokensContributed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 825,
                      "src": "3132:18:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 980,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 945,
                          "src": "3176:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 978,
                          "name": "_tokensContributed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 825,
                          "src": "3153:18:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 979,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3859,
                        "src": "3153:22:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3153:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3132:51:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 983,
                  "nodeType": "ExpressionStatement",
                  "src": "3132:51:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 985,
                        "name": "msgSender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 943,
                        "src": "3203:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 984,
                      "name": "emitEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1032,
                      "src": "3193:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3193:20:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 987,
                  "nodeType": "ExpressionStatement",
                  "src": "3193:20:9"
                }
              ]
            },
            "documentation": "@dev Release tokens\n@notice Release tokens\n@param msgSender Address that called the proxy\n@param amount Number of tokens to release",
            "id": 989,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 948,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 947,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "2832:12:9",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2832:12:9"
              }
            ],
            "name": "releaseTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 943,
                  "name": "msgSender",
                  "nodeType": "VariableDeclaration",
                  "scope": 989,
                  "src": "2791:17:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2791:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 945,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 989,
                  "src": "2810:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2810:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2790:32:9"
            },
            "returnParameters": {
              "id": 949,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2845:0:9"
            },
            "scope": 1045,
            "src": "2768:452:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1031,
              "nodeType": "Block",
              "src": "3280:274:9",
              "statements": [
                {
                  "assignments": [
                    997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 997,
                      "name": "data",
                      "nodeType": "VariableDeclaration",
                      "scope": 1031,
                      "src": "3379:21:9",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 995,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3379:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 996,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3379:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 1001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3417:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        }
                      ],
                      "id": 1000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "3403:13:9",
                      "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": 998,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3407:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 999,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "3407:9:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 1002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3403:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3379:40:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1004,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3429:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 1006,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 1005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3434:1:9",
                        "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": "3429:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1009,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 991,
                              "src": "3452:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3447:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 1010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3447:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3439:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 1011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3439:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3429:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1013,
                  "nodeType": "ExpressionStatement",
                  "src": "3429:26:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1014,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3465:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 1016,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 1015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3470:1:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3465:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1019,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 991,
                              "src": "3493:1:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1018,
                            "name": "tokensFor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1044,
                            "src": "3483:9:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 1020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3483:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3475:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 1021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3475:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3465:31:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1023,
                  "nodeType": "ExpressionStatement",
                  "src": "3465:31:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "506f737465725265676973747279557064617465",
                        "id": 1027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3518:22:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e920ca0423529a76e76653b74cf056e7efd338c4b2f9736a8d5d745c68f4e1a6",
                          "typeString": "literal_string \"PosterRegistryUpdate\""
                        },
                        "value": "PosterRegistryUpdate"
                      },
                      {
                        "argumentTypes": null,
                        "id": 1028,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 997,
                        "src": "3542:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_e920ca0423529a76e76653b74cf056e7efd338c4b2f9736a8d5d745c68f4e1a6",
                          "typeString": "literal_string \"PosterRegistryUpdate\""
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1024,
                        "name": "e",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 831,
                        "src": "3506:1:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EventEmitter_$140",
                          "typeString": "contract EventEmitter"
                        }
                      },
                      "id": 1026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "emitEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 139,
                      "src": "3506:11:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,bytes32[] memory) external"
                      }
                    },
                    "id": 1029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3506:41:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1030,
                  "nodeType": "ExpressionStatement",
                  "src": "3506:41:9"
                }
              ]
            },
            "documentation": null,
            "id": 1032,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "emitEvent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 992,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 991,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 1032,
                  "src": "3260:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 990,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3260:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3259:11:9"
            },
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3280:0:9"
            },
            "scope": 1045,
            "src": "3241:313:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1043,
              "nodeType": "Block",
              "src": "3619:36:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1039,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 822,
                      "src": "3636:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1041,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1040,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1034,
                      "src": "3646:1:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3636:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1038,
                  "id": 1042,
                  "nodeType": "Return",
                  "src": "3629:19:9"
                }
              ]
            },
            "documentation": null,
            "id": 1044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1034,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 1044,
                  "src": "3579:9:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3579:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3578:11:9"
            },
            "returnParameters": {
              "id": 1038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1037,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1044,
                  "src": "3613:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1036,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3613:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3612:6:9"
            },
            "scope": 1045,
            "src": "3560:95:9",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 1046,
        "src": "206:3451:9"
      }
    ],
    "src": "0:3658:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x369815C8d340213371061b5277acE011c629B3F0",
      "transactionHash": "0xf78d27ae14472141dd134271be7db738e811525d20e24856fc99c8d4237729f4"
    },
    "6174": {
      "events": {},
      "links": {},
      "address": "0x5504a44bEd339ea18fE4898161Ae1d63e6F9c758",
      "transactionHash": "0x21d2fc7725425860a8490feb992ee95c9e930b735b5713fd5a2fea8814c5dfe2"
    }
  },
  "schemaVersion": "3.0.2",
  "updatedAt": "2019-04-04T17:37:23.917Z",
  "devdoc": {
    "author": "Freydal",
    "methods": {
      "constructor": {
        "details": "Creates a new PosterRegistry",
        "params": {
          "_auth": "Deployed AuthorizedAddresses contract address",
          "_events": "Deployed Events contract address",
          "_treasuryAddress": "Deployed Treasury contract address"
        }
      },
      "registerTokens(address,uint256)": {
        "details": "Register tokens.",
        "params": {
          "amount": "Number of tokens to register",
          "msgSender": "Address that called the proxy"
        }
      },
      "releaseTokens(address,uint256)": {
        "details": "Release tokens",
        "params": {
          "amount": "Number of tokens to release",
          "msgSender": "Address that called the proxy"
        }
      },
      "token()": {
        "details": "The token address",
        "return": "DigmToken address"
      },
      "tokensContributed()": {
        "details": "The number of tokens that have been contributed to the contract",
        "return": "Total number of tokens contributed"
      },
      "tokensRegisteredFor(address)": {
        "details": "Tokens registered for a user",
        "params": {
          "a": "Address to get value for"
        },
        "return": "Tokens registered for address"
      },
      "treasury()": {
        "details": "The Treasury address",
        "return": "Deployed Treasury address"
      }
    },
    "title": "PosterRegistry"
  },
  "userdoc": {
    "methods": {
      "constructor": "Creates a new PosterRegistry",
      "registerTokens(address,uint256)": {
        "notice": "Register tokens."
      },
      "releaseTokens(address,uint256)": {
        "notice": "Release tokens"
      },
      "token()": {
        "notice": "The token address"
      },
      "tokensContributed()": {
        "notice": "The number of tokens that have been contributed to the contract"
      },
      "tokensRegisteredFor(address)": {
        "notice": "Tokens registered for a user"
      },
      "treasury()": {
        "notice": "The Treasury address"
      }
    }
  }
}