{
  "contractName": "TokenManager",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "everHeld",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "hasInitialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_VESTINGS_PER_ADDRESS",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getEVMScriptExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRecoveryVault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ISSUE_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "vestingsLengths",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "_params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getEVMScriptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ASSIGN_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BURN_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isPetrified",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MINT_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "maxAccountTokens",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "REVOKE_VESTINGS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "vestingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "NewVesting",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "vestingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "nonVestedAmount",
          "type": "uint256"
        }
      ],
      "name": "RevokeVesting",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "executor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "script",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "input",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "name": "ScriptResult",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_transferable",
          "type": "bool"
        },
        {
          "name": "_maxAccountTokens",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_receiver",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "issue",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_receiver",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "assign",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_holder",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_receiver",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_start",
          "type": "uint64"
        },
        {
          "name": "_cliff",
          "type": "uint64"
        },
        {
          "name": "_vested",
          "type": "uint64"
        },
        {
          "name": "_revokable",
          "type": "bool"
        }
      ],
      "name": "assignVested",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_holder",
          "type": "address"
        },
        {
          "name": "_vestingId",
          "type": "uint256"
        }
      ],
      "name": "revokeVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_evmScript",
          "type": "bytes"
        }
      ],
      "name": "forward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isForwarder",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "canForward",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_recipient",
          "type": "address"
        },
        {
          "name": "_vestingId",
          "type": "uint256"
        }
      ],
      "name": "getVesting",
      "outputs": [
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "start",
          "type": "uint64"
        },
        {
          "name": "cliff",
          "type": "uint64"
        },
        {
          "name": "vesting",
          "type": "uint64"
        },
        {
          "name": "revokable",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "onTransfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "proxyPayment",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onApprove",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_holder",
          "type": "address"
        }
      ],
      "name": "spendableBalanceOf",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_holder",
          "type": "address"
        },
        {
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "transferableBalance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "allowRecoverability",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526200001d62000023640100000000026401000000009004565b62000309565b60006200003e6200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000e5578082015181840152602081019050620000c8565b50505050905090810190601f168015620001135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506200015c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001ab640100000000026401000000009004565b565b6000620001a67febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e60010260001916620002f764010000000002620046c6176401000000009004565b905090565b6000620001c66200015e640100000000026401000000009004565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a45440000000000000000815250901515620002a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200026d57808201518184015260208101905062000250565b50505050905090810190601f1680156200029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50620002f4817febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166200030264010000000002620053a8179091906401000000009004565b50565b600081549050919050565b8082555050565b6153e380620003196000396000f3006080604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303f413d1146101d25780630803fac01461022d5780630db3971b1461025c5780630f8f8b831461028757806321cb18cd146102de5780632914b9bd1461038757806332f0a3b5146104305780633e05a36d1461048757806340c10f19146105445780634a3931491461059157806372f8393c146106165780637e7db6e11461067757806380afdea8146106d2578063856222f1146107055780638b3dd7491461073857806397f2562a146107635780639d4941d8146107ba5780639dc29fac146107fd578063a1658fad1461084a578063a479e508146108f6578063a51d9a8e1461094d578063b930908f14610980578063be760488146109b3578063c0774df314610a00578063cc872b6614610aa1578063d4aae0c414610ace578063d948d46814610b25578063da682aeb14610b8e578063de4796ed14610c13578063e37ff29f14610c42578063e9a9c85014610c9b578063ecfda43214610cce578063edc168f114610cf9578063f48c305414610d2c578063fa6799f214610d7a578063fc0c546a14610dc7578063fd64eccb14610e1e575b600080fd5b3480156101de57600080fd5b50610213600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4d565b604051808215151515815260200191505060405180910390f35b34801561023957600080fd5b50610242610e6d565b604051808215151515815260200191505060405180910390f35b34801561026857600080fd5b50610271610e98565b6040518082815260200191505060405180910390f35b34801561029357600080fd5b506102c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e9d565b6040518082815260200191505060405180910390f35b3480156102ea57600080fd5b50610371600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803515159060200190929190505050610eb0565b6040518082815260200191505060405180910390f35b34801561039357600080fd5b506103ee600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611428565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043c57600080fd5b50610445611547565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561049357600080fd5b506104d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115f4565b604051808681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019550505050505060405180910390f35b34801561055057600080fd5b5061058f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117eb565b005b34801561059d57600080fd5b506105fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a0e565b604051808215151515815260200191505060405180910390f35b34801561062257600080fd5b50610661600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd5565b6040518082815260200191505060405180910390f35b34801561068357600080fd5b506106b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f46565b604051808215151515815260200191505060405180910390f35b3480156106de57600080fd5b506106e7611fa0565b60405180826000191660001916815260200191505060405180910390f35b34801561071157600080fd5b5061071a611fd7565b60405180826000191660001916815260200191505060405180910390f35b34801561074457600080fd5b5061074d612010565b6040518082815260200191505060405180910390f35b34801561076f57600080fd5b506107a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b506107fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205f565b005b34801561080957600080fd5b50610848600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612491565b005b34801561085657600080fd5b506108dc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506126c1565b604051808215151515815260200191505060405180910390f35b34801561090257600080fd5b5061090b6128c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095957600080fd5b506109626129e3565b60405180826000191660001916815260200191505060405180910390f35b34801561098c57600080fd5b50610995612a1c565b60405180826000191660001916815260200191505060405180910390f35b3480156109bf57600080fd5b506109fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a55565b005b348015610a0c57600080fd5b50610a87600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612b8f565b604051808215151515815260200191505060405180910390f35b348015610aad57600080fd5b50610acc60048036038101908080359060200190929190505050612ca3565b005b348015610ada57600080fd5b50610ae3612ddb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3157600080fd5b50610b8c600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e12565b005b348015610b9a57600080fd5b50610bf9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fe6565b604051808215151515815260200191505060405180910390f35b348015610c1f57600080fd5b50610c28612ff3565b604051808215151515815260200191505060405180910390f35b348015610c4e57600080fd5b50610c99600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919080359060200190929190505050613024565b005b348015610ca757600080fd5b50610cb06134b6565b60405180826000191660001916815260200191505060405180910390f35b348015610cda57600080fd5b50610ce36134ef565b6040518082815260200191505060405180910390f35b348015610d0557600080fd5b50610d0e6134f5565b60405180826000191660001916815260200191505060405180910390f35b610d60600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061352e565b604051808215151515815260200191505060405180910390f35b348015610d8657600080fd5b50610dc5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613668565b005b348015610dd357600080fd5b50610ddc613db6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e2a57600080fd5b50610e33613ddb565b604051808215151515815260200191505060405180910390f35b60046020528060005260406000206000915054906101000a900460ff1681565b600080610e78612010565b905060008114158015610e92575080610e8f613de4565b10155b91505090565b603281565b6000610ea98242611cd5565b9050919050565b60008060405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020610ef38989613dec565b610efe3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515610fdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fa1578082015181840152602081019050610f86565b50505050905090810190601f168015610fce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506032600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106040805190810160405280601481526020017f544d5f544f4f5f4d414e595f56455354494e47530000000000000000000000008152509015156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110c35780820151818401526020810190506110a8565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508667ffffffffffffffff168867ffffffffffffffff161115801561113757508567ffffffffffffffff168767ffffffffffffffff1611155b6040805190810160405280601381526020017f544d5f57524f4e475f434c4946465f4441544500000000000000000000000000815250901515611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111da5780820151818401526020810190506111bf565b50505050905090810190601f1680156112075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055925060a0604051908101604052808a81526020018967ffffffffffffffff1681526020018867ffffffffffffffff1681526020018767ffffffffffffffff168152602001861515815250600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160186101000a81548160ff0219169083151502179055509050506113c28a8a613e16565b8973ffffffffffffffffffffffffffffffffffffffff167f627ad26dcfe82ec79b33fda0ddd062f6fab9f4914acac8345f79090dfd86fb54848b604051808381526020018281526020019250505060405180910390a28293505050509695505050505050565b60006114326128c8565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114b957808201518184015260208101905061149e565b50505050905090810190601f1680156114e65780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b505050506040513d602081101561152f57600080fd5b81019080805190602001909291905050509050919050565b6000611551612ddb565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b505050506040513d60208110156115de57600080fd5b8101908080519060200190929190505050905090565b6000806000806000808787600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481106040805190810160405280600d81526020017f544d5f4e4f5f56455354494e470000000000000000000000000000000000000081525090151561171f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116e45780820151818401526020810190506116c9565b50505050905090810190601f1680156117115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000209250826000015497508260010160009054906101000a900467ffffffffffffffff1696508260010160089054906101000a900467ffffffffffffffff1695508260010160109054906101000a900467ffffffffffffffff1694508260010160189054906101000a900460ff1693505050509295509295909350565b60405180807f4d494e545f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902061182b8383613dec565b6118363383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118d95780820151818401526020810190506118be565b50505050905090810190601f1680156119065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061191f8484614115565b6040805190810160405280601b81526020017f544d5f4d494e545f42414c5f494e435f4e4f545f414c4c4f57454400000000008152509015156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c25780820151818401526020810190506119a7565b50505050905090810190601f1680156119ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611a08848461422d565b50505050565b6000806000611a1b610e6d565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515611af9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611abe578082015181840152602081019050611aa3565b50505050905090810190601f168015611aeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601881526020017f544d5f5452414e534645525f57524f4e475f53454e4445520000000000000000815250901515611c28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bed578082015181840152602081019050611bd2565b50505050905090810190601f168015611c1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480611c8e57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9150811515611cc757611ca18585614115565b9050801580611cb8575083611cb68742611cd5565b105b15611cc65760009250611ccc565b5b600192505b50509392505050565b600080600080600080600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054945060009350600092505b84831015611e3057600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000209150611e0c8260000154611d9489614331565b67ffffffffffffffff168460010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168560010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168660010160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16614448565b9050611e2181856144d190919063ffffffff16565b93508280600101935050611d29565b611f39846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050506040513d6020811015611f1a57600080fd5b81019080805190602001909291905050506145c690919063ffffffff16565b9550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611fd27fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b600102600019166146bb565b905090565b60405180807f49535355455f524f4c4500000000000000000000000000000000000000000000815250600a019050604051809103902081565b60006120427febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166146c6565b905090565b60036020528060005260406000206000915090505481565b60008061206b83611f46565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561210e5780820151818401526020810190506120f3565b50505050905090810190601f16801561213b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612152611547565b915061215d826146d1565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e545241435400000000000081525090151561223b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122005780820151818401526020810190506121e5565b50505050905090810190601f16801561222d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d4578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156122ce573d6000803e3d6000fd5b5061248c565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050506040513d602081101561239957600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561244f57600080fd5b505af1158015612463573d6000803e3d6000fd5b505050506040513d602081101561247957600080fd5b8101908080519060200190929190505050505b505050565b60405180807f4255524e5f524f4c450000000000000000000000000000000000000000000000815250600901905060405180910390206124d18383613dec565b6124dc3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561257f578082015181840152602081019050612564565b50505050905090810190601f1680156125ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ce77fe85856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60208110156126a957600080fd5b81019080805190602001909291905050505050505050565b600080606060006126d0610e6d565b15156126df57600093506128be565b6126e7612ddb565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272757600093506128be565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612831578082015181840152602081019050612816565b50505050905090810190601f16801561285e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561288057600080fd5b505af1158015612894573d6000803e3d6000fd5b505050506040513d60208110156128aa57600080fd5b810190808051906020019092919050505093505b5050509392505050565b6000806128d3612ddb565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561299f57600080fd5b505af11580156129b3573d6000803e3d6000fd5b505050506040513d60208110156129c957600080fd5b810190808051906020019092919050505090508091505090565b60405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902081565b60405180807f4255524e5f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902081565b60405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020612a958383613dec565b612aa03383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b43578082015181840152602081019050612b28565b50505050905090810190601f168015612b705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612b898484613e16565b50505050565b6000612b99610e6d565b8015612c9b575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b505050506040513d6020811015612c8857600080fd5b8101908080519060200190929190505050115b905092915050565b60405180807f49535355455f524f4c4500000000000000000000000000000000000000000000815250600a0190506040518091039020612ce282614723565b612ced3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612dcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d90578082015181840152602081019050612d75565b50505050905090810190601f168015612dbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612dd6308461422d565b505050565b6000612e0d7f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b6001026000191661477b565b905090565b606080612e1f3384612b8f565b6040805190810160405280601281526020017f544d5f43414e5f4e4f545f464f52574152440000000000000000000000000000815250901515612efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ec2578082015181840152602081019050612ea7565b50505050905090810190601f168015612eef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006040519080825280601f01601f191660200182016040528015612f325781602001602082028038833980820191505090505b5091506001604051908082528060200260200182016040528015612f655781602001602082028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181101515612f9957fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe0838383614786565b50505050565b6000600190509392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61301e612010565b14905090565b600061302e612010565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561310d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130d25780820151818401526020810190506130b7565b50505050905090810190601f1680156130ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613116615083565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1663f77c47916040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505050506040513d60208110156131bb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f544d5f544f4b454e5f434f4e54524f4c4c4552000000000000000000000000008152509015156132c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561328657808201518184015260208101905061326b565b50505050905090810190601f1680156132b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081146133105780613332565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6001819055508115156000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bef97c876040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156133c057600080fd5b505af11580156133d4573d6000803e3d6000fd5b505050506040513d60208110156133ea57600080fd5b810190808051906020019092919050505015151415156134b1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f41e60c5836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082151515158152602001915050600060405180830381600087803b15801561349857600080fd5b505af11580156134ac573d6000803e3d6000fd5b505050505b505050565b60405180807f4d494e545f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902081565b60015481565b60405180807f5245564f4b455f56455354494e47535f524f4c450000000000000000000000008152506014019050604051809103902081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601d81526020017f544d5f50524f58595f5041594d454e545f57524f4e475f53454e44455200000081525090151561365e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613623578082015181840152602081019050613608565b50505050905090810190601f1680156136505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060009050919050565b60008060405180807f5245564f4b455f56455354494e47535f524f4c45000000000000000000000000815250601401905060405180910390206136aa856151b0565b6136b53383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561375857808201518184015260208101905061373d565b50505050905090810190601f1680156137855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508585600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481106040805190810160405280600d81526020017f544d5f4e4f5f56455354494e47000000000000000000000000000000000000008152509015156138b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387b578082015181840152602081019050613860565b50505050905090810190601f1680156138a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002095508560010160189054906101000a900460ff166040805190810160405280601881526020017f544d5f56455354494e475f4e4f545f5245564f4b41424c4500000000000000008152509015156139f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139be5780820151818401526020810190506139a3565b50505050905090810190601f1680156139eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613a828660000154613a0a6151d8565b67ffffffffffffffff168860010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168960010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168a60010160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16614448565b9450600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000206000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549067ffffffffffffffff02191690556001820160186101000a81549060ff021916905550506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8930886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613c3c57600080fd5b505af1158015613c50573d6000803e3d6000fd5b505050506040513d6020811015613c6657600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f544d5f5245564f4b455f5452414e534645525f46524f4d5f5245564552544544815250901515613d55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d1a578082015181840152602081019050613cff565b50505050905090810190601f168015613d475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508773ffffffffffffffffffffffffffffffffffffffff167fafc516b1509f836efdc27d64d966d14f82ef53f456f0de74c12ac8a651a084cc8887604051808381526020018281526020019250505060405180910390a25050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001905090565b600043905090565b6060613e0e8373ffffffffffffffffffffffffffffffffffffffff16836151ef565b905092915050565b613e208282614115565b6040805190810160405280601d81526020017f544d5f41535349474e5f42414c5f494e435f4e4f545f414c4c4f574544000000815250901515613efe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ec3578082015181840152602081019050613ea8565b50505050905090810190601f168015613ef05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ff757600080fd5b505af115801561400b573d6000803e3d6000fd5b505050506040513d602081101561402157600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f544d5f41535349474e5f5452414e534645525f46524f4d5f5245564552544544815250901515614110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140d55780820151818401526020810190506140ba565b50505050905090810190601f1680156141025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050565b6000600154614223836000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156141da57600080fd5b505af11580156141ee573d6000803e3d6000fd5b505050506040513d602081101561420457600080fd5b81019080805190602001909291905050506144d190919063ffffffff16565b1115905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663827f32c083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142f157600080fd5b505af1158015614305573d6000803e3d6000fd5b505050506040513d602081101561431b57600080fd5b8101908080519060200190929190505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff168211156040805190810160405280601581526020017f55494e5436345f4e554d4245525f544f4f5f424947000000000000000000000081525090151561443f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156144045780820151818401526020810190506143e9565b50505050905090810190601f1680156144315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50819050919050565b600080828610151561445d57600091506144c7565b8386101561446d578691506144c7565b61448085846145c690919063ffffffff16565b6144a561449687896145c690919063ffffffff16565b8961526690919063ffffffff16565b8115156144ae57fe5b0490506144c481886145c690919063ffffffff16565b91505b5095945050505050565b6000808284019050838110156040805190810160405280601181526020017f4d4154485f4144445f4f564552464c4f570000000000000000000000000000008152509015156145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614580578082015181840152602081019050614565565b50505050905090810190601f1680156145ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b600080838311156040805190810160405280601281526020017f4d4154485f5355425f554e444552464c4f5700000000000000000000000000008152509015156146ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614670578082015181840152602081019050614655565b50505050905090810190601f16801561469d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390508091505092915050565b600081549050919050565b600081549050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614712576000915061471d565b823b90506000811191505b50919050565b606060016040519080825280602002602001820160405280156147555781602001602082028038833980820191505090505b5090508181600081518110151561476857fe5b9060200190602002018181525050919050565b600081549050919050565b6060600080606080614796610e6d565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614874576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561483957808201518184015260208101905061481e565b50505050905090810190601f1680156148665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600080614880612ddb565b915061488a611fa0565b90506148958a611428565b9550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601b81526020017f45564d52554e5f4558454355544f525f554e415641494c41424c4500000000008152509015156149a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561496b578082015181840152602081019050614950565b50505050905090810190601f1680156149985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508573ffffffffffffffffffffffffffffffffffffffff1663279cea3590507c0100000000000000000000000000000000000000000000000000000000029450848a8a8a60405160240180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015614a35578082015181840152602081019050614a1a565b50505050905090810190601f168015614a625780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015614a9b578082015181840152602081019050614a80565b50505050905090810190601f168015614ac85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019060200280838360005b83811015614b04578082015181840152602081019050614ae9565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505093508573ffffffffffffffffffffffffffffffffffffffff168460405180828051906020019080838360005b83811015614bb7578082015181840152602081019050614b9c565b50505050905090810190601f168015614be45780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150506040805190810160405280601981526020017f45564d52554e5f455845435554494f4e5f524556455254454400000000000000815250901515614cd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c9a578082015181840152602081019050614c7f565b50505050905090810190601f168015614cc75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614cde615378565b92508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015614d63578082015181840152602081019050614d48565b50505050905090810190601f168015614d905780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015614dc9578082015181840152602081019050614dae565b50505050905090810190601f168015614df65780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015614e2f578082015181840152602081019050614e14565b50505050905090810190601f168015614e5c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff16614e8f612ddb565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f44494649454400815250901515614f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614f49578082015181840152602081019050614f2e565b50505050905090810190601f168015614f765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508060001916614f92611fa0565b60001916146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f44494649454400815250901515615075576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561503a57808201518184015260208101905061501f565b50505050905090810190601f1680156150675780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050505050509392505050565b600061508d612010565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561516c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615131578082015181840152602081019050615116565b50505050905090810190601f16801561515e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506151ae615178613de4565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166153a890919063ffffffff16565b565b60606151d18273ffffffffffffffffffffffffffffffffffffffff16614723565b9050919050565b60006151ea6151e56153af565b614331565b905090565b606060026040519080825280602002602001820160405280156152215781602001602082028038833980820191505090505b5090508281600081518110151561523457fe5b90602001906020020181815250508181600181518110151561525257fe5b906020019060200201818152505092915050565b600080600084141561527b5760009150615371565b828402905082848281151561528c57fe5b04146040805190810160405280601181526020017f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000081525090151561536c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615331578082015181840152602081019050615316565b50505050905090810190601f16801561535e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505b5092915050565b60603d806000811461539f576040519250602082018301604052602082036020843e6153a0565b5b505080905090565b8082555050565b6000429050905600a165627a7a72305820e97fb4122fdb9ecbed280f26bda35aea949aaa601843b6712a2d1d44f4c220680029",
  "deployedBytecode": "0x6080604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303f413d1146101d25780630803fac01461022d5780630db3971b1461025c5780630f8f8b831461028757806321cb18cd146102de5780632914b9bd1461038757806332f0a3b5146104305780633e05a36d1461048757806340c10f19146105445780634a3931491461059157806372f8393c146106165780637e7db6e11461067757806380afdea8146106d2578063856222f1146107055780638b3dd7491461073857806397f2562a146107635780639d4941d8146107ba5780639dc29fac146107fd578063a1658fad1461084a578063a479e508146108f6578063a51d9a8e1461094d578063b930908f14610980578063be760488146109b3578063c0774df314610a00578063cc872b6614610aa1578063d4aae0c414610ace578063d948d46814610b25578063da682aeb14610b8e578063de4796ed14610c13578063e37ff29f14610c42578063e9a9c85014610c9b578063ecfda43214610cce578063edc168f114610cf9578063f48c305414610d2c578063fa6799f214610d7a578063fc0c546a14610dc7578063fd64eccb14610e1e575b600080fd5b3480156101de57600080fd5b50610213600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e4d565b604051808215151515815260200191505060405180910390f35b34801561023957600080fd5b50610242610e6d565b604051808215151515815260200191505060405180910390f35b34801561026857600080fd5b50610271610e98565b6040518082815260200191505060405180910390f35b34801561029357600080fd5b506102c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e9d565b6040518082815260200191505060405180910390f35b3480156102ea57600080fd5b50610371600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff169060200190929190803515159060200190929190505050610eb0565b6040518082815260200191505060405180910390f35b34801561039357600080fd5b506103ee600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611428565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043c57600080fd5b50610445611547565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561049357600080fd5b506104d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115f4565b604051808681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff168152602001821515151581526020019550505050505060405180910390f35b34801561055057600080fd5b5061058f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117eb565b005b34801561059d57600080fd5b506105fc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a0e565b604051808215151515815260200191505060405180910390f35b34801561062257600080fd5b50610661600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd5565b6040518082815260200191505060405180910390f35b34801561068357600080fd5b506106b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f46565b604051808215151515815260200191505060405180910390f35b3480156106de57600080fd5b506106e7611fa0565b60405180826000191660001916815260200191505060405180910390f35b34801561071157600080fd5b5061071a611fd7565b60405180826000191660001916815260200191505060405180910390f35b34801561074457600080fd5b5061074d612010565b6040518082815260200191505060405180910390f35b34801561076f57600080fd5b506107a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612047565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b506107fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061205f565b005b34801561080957600080fd5b50610848600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612491565b005b34801561085657600080fd5b506108dc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506126c1565b604051808215151515815260200191505060405180910390f35b34801561090257600080fd5b5061090b6128c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095957600080fd5b506109626129e3565b60405180826000191660001916815260200191505060405180910390f35b34801561098c57600080fd5b50610995612a1c565b60405180826000191660001916815260200191505060405180910390f35b3480156109bf57600080fd5b506109fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a55565b005b348015610a0c57600080fd5b50610a87600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612b8f565b604051808215151515815260200191505060405180910390f35b348015610aad57600080fd5b50610acc60048036038101908080359060200190929190505050612ca3565b005b348015610ada57600080fd5b50610ae3612ddb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3157600080fd5b50610b8c600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612e12565b005b348015610b9a57600080fd5b50610bf9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fe6565b604051808215151515815260200191505060405180910390f35b348015610c1f57600080fd5b50610c28612ff3565b604051808215151515815260200191505060405180910390f35b348015610c4e57600080fd5b50610c99600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919080359060200190929190505050613024565b005b348015610ca757600080fd5b50610cb06134b6565b60405180826000191660001916815260200191505060405180910390f35b348015610cda57600080fd5b50610ce36134ef565b6040518082815260200191505060405180910390f35b348015610d0557600080fd5b50610d0e6134f5565b60405180826000191660001916815260200191505060405180910390f35b610d60600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061352e565b604051808215151515815260200191505060405180910390f35b348015610d8657600080fd5b50610dc5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613668565b005b348015610dd357600080fd5b50610ddc613db6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e2a57600080fd5b50610e33613ddb565b604051808215151515815260200191505060405180910390f35b60046020528060005260406000206000915054906101000a900460ff1681565b600080610e78612010565b905060008114158015610e92575080610e8f613de4565b10155b91505090565b603281565b6000610ea98242611cd5565b9050919050565b60008060405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020610ef38989613dec565b610efe3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515610fdc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610fa1578082015181840152602081019050610f86565b50505050905090810190601f168015610fce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506032600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106040805190810160405280601481526020017f544d5f544f4f5f4d414e595f56455354494e47530000000000000000000000008152509015156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110c35780820151818401526020810190506110a8565b50505050905090810190601f1680156110f05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508667ffffffffffffffff168867ffffffffffffffff161115801561113757508567ffffffffffffffff168767ffffffffffffffff1611155b6040805190810160405280601381526020017f544d5f57524f4e475f434c4946465f4441544500000000000000000000000000815250901515611215576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156111da5780820151818401526020810190506111bf565b50505050905090810190601f1680156112075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055925060a0604051908101604052808a81526020018967ffffffffffffffff1681526020018867ffffffffffffffff1681526020018767ffffffffffffffff168152602001861515815250600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160186101000a81548160ff0219169083151502179055509050506113c28a8a613e16565b8973ffffffffffffffffffffffffffffffffffffffff167f627ad26dcfe82ec79b33fda0ddd062f6fab9f4914acac8345f79090dfd86fb54848b604051808381526020018281526020019250505060405180910390a28293505050509695505050505050565b60006114326128c8565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114b957808201518184015260208101905061149e565b50505050905090810190601f1680156114e65780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561150557600080fd5b505af1158015611519573d6000803e3d6000fd5b505050506040513d602081101561152f57600080fd5b81019080805190602001909291905050509050919050565b6000611551612ddb565b73ffffffffffffffffffffffffffffffffffffffff166332f0a3b56040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b505050506040513d60208110156115de57600080fd5b8101908080519060200190929190505050905090565b6000806000806000808787600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481106040805190810160405280600d81526020017f544d5f4e4f5f56455354494e470000000000000000000000000000000000000081525090151561171f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116e45780820151818401526020810190506116c9565b50505050905090810190601f1680156117115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a81526020019081526020016000209250826000015497508260010160009054906101000a900467ffffffffffffffff1696508260010160089054906101000a900467ffffffffffffffff1695508260010160109054906101000a900467ffffffffffffffff1694508260010160189054906101000a900460ff1693505050509295509295909350565b60405180807f4d494e545f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902061182b8383613dec565b6118363383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515611914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118d95780820151818401526020810190506118be565b50505050905090810190601f1680156119065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061191f8484614115565b6040805190810160405280601b81526020017f544d5f4d494e545f42414c5f494e435f4e4f545f414c4c4f57454400000000008152509015156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119c25780820151818401526020810190506119a7565b50505050905090810190601f1680156119ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611a08848461422d565b50505050565b6000806000611a1b610e6d565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515611af9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611abe578082015181840152602081019050611aa3565b50505050905090810190601f168015611aeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601881526020017f544d5f5452414e534645525f57524f4e475f53454e4445520000000000000000815250901515611c28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bed578082015181840152602081019050611bd2565b50505050905090810190601f168015611c1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480611c8e57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9150811515611cc757611ca18585614115565b9050801580611cb8575083611cb68742611cd5565b105b15611cc65760009250611ccc565b5b600192505b50509392505050565b600080600080600080600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054945060009350600092505b84831015611e3057600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000209150611e0c8260000154611d9489614331565b67ffffffffffffffff168460010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168560010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168660010160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16614448565b9050611e2181856144d190919063ffffffff16565b93508280600101935050611d29565b611f39846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050506040513d6020811015611f1a57600080fd5b81019080805190602001909291905050506145c690919063ffffffff16565b9550505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611fd27fd625496217aa6a3453eecb9c3489dc5a53e6c67b444329ea2b2cbc9ff547639b600102600019166146bb565b905090565b60405180807f49535355455f524f4c4500000000000000000000000000000000000000000000815250600a019050604051809103902081565b60006120427febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166146c6565b905090565b60036020528060005260406000206000915090505481565b60008061206b83611f46565b6040805190810160405280601281526020017f5245434f5645525f444953414c4c4f5745440000000000000000000000000000815250901515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561210e5780820151818401526020810190506120f3565b50505050905090810190601f16801561213b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612152611547565b915061215d826146d1565b6040805190810160405280601a81526020017f5245434f5645525f5641554c545f4e4f545f434f4e545241435400000000000081525090151561223b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122005780820151818401526020810190506121e5565b50505050905090810190601f16801561222d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122d4578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156122ce573d6000803e3d6000fd5b5061248c565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050506040513d602081101561239957600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561244f57600080fd5b505af1158015612463573d6000803e3d6000fd5b505050506040513d602081101561247957600080fd5b8101908080519060200190929190505050505b505050565b60405180807f4255524e5f524f4c450000000000000000000000000000000000000000000000815250600901905060405180910390206124d18383613dec565b6124dc3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c454400000000000000000000000000000000008152509015156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561257f578082015181840152602081019050612564565b50505050905090810190601f1680156125ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ce77fe85856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561267f57600080fd5b505af1158015612693573d6000803e3d6000fd5b505050506040513d60208110156126a957600080fd5b81019080805190602001909291905050505050505050565b600080606060006126d0610e6d565b15156126df57600093506128be565b6126e7612ddb565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272757600093506128be565b602085510290508491508082528273ffffffffffffffffffffffffffffffffffffffff1663fdef9106883089866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612831578082015181840152602081019050612816565b50505050905090810190601f16801561285e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561288057600080fd5b505af1158015612894573d6000803e3d6000fd5b505050506040513d60208110156128aa57600080fd5b810190808051906020019092919050505093505b5050509392505050565b6000806128d3612ddb565b73ffffffffffffffffffffffffffffffffffffffff1663be00bbd87fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb6001027fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd616001026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808360001916600019168152602001826000191660001916815260200192505050602060405180830381600087803b15801561299f57600080fd5b505af11580156129b3573d6000803e3d6000fd5b505050506040513d60208110156129c957600080fd5b810190808051906020019092919050505090508091505090565b60405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902081565b60405180807f4255524e5f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902081565b60405180807f41535349474e5f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020612a958383613dec565b612aa03383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b43578082015181840152602081019050612b28565b50505050905090810190601f168015612b705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612b898484613e16565b50505050565b6000612b99610e6d565b8015612c9b575060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612c5e57600080fd5b505af1158015612c72573d6000803e3d6000fd5b505050506040513d6020811015612c8857600080fd5b8101908080519060200190929190505050115b905092915050565b60405180807f49535355455f524f4c4500000000000000000000000000000000000000000000815250600a0190506040518091039020612ce282614723565b612ced3383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515612dcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d90578082015181840152602081019050612d75565b50505050905090810190601f168015612dbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612dd6308461422d565b505050565b6000612e0d7f4172f0f7d2289153072b0a6ca36959e0cbe2efc3afe50fc81636caa96338137b6001026000191661477b565b905090565b606080612e1f3384612b8f565b6040805190810160405280601281526020017f544d5f43414e5f4e4f545f464f52574152440000000000000000000000000000815250901515612efd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ec2578082015181840152602081019050612ea7565b50505050905090810190601f168015612eef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006040519080825280601f01601f191660200182016040528015612f325781602001602082028038833980820191505090505b5091506001604051908082528060200260200182016040528015612f655781602001602082028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181101515612f9957fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fe0838383614786565b50505050565b6000600190509392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61301e612010565b14905090565b600061302e612010565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561310d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130d25780820151818401526020810190506130b7565b50505050905090810190601f1680156130ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613116615083565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1663f77c47916040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561319157600080fd5b505af11580156131a5573d6000803e3d6000fd5b505050506040513d60208110156131bb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601381526020017f544d5f544f4b454e5f434f4e54524f4c4c4552000000000000000000000000008152509015156132c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561328657808201518184015260208101905061326b565b50505050905090810190601f1680156132b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081146133105780613332565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b6001819055508115156000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bef97c876040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156133c057600080fd5b505af11580156133d4573d6000803e3d6000fd5b505050506040513d60208110156133ea57600080fd5b810190808051906020019092919050505015151415156134b1576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f41e60c5836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082151515158152602001915050600060405180830381600087803b15801561349857600080fd5b505af11580156134ac573d6000803e3d6000fd5b505050505b505050565b60405180807f4d494e545f524f4c4500000000000000000000000000000000000000000000008152506009019050604051809103902081565b60015481565b60405180807f5245564f4b455f56455354494e47535f524f4c450000000000000000000000008152506014019050604051809103902081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601d81526020017f544d5f50524f58595f5041594d454e545f57524f4e475f53454e44455200000081525090151561365e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613623578082015181840152602081019050613608565b50505050905090810190601f1680156136505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060009050919050565b60008060405180807f5245564f4b455f56455354494e47535f524f4c45000000000000000000000000815250601401905060405180910390206136aa856151b0565b6136b53383836126c1565b6040805190810160405280600f81526020017f4150505f415554485f4641494c45440000000000000000000000000000000000815250901515613793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561375857808201518184015260208101905061373d565b50505050905090810190601f1680156137855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508585600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481106040805190810160405280600d81526020017f544d5f4e4f5f56455354494e47000000000000000000000000000000000000008152509015156138b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387b578082015181840152602081019050613860565b50505050905090810190601f1680156138a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002095508560010160189054906101000a900460ff166040805190810160405280601881526020017f544d5f56455354494e475f4e4f545f5245564f4b41424c4500000000000000008152509015156139f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139be5780820151818401526020810190506139a3565b50505050905090810190601f1680156139eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613a828660000154613a0a6151d8565b67ffffffffffffffff168860010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff168960010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff168a60010160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16614448565b9450600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008881526020019081526020016000206000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549067ffffffffffffffff02191690556001820160186101000a81549060ff021916905550506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8930886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613c3c57600080fd5b505af1158015613c50573d6000803e3d6000fd5b505050506040513d6020811015613c6657600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f544d5f5245564f4b455f5452414e534645525f46524f4d5f5245564552544544815250901515613d55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d1a578082015181840152602081019050613cff565b50505050905090810190601f168015613d475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508773ffffffffffffffffffffffffffffffffffffffff167fafc516b1509f836efdc27d64d966d14f82ef53f456f0de74c12ac8a651a084cc8887604051808381526020018281526020019250505060405180910390a25050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001905090565b600043905090565b6060613e0e8373ffffffffffffffffffffffffffffffffffffffff16836151ef565b905092915050565b613e208282614115565b6040805190810160405280601d81526020017f544d5f41535349474e5f42414c5f494e435f4e4f545f414c4c4f574544000000815250901515613efe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ec3578082015181840152602081019050613ea8565b50505050905090810190601f168015613ef05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613ff757600080fd5b505af115801561400b573d6000803e3d6000fd5b505050506040513d602081101561402157600080fd5b81019080805190602001909291905050506040805190810160405280602081526020017f544d5f41535349474e5f5452414e534645525f46524f4d5f5245564552544544815250901515614110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140d55780820151818401526020810190506140ba565b50505050905090810190601f1680156141025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050565b6000600154614223836000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156141da57600080fd5b505af11580156141ee573d6000803e3d6000fd5b505050506040513d602081101561420457600080fd5b81019080805190602001909291905050506144d190919063ffffffff16565b1115905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663827f32c083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156142f157600080fd5b505af1158015614305573d6000803e3d6000fd5b505050506040513d602081101561431b57600080fd5b8101908080519060200190929190505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff168211156040805190810160405280601581526020017f55494e5436345f4e554d4245525f544f4f5f424947000000000000000000000081525090151561443f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156144045780820151818401526020810190506143e9565b50505050905090810190601f1680156144315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50819050919050565b600080828610151561445d57600091506144c7565b8386101561446d578691506144c7565b61448085846145c690919063ffffffff16565b6144a561449687896145c690919063ffffffff16565b8961526690919063ffffffff16565b8115156144ae57fe5b0490506144c481886145c690919063ffffffff16565b91505b5095945050505050565b6000808284019050838110156040805190810160405280601181526020017f4d4154485f4144445f4f564552464c4f570000000000000000000000000000008152509015156145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614580578082015181840152602081019050614565565b50505050905090810190601f1680156145ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505092915050565b600080838311156040805190810160405280601281526020017f4d4154485f5355425f554e444552464c4f5700000000000000000000000000008152509015156146ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614670578082015181840152602081019050614655565b50505050905090810190601f16801561469d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390508091505092915050565b600081549050919050565b600081549050919050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614712576000915061471d565b823b90506000811191505b50919050565b606060016040519080825280602002602001820160405280156147555781602001602082028038833980820191505090505b5090508181600081518110151561476857fe5b9060200190602002018181525050919050565b600081549050919050565b6060600080606080614796610e6d565b6040805190810160405280601481526020017f494e49545f4e4f545f494e495449414c495a4544000000000000000000000000815250901515614874576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561483957808201518184015260208101905061481e565b50505050905090810190601f1680156148665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600080614880612ddb565b915061488a611fa0565b90506148958a611428565b9550600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040805190810160405280601b81526020017f45564d52554e5f4558454355544f525f554e415641494c41424c4500000000008152509015156149a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561496b578082015181840152602081019050614950565b50505050905090810190601f1680156149985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508573ffffffffffffffffffffffffffffffffffffffff1663279cea3590507c0100000000000000000000000000000000000000000000000000000000029450848a8a8a60405160240180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015614a35578082015181840152602081019050614a1a565b50505050905090810190601f168015614a625780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015614a9b578082015181840152602081019050614a80565b50505050905090810190601f168015614ac85780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019060200280838360005b83811015614b04578082015181840152602081019050614ae9565b505050509050019650505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505093508573ffffffffffffffffffffffffffffffffffffffff168460405180828051906020019080838360005b83811015614bb7578082015181840152602081019050614b9c565b50505050905090810190601f168015614be45780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150506040805190810160405280601981526020017f45564d52554e5f455845435554494f4e5f524556455254454400000000000000815250901515614cd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c9a578082015181840152602081019050614c7f565b50505050905090810190601f168015614cc75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614cde615378565b92508573ffffffffffffffffffffffffffffffffffffffff167f5229a5dba83a54ae8cb5b51bdd6de9474cacbe9dd332f5185f3a4f4f2e3f4ad98b8b8660405180806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015614d63578082015181840152602081019050614d48565b50505050905090810190601f168015614d905780820380516001836020036101000a031916815260200191505b50848103835286818151815260200191508051906020019080838360005b83811015614dc9578082015181840152602081019050614dae565b50505050905090810190601f168015614df65780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015614e2f578082015181840152602081019050614e14565b50505050905090810190601f168015614e5c5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28296508173ffffffffffffffffffffffffffffffffffffffff16614e8f612ddb565b73ffffffffffffffffffffffffffffffffffffffff16146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f44494649454400815250901515614f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614f49578082015181840152602081019050614f2e565b50505050905090810190601f168015614f765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508060001916614f92611fa0565b60001916146040805190810160405280601f81526020017f45564d52554e5f50524f5445435445445f53544154455f4d4f44494649454400815250901515615075576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561503a57808201518184015260208101905061501f565b50505050905090810190601f1680156150675780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050505050509392505050565b600061508d612010565b146040805190810160405280601881526020017f494e49545f414c52454144595f494e495449414c495a4544000000000000000081525090151561516c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615131578082015181840152602081019050615116565b50505050905090810190601f16801561515e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506151ae615178613de4565b7febb05b386a8d34882b8711d156f463690983dc47815980fb82aeeff1aa43579e600102600019166153a890919063ffffffff16565b565b60606151d18273ffffffffffffffffffffffffffffffffffffffff16614723565b9050919050565b60006151ea6151e56153af565b614331565b905090565b606060026040519080825280602002602001820160405280156152215781602001602082028038833980820191505090505b5090508281600081518110151561523457fe5b90602001906020020181815250508181600181518110151561525257fe5b906020019060200201818152505092915050565b600080600084141561527b5760009150615371565b828402905082848281151561528c57fe5b04146040805190810160405280601181526020017f4d4154485f4d554c5f4f564552464c4f5700000000000000000000000000000081525090151561536c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615331578082015181840152602081019050615316565b50505050905090810190601f16801561535e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508091505b5092915050565b60603d806000811461539f576040519250602082018301604052602082036020843e6153a0565b5b505080905090565b8082555050565b6000429050905600a165627a7a72305820e97fb4122fdb9ecbed280f26bda35aea949aaa601843b6712a2d1d44f4c220680029",
  "sourceMap": "518:15074:6:-;;;344:9:19;:7;;;:9;;;:::i;:::-;518:15074:6;;590:84:28;651:1:26;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;637:30:28;277:2;637:13;;;:30;;;:::i;:::-;590:84::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;;;;;:49;;;:::i;:::-;963:56;;889:137;:::o;1759:141::-;651:1;623:24;:22;;;:24;;;:::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1832:61;1880:12;353:66;1832:29;;:47;;;;;;;;;:61;;;;;:::i;:::-;1759:141;:::o;519:134:31:-;587:12;636:8;630:15;622:23;;620:27;;;:::o;1028:119::-;1134:4;1124:8;1117:22;1115:26;;:::o;518:15074:6:-;;;;;;;",
  "deployedSourceMap": "518:15074:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2584:41:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:208:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1136:208:26;;;;;;;;;;;;;;;;;;;;;;;;;;;1009:53:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1009:53:6;;;;;;;;;;;;;;;;;;;;;;;12090:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12090:132:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6605:811;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6605:811:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;733:179:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:179:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2466:229:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2466:229:18;;;;;;;;;;;;;;;;;;;;;;;;;;;9512:602:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9512:602:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4463:248:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10510:534;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10510:534:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12228:681;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12228:681:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13064:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13064:120:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796:106:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;796:106:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;724:60:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;724:60:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;889:137:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;889:137:26;;;;;;;;;;;;;;;;;;;;;;;2527:51:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2527:51:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;687:446:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;687:446:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;5623:230:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5623:230:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:826:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1524:826:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;918:231:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;918:231:34;;;;;;;;;;;;;;;;;;;;;;;;;;;790:62:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;790:62:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;944:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;944:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5256:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5256:149:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9363:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9363:143:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4879:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4879:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;674:116:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;674:116:17;;;;;;;;;;;;;;;;;;;;;;;;;;;8767:506:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8767:506:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11811:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11811:93:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:117:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:117:28;;;;;;;;;;;;;;;;;;;;;;;;;;;3752:493:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3752:493:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:58;;8:9:-1;5:2;;;30:1;27;20:12;5:2;660:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2298:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2298:31:6;;;;;;;;;;;;;;;;;;;;;;;858:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;858:80:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11201:422;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7646:920;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7646:920:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2268:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;9279:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9279:78:6;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:41;;;;;;;;;;;;;;;;;;;;;;:::o;1136:208:26:-;1183:4;1199:27;1229:24;:22;:24::i;:::-;1199:54;;1293:1;1270:19;:24;;:67;;;;;1318:19;1298:16;:14;:16::i;:::-;:39;;1270:67;1263:74;;1136:208;;:::o;1009:53:6:-;1060:2;1009:53;:::o;12090:132::-;12156:7;12182:33;12202:7;12211:3;12182:19;:33::i;:::-;12175:40;;12090:132;;;:::o;6605:811::-;6866:7;7068:17;828:24;;;;;;;;;;;;;;;;;;;6824:23;6828:9;6839:7;6824:3;:23::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1060:2:6;6897:15;:26;6913:9;6897:26;;;;;;;;;;;;;;;;:53;6952:23;;;;;;;;;;;;;;;;;;6889:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6889:87:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7005:6;6995:16;;:6;:16;;;;:37;;;;;7025:7;7015:17;;:6;:17;;;;6995:37;7034:22;;;;;;;;;;;;;;;;;;6987:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6987:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:15;:26;7104:9;7088:26;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;7068:48;;7159:128;;;;;;;;;7185:7;7159:128;;;;7206:6;7159:128;;;;;;7226:6;7159:128;;;;;;7246:7;7159:128;;;;;;7267:10;7159:128;;;;;7126:8;:19;7135:9;7126:19;;;;;;;;;;;;;;;:30;7146:9;7126:30;;;;;;;;;;;:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7298:27;7306:9;7317:7;7298;:27::i;:::-;7352:9;7341:41;;;7363:9;7374:7;7341:41;;;;;;;;;;;;;;;;;;;;;;;;7400:9;7393:16;;6605:811;;;;;;;;;;;:::o;733:179:34:-;799:18;855:22;:20;:22::i;:::-;:40;;;896:7;855:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:49:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;855:49:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;855:49:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;855:49:34;;;;;;;;;;;;;;;;829:76;;733:179;;;:::o;2466:229:18:-;2515:7;2621:8;:6;:8::i;:::-;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2621:27:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2621:27:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2621:27:18;;;;;;;;;;;;;;;;2614:34;;2466:229;:::o;9512:602:6:-;9698:14;9726:12;9752;9778:14;9806;9845:33;9644:10;9656;3108:15;:24;3124:7;3108:24;;;;;;;;;;;;;;;;3095:10;:37;3134:16;;;;;;;;;;;;;;;;;;3087:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3087:64:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9881:8;:20;9890:10;9881:20;;;;;;;;;;;;;;;:32;9902:10;9881:32;;;;;;;;;;;9845:68;;9932:12;:19;;;9923:28;;9969:12;:18;;;;;;;;;;;;9961:26;;10005:12;:18;;;;;;;;;;;;9997:26;;10043:12;:20;;;;;;;;;;;;10033:30;;10085:12;:22;;;;;;;;;;;;10073:34;;9512:602;;;;;;;;;;;:::o;4463:248::-;696:22;;;;;;;;;;;;;;;;;;;4539:23;4543:9;4554:7;4539:3;:23::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4582:45:6;4608:9;4619:7;4582:25;:45::i;:::-;4629:39;;;;;;;;;;;;;;;;;;4574:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4574:95:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4679:25;4685:9;4696:7;4679:5;:25::i;:::-;4463:248;;;;:::o;10510:534::-;10602:4;10698:25;10824:17;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10648:5:6;;;;;;;;;;;10626:28;;:10;:28;;;10656:30;;;;;;;;;;;;;;;;;;10618:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10618:69:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10743:4;10726:22;;:5;:22;;;:46;;;;10767:4;10752:20;;:3;:20;;;10726:46;10698:74;;10788:20;10787:21;10783:233;;;10844:39;10870:3;10875:7;10844:25;:39::i;:::-;10824:59;;10902:12;10901:13;:58;;;;10952:7;10918:31;10938:5;10945:3;10918:19;:31::i;:::-;:41;10901:58;10897:109;;;10986:5;10979:12;;;;10897:109;10783:233;11033:4;11026:11;;795:1:26;10510:534:6;;;;;;;:::o;12228:681::-;12310:7;12329:21;12387:28;12435:9;12488:22;12547:20;12353:15;:24;12369:7;12353:24;;;;;;;;;;;;;;;;12329:48;;12418:1;12387:32;;12447:1;12435:13;;12430:405;12454:13;12450:1;:17;12430:405;;;12513:8;:17;12522:7;12513:17;;;;;;;;;;;;;;;:20;12531:1;12513:20;;;;;;;;;;;12488:45;;12570:176;12613:1;:8;;;12639:16;:5;:14;:16::i;:::-;12570:176;;12673:1;:7;;;;;;;;;;;;12570:176;;12698:1;:7;;;;;;;;;;;;12570:176;;12723:1;:9;;;;;;;;;;;;12570:176;;:25;:176::i;:::-;12547:199;;12783:41;12808:15;12783:20;:24;;:41;;;;:::i;:::-;12760:64;;12469:3;;;;;;;12430:405;;;12852:50;12881:20;12852:5;;;;;;;;;;;:15;;;12868:7;12852:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12852:24:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12852:24:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12852:24:6;;;;;;;;;;;;;;;;:28;;:50;;;;:::i;:::-;12845:57;;12228:681;;;;;;;;;:::o;13064:120::-;13130:4;13171:5;;;;;;;;;;;13153:24;;:6;:24;;;;13146:31;;13064:120;;;:::o;796:106:17:-;834:7;860:35;601:66;860:15;;:33;;;;:35::i;:::-;853:42;;796:106;:::o;724:60:6:-;761:23;;;;;;;;;;;;;;;;;;;724:60;:::o;889:137:26:-;944:7;970:49;353:66;970:29;;:47;;;;:49::i;:::-;963:56;;889:137;:::o;2527:51:6:-;;;;;;;;;;;;;;;;;:::o;687:446:32:-;811:13;1019:14;755:27;775:6;755:19;:27::i;:::-;784:16;;;;;;;;;;;;;;;;;;747:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;747:54:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;827:18;:16;:18::i;:::-;811:34;;863:17;874:5;863:10;:17::i;:::-;882:24;;;;;;;;;;;;;;;;;;855:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;855:52:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:1:23;922:13:32;;:6;:13;;;918:209;;;951:5;:14;;:37;974:4;966:21;;;951:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;951:37:32;918:209;;;1042:6;1036:23;;;1060:4;1036:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:29:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1036:29:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1036:29:32;;;;;;;;;;;;;;;;1019:46;;1085:6;1079:22;;;1102:5;1109:6;1079:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:37:32;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1079:37:32;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1079:37:32;;;;;;;;;;;;;;;;;918:209;687:446;;;:::o;5623:230:6:-;980:22;;;;;;;;;;;;;;;;;;;5697:21;5701:7;5710;5697:3;:21::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5809:5:6;;;;;;;;;;;:19;;;5829:7;5838;5809:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5809:37:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5809:37:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5809:37:6;;;;;;;;;;;;;;;;;5623:230;;;;:::o;1524:826:18:-;1616:4;1702:20;2106:16;2132:18;1637:16;:14;:16::i;:::-;1636:17;1632:60;;;1676:5;1669:12;;;;1632:60;1725:8;:6;:8::i;:::-;1702:31;;1780:1;1747:35;;1755:12;1747:35;;;1743:78;;;1805:5;1798:12;;;;1743:78;2170:2;2153:7;:14;:19;2132:40;;2212:7;2205:14;;2244:10;2239:3;2232:23;2281:12;:26;;;2308:7;2325:4;2332:5;2339:3;2281:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2281:62:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2281:62:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2281:62:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2281:62:18;;;;;;;;;;;;;;;;2274:69;;1524:826;;;;;;;;;:::o;918:231:34:-;971:18;1001:20;1024:8;:6;:8::i;:::-;:15;;;1368:66:45;1040:25:34;;330:66:36;1067:25:34;;1024:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1024:69:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1024:69:34;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1024:69:34;;;;;;;;;;;;;;;;1001:92;;1129:12;1103:39;;918:231;;:::o;790:62:6:-;828:24;;;;;;;;;;;;;;;;;;;790:62;:::o;944:58::-;980:22;;;;;;;;;;;;;;;;;;;944:58;:::o;5256:149::-;828:24;;;;;;;;;;;;;;;;;;;5336:23;5340:9;5351:7;5336:3;:23::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5371:27:6;5379:9;5390:7;5371;:27::i;:::-;5256:149;;;;:::o;9363:143::-;9428:4;9451:16;:14;:16::i;:::-;:48;;;;;9498:1;9471:5;;;;;;;;;;;:15;;;9487:7;9471:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9471:24:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9471:24:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9471:24:6;;;;;;;;;;;;;;;;:28;9451:48;9444:55;;9363:143;;;;:::o;4879:119::-;761:23;;;;;;;;;;;;;;;;;;;4938:12;4942:7;4938:3;:12::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4962:29:6;4976:4;4983:7;4962:5;:29::i;:::-;4879:119;;;:::o;674:116:17:-;713:7;747:35;485:66;747:15;;:33;;;;:35::i;:::-;732:51;;674:116;:::o;8767:506:6:-;8895:18;9132:26;8827:34;8838:10;8850;8827;:34::i;:::-;8863:21;;;;;;;;;;;;;;;;;;8819:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8819:66:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8926:1;8916:12;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8916:12:6;;;;8895:33;;9175:1;9161:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9161:16:6;;;;9132:45;;9210:5;;;;;;;;;;;9187:9;9197:1;9187:12;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;9227:39;9237:10;9249:5;9256:9;9227;:39::i;:::-;;8767:506;;;:::o;11811:93::-;11870:4;11893;11886:11;;11811:93;;;;;:::o;287:117:28:-;331:4;277:2;354:24;:22;:24::i;:::-;:43;347:50;;287:117;:::o;3752:493:6:-;651:1:26;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3917:13:6;:11;:13::i;:::-;3980:4;3949:36;;:6;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3949:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3949:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3949:19:6;;;;;;;;;;;;;;;;:36;;;3987:22;;;;;;;;;;;;;;;;;;3941:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3941:69:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4029:6;4021:5;;:14;;;;;;;;;;;;;;;;;;4085:1;4064:17;:22;:56;;4103:17;4064:56;;;4097:2;4064:56;4045:16;:75;;;;4163:13;4135:41;;:5;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4135:24:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4135:24:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4135:24:6;;;;;;;;;;;;;;;;:41;;;;4131:108;;;4192:5;;;;;;;;;;;:21;;;4214:13;4192:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4192:36:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4192:36:6;;;;4131:108;3752:493;;;:::o;660:58::-;696:22;;;;;;;;;;;;;;;;;;;660:58;:::o;2298:31::-;;;;:::o;858:80::-;905:33;;;;;;;;;;;;;;;;;;;858:80;:::o;11201:422::-;11256:4;11553:5;;;;;;;;;;;11531:28;;:10;:28;;;11561:32;;;;;;;;;;;;;;;;;;11523:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11523:71:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11611:5;11604:12;;11201:422;;;:::o;7646:920::-;7830:22;7954:17;905:33;;;;;;;;;;;;;;;;;;;7759:12;7763:7;7759:3;:12::i;:::-;1031:38:18;1042:10;1054:5;1061:7;1031:10;:38::i;:::-;1071:17;;;;;;;;;;;;;;;;;;1023:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1023:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7795:7:6;7804:10;3108:15;:24;3124:7;3108:24;;;;;;;;;;;;;;;;3095:10;:37;3134:16;;;;;;;;;;;;;;;;;;3087:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3087:64:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7855:8;:17;7864:7;7855:17;;;;;;;;;;;;;;;:29;7873:10;7855:29;;;;;;;;;;;7830:54;;7902:1;:11;;;;;;;;;;;;7915:27;;;;;;;;;;;;;;;;;;7894:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7894:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7974:152;8013:1;:8;;;8035:16;:14;:16::i;:::-;7974:152;;8065:1;:7;;;;;;;;;;;;7974:152;;8086:1;:7;;;;;;;;;;;;7974:152;;8107:1;:9;;;;;;;;;;;;7974:152;;:25;:152::i;:::-;7954:172;;8232:8;:17;8241:7;8232:17;;;;;;;;;;;;;;;:29;8250:10;8232:29;;;;;;;;;;;;8225:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8407:5;;;;;;;;;;;:18;;;8426:7;8443:4;8450:9;8407:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8407:53:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8407:53:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8407:53:6;;;;;;;;;;;;;;;;8462:35;;;;;;;;;;;;;;;;;;8399:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8399:99:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8528:7;8514:45;;;8537:10;8549:9;8514:45;;;;;;;;;;;;;;;;;;;;;;;;1099:1:18;;7646:920:6;;;;;;:::o;2268:24::-;;;;;;;;;;;;;:::o;9279:78::-;9323:4;9346;9339:11;;9279:78;:::o;347:94:29:-;396:7;422:12;415:19;;347:94;:::o;930:126:10:-;990:11;1020:29;1032:2;1024:11;;1045:2;1020:3;:29::i;:::-;1013:36;;930:126;;;;:::o;15047:373:6:-;15127:45;15153:9;15164:7;15127:25;:45::i;:::-;15174:41;;;;;;;;;;;;;;;;;;15119:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15119:97:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15331:5;;;;;;;;;;;:18;;;15350:4;15356:9;15367:7;15331:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15331:44:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15331:44:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15331:44:6;;;;;;;;;;;;;;;;15377:35;;;;;;;;;;;;;;;;;;15323:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15323:90:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15047:373;;:::o;11910:174::-;11998:4;12061:16;;12021:36;12052:4;12021:5;;;;;;;;;;;:15;;;12037:9;12021:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12021:26:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12021:26:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12021:26:6;;;;;;;;;;;;;;;;:30;;:36;;;;:::i;:::-;:56;;12014:63;;11910:174;;;;:::o;15426:164::-;15496:5;;;;;;;;;;;:20;;;15517:9;15528:7;15496:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15496:40:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15496:40:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15496:40:6;;;;;;;;;;;;;;;;;15426:164;;:::o;188:149:30:-;240:6;101:2;271:10;;266:1;:15;;283:20;;;;;;;;;;;;;;;;;;258:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;258:46:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;328:1;314:16;;188:149;;;:::o;14052:989:6:-;14255:7;14889:20;14352:6;14344:4;:14;;14340:53;;;14381:1;14374:8;;;;14340:53;14413:5;14406:4;:12;14402:56;;;14441:6;14434:13;;;;14402:56;14942:17;14953:5;14942:6;:10;;:17;;;;:::i;:::-;14912:27;14923:15;14932:5;14923:4;:8;;:15;;;;:::i;:::-;14912:6;:10;;:27;;;;:::i;:::-;:47;;;;;;;;14889:70;;15010:24;15021:12;15010:6;:10;;:24;;;;:::i;:::-;15003:31;;14052:989;;;;;;;;;:::o;1928:170:51:-;1988:7;2007:9;2024:2;2019;:7;2007:19;;2049:2;2044:1;:7;;2053:18;;;;;;;;;;;;;;;;;;2036:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2036:36:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2090:1;2083:8;;1928:170;;;;;:::o;1685:172::-;1745:7;1812:9;1778:2;1772;:8;;1782:19;;;;;;;;;;;;;;;;;;1764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1764:38:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:2;1824;:7;1812:19;;1849:1;1842:8;;1685:172;;;;;:::o;379:134:31:-;447:12;496:8;490:15;482:23;;480:27;;;:::o;519:134::-;587:12;636:8;630:15;622:23;;620:27;;;:::o;426:244:27:-;486:4;576:12;525:1;506:21;;:7;:21;;;502:64;;;550:5;543:12;;;;502:64;629:7;617:20;609:28;;662:1;655:4;:8;648:15;;426:244;;;;;:::o;1556:117:10:-;1604:11;1645:1;1631:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1631:16:10;;;;1627:20;;1664:2;1657:1;1659;1657:4;;;;;;;;;;;;;;;;;:9;;;;;1556:117;;;:::o;239:134:31:-;307:12;356:8;350:15;342:23;;340:27;;;:::o;1155:768:34:-;1302:5;1410:27;1558:10;1609:17;1777:19;745:16:26;:14;:16::i;:::-;763:21;;;;;;;;;;;;;;;;;;737:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;737:48:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2508:17:34;2555:16;2536:8;:6;:8::i;:::-;2508:37;;2574:7;:5;:7::i;:::-;2555:26;;1440:29;1461:7;1440:20;:29::i;:::-;1410:59;;1516:1;1487:31;;1495:8;1487:31;;;;1520:26;;;;;;;;;;;;;;;;;;1479:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1479:68:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1571:8;:19;;;:28;;;;1558:41;;1652:3;1657:7;1666:6;1674:10;1629:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1629:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1629:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1629:56:34;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1629:56:34;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;1629:56:34;1609:76;;1711:8;1703:30;;1734:4;1703:36;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1703:36:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1741:24;;;;;;;;;;;;;;;;;;1695:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1695:71:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1799:21;:19;:21::i;:::-;1777:43;;1857:8;1836:56;;;1868:7;1877:6;1885;1836:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1836:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1836:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1836:56:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1910:6;1903:13;;2639:9;2618:30;;2626:8;:6;:8::i;:::-;2618:30;;;2650;;;;;;;;;;;;;;;;;;2610:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2610:71:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2710:8;2699:19;;;:7;:5;:7::i;:::-;:19;;;;2720:30;;;;;;;;;;;;;;;;;;2691:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2691:60:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:1:26;;1155:768:34;;;;;;;;;:::o;1455:123:26:-;651:1;623:24;:22;:24::i;:::-;:29;654:25;;;;;;;;;;;;;;;;;;615:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;615:65:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1506;1554:16;:14;:16::i;:::-;353:66;1506:29;;:47;;;;;:65;;;;:::i;:::-;1455:123::o;397:101:10:-;445:11;475:16;487:2;479:11;;475:3;:16::i;:::-;468:23;;397:101;;;:::o;1261:106:29:-;1310:6;1335:25;:14;:12;:14::i;:::-;:23;:25::i;:::-;1328:32;;1261:106;:::o;1679:148:10:-;1739:11;1780:1;1766:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;1766:16:10;;;;1762:20;;1799:2;1792:1;1794;1792:4;;;;;;;;;;;;;;;;;:9;;;;;1818:2;1811:1;1813;1811:4;;;;;;;;;;;;;;;;;:9;;;;;1679:148;;;;:::o;685:448:51:-;745:7;1037:9;991:1;985:2;:7;981:46;;;1015:1;1008:8;;;;981:46;1054:2;1049;:7;1037:19;;1084:2;1078;1074:1;:6;;;;;;;;:12;1088:18;;;;;;;;;;;;;;;;;;1066:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1066:41:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1125:1;1118:8;;685:448;;;;;;:::o;2018:452:34:-;2072:9;2128:14;2162:4;2184:1;2179:9;;;;2240:4;2234:11;2227:18;;2314:4;2308;2304:15;2299:3;2295:25;2289:4;2282:39;2394:4;2388;2384:15;2378:4;2373:3;2358:42;2155:279;;2179:9;2155:279;;2102:342;2460:3;2453:10;;2018:452;:::o;1028:119:31:-;1134:4;1124:8;1117:22;1115:26;;:::o;926:144:29:-;973:7;999:15;992:22;;926:144;:::o",
  "source": "/*\n * SPDX-License-Identitifer:    GPL-3.0-or-later\n */\n\n/* solium-disable function-order */\n\npragma solidity 0.4.24;\n\nimport \"@aragon/os/contracts/apps/AragonApp.sol\";\nimport \"@aragon/os/contracts/common/IForwarder.sol\";\nimport \"@aragon/os/contracts/common/Uint256Helpers.sol\";\n\nimport \"@aragon/os/contracts/lib/token/ERC20.sol\";\nimport \"@aragon/os/contracts/lib/math/SafeMath.sol\";\n\nimport \"@aragon/apps-shared-minime/contracts/ITokenController.sol\";\nimport \"@aragon/apps-shared-minime/contracts/MiniMeToken.sol\";\n\n\ncontract TokenManager is ITokenController, IForwarder, AragonApp {\n    using SafeMath for uint256;\n    using Uint256Helpers for uint256;\n\n    bytes32 public constant MINT_ROLE = keccak256(\"MINT_ROLE\");\n    bytes32 public constant ISSUE_ROLE = keccak256(\"ISSUE_ROLE\");\n    bytes32 public constant ASSIGN_ROLE = keccak256(\"ASSIGN_ROLE\");\n    bytes32 public constant REVOKE_VESTINGS_ROLE = keccak256(\"REVOKE_VESTINGS_ROLE\");\n    bytes32 public constant BURN_ROLE = keccak256(\"BURN_ROLE\");\n\n    uint256 public constant MAX_VESTINGS_PER_ADDRESS = 50;\n\n    string private constant ERROR_NO_VESTING = \"TM_NO_VESTING\";\n    string private constant ERROR_TOKEN_CONTROLLER = \"TM_TOKEN_CONTROLLER\";\n    string private constant ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED = \"TM_MINT_BAL_INC_NOT_ALLOWED\";\n    string private constant ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED = \"TM_ASSIGN_BAL_INC_NOT_ALLOWED\";\n    string private constant ERROR_TOO_MANY_VESTINGS = \"TM_TOO_MANY_VESTINGS\";\n    string private constant ERROR_WRONG_CLIFF_DATE = \"TM_WRONG_CLIFF_DATE\";\n    string private constant ERROR_VESTING_NOT_REVOKABLE = \"TM_VESTING_NOT_REVOKABLE\";\n    string private constant ERROR_REVOKE_TRANSFER_FROM_REVERTED = \"TM_REVOKE_TRANSFER_FROM_REVERTED\";\n    string private constant ERROR_ASSIGN_TRANSFER_FROM_REVERTED = \"TM_ASSIGN_TRANSFER_FROM_REVERTED\";\n    string private constant ERROR_CAN_NOT_FORWARD = \"TM_CAN_NOT_FORWARD\";\n    string private constant ERROR_ON_TRANSFER_WRONG_SENDER = \"TM_TRANSFER_WRONG_SENDER\";\n    string private constant ERROR_PROXY_PAYMENT_WRONG_SENDER = \"TM_PROXY_PAYMENT_WRONG_SENDER\";\n\n    struct TokenVesting {\n        uint256 amount;\n        uint64 start;\n        uint64 cliff;\n        uint64 vesting;\n        bool revokable;\n    }\n\n    MiniMeToken public token;\n    uint256 public maxAccountTokens;\n\n    // We are mimicing an array in the inner mapping, we use a mapping instead to make app upgrade more graceful\n    mapping (address => mapping (uint256 => TokenVesting)) internal vestings;\n    mapping (address => uint256) public vestingsLengths;\n    mapping (address => bool) public everHeld;\n\n    // Other token specific events can be watched on the token address directly (avoids duplication)\n    event NewVesting(address indexed receiver, uint256 vestingId, uint256 amount);\n    event RevokeVesting(address indexed receiver, uint256 vestingId, uint256 nonVestedAmount);\n\n    modifier vestingExists(address _holder, uint256 _vestingId) {\n        // TODO: it's not checking for gaps that may appear because of deletes in revokeVesting function\n        require(_vestingId < vestingsLengths[_holder], ERROR_NO_VESTING);\n        _;\n    }\n\n    /**\n    * @notice Initialize Token Manager for `_token.symbol(): string`, whose tokens are `transferable ? 'not' : ''` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''`\n    * @param _token MiniMeToken address for the managed token (Token Manager instance must be already set as the token controller)\n    * @param _transferable whether the token can be transferred by holders\n    * @param _maxAccountTokens Maximum amount of tokens an account can have (0 for infinite tokens)\n    */\n    function initialize(\n        MiniMeToken _token,\n        bool _transferable,\n        uint256 _maxAccountTokens\n    )\n        external\n        onlyInit\n    {\n        initialized();\n\n        require(_token.controller() == address(this), ERROR_TOKEN_CONTROLLER);\n\n        token = _token;\n        maxAccountTokens = _maxAccountTokens == 0 ? uint256(-1) : _maxAccountTokens;\n\n        if (token.transfersEnabled() != _transferable) {\n            token.enableTransfers(_transferable);\n        }\n    }\n\n    /**\n    * @notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for `_receiver`\n    * @param _receiver The address receiving the tokens\n    * @param _amount Number of tokens minted\n    */\n    function mint(address _receiver, uint256 _amount) external authP(MINT_ROLE, arr(_receiver, _amount)) {\n        require(_isBalanceIncreaseAllowed(_receiver, _amount), ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED);\n        _mint(_receiver, _amount);\n    }\n\n    /**\n    * @notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for the Token Manager\n    * @param _amount Number of tokens minted\n    */\n    function issue(uint256 _amount) external authP(ISSUE_ROLE, arr(_amount)) {\n        _mint(address(this), _amount);\n    }\n\n    /**\n    * @notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings\n    * @param _receiver The address receiving the tokens\n    * @param _amount Number of tokens transferred\n    */\n    function assign(address _receiver, uint256 _amount) external authP(ASSIGN_ROLE, arr(_receiver, _amount)) {\n        _assign(_receiver, _amount);\n    }\n\n    /**\n    * @notice Burn `@tokenAmount(self.token(): address, _amount, false)` tokens from `_holder`\n    * @param _holder Holder of tokens being burned\n    * @param _amount Number of tokens being burned\n    */\n    function burn(address _holder, uint256 _amount) external authP(BURN_ROLE, arr(_holder, _amount)) {\n        // minime.destroyTokens() never returns false, only reverts on failure\n        token.destroyTokens(_holder, _amount);\n    }\n\n    /**\n    * @notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings with a `_revokable : 'revokable' : ''` vesting starting at `@formatDate(_start)`, cliff at `@formatDate(_cliff)` (first portion of tokens transferable), and completed vesting at `@formatDate(_vested)` (all tokens transferable)\n    * @param _receiver The address receiving the tokens\n    * @param _amount Number of tokens vested\n    * @param _start Date the vesting calculations start\n    * @param _cliff Date when the initial portion of tokens are transferable\n    * @param _vested Date when all tokens are transferable\n    * @param _revokable Whether the vesting can be revoked by the Token Manager\n    */\n    function assignVested(\n        address _receiver,\n        uint256 _amount,\n        uint64 _start,\n        uint64 _cliff,\n        uint64 _vested,\n        bool _revokable\n    )\n        external\n        authP(ASSIGN_ROLE, arr(_receiver, _amount))\n        returns (uint256)\n    {\n        require(vestingsLengths[_receiver] < MAX_VESTINGS_PER_ADDRESS, ERROR_TOO_MANY_VESTINGS);\n\n        require(_start <= _cliff && _cliff <= _vested, ERROR_WRONG_CLIFF_DATE);\n\n        uint256 vestingId = vestingsLengths[_receiver]++;\n        vestings[_receiver][vestingId] = TokenVesting(\n            _amount,\n            _start,\n            _cliff,\n            _vested,\n            _revokable\n        );\n\n        _assign(_receiver, _amount);\n\n        emit NewVesting(_receiver, vestingId, _amount);\n\n        return vestingId;\n    }\n\n    /**\n    * @notice Revoke vesting #`_vestingId` from `_holder`, returning unvested tokens to the Token Manager\n    * @param _holder Address whose vesting to revoke\n    * @param _vestingId Numeric id of the vesting\n    */\n    function revokeVesting(address _holder, uint256 _vestingId)\n        external\n        authP(REVOKE_VESTINGS_ROLE, arr(_holder))\n        vestingExists(_holder, _vestingId)\n    {\n        TokenVesting storage v = vestings[_holder][_vestingId];\n        require(v.revokable, ERROR_VESTING_NOT_REVOKABLE);\n\n        uint256 nonVested = _calculateNonVestedTokens(\n            v.amount,\n            getTimestamp64(),\n            v.start,\n            v.cliff,\n            v.vesting\n        );\n\n        // To make vestingIds immutable over time, we just zero out the revoked vesting\n        delete vestings[_holder][_vestingId];\n\n        // transferFrom always works as controller\n        // onTransfer hook always allows if transfering to token controller\n        require(token.transferFrom(_holder, address(this), nonVested), ERROR_REVOKE_TRANSFER_FROM_REVERTED);\n\n        emit RevokeVesting(_holder, _vestingId, nonVested);\n    }\n\n    /**\n    * @notice Execute desired action as a token holder\n    * @dev IForwarder interface conformance. Forwards any token holder action.\n    * @param _evmScript Script being executed\n    */\n    function forward(bytes _evmScript) public {\n        require(canForward(msg.sender, _evmScript), ERROR_CAN_NOT_FORWARD);\n        bytes memory input = new bytes(0); // TODO: Consider input for this\n\n        // Add the managed token to the blacklist to disallow a token holder from executing actions\n        // on the token controller's (this contract) behalf\n        address[] memory blacklist = new address[](1);\n        blacklist[0] = address(token);\n\n        runScript(_evmScript, input, blacklist);\n    }\n\n    function isForwarder() public pure returns (bool) {\n        return true;\n    }\n\n    function canForward(address _sender, bytes) public view returns (bool) {\n        return hasInitialized() && token.balanceOf(_sender) > 0;\n    }\n\n    function getVesting(\n        address _recipient,\n        uint256 _vestingId\n    )\n        public\n        view\n        vestingExists(_recipient, _vestingId)\n        returns (\n            uint256 amount,\n            uint64 start,\n            uint64 cliff,\n            uint64 vesting,\n            bool revokable\n        )\n    {\n        TokenVesting storage tokenVesting = vestings[_recipient][_vestingId];\n        amount = tokenVesting.amount;\n        start = tokenVesting.start;\n        cliff = tokenVesting.cliff;\n        vesting = tokenVesting.vesting;\n        revokable = tokenVesting.revokable;\n    }\n\n    /*\n    * @dev Notifies the controller about a token transfer allowing the controller to decide whether to allow it or react if desired (only callable from the token)\n    * @param _from The origin of the transfer\n    * @param _to The destination of the transfer\n    * @param _amount The amount of the transfer\n    * @return False if the controller does not authorize the transfer\n    */\n    function onTransfer(address _from, address _to, uint _amount) public isInitialized returns (bool) {\n        require(msg.sender == address(token), ERROR_ON_TRANSFER_WRONG_SENDER);\n\n        bool includesTokenManager = _from == address(this) || _to == address(this);\n\n        if (!includesTokenManager) {\n            bool toCanReceive = _isBalanceIncreaseAllowed(_to, _amount);\n            if (!toCanReceive || transferableBalance(_from, now) < _amount) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n    * @notice Called when ether is sent to the MiniMe Token contract\n    * @return True if the ether is accepted, false for it to throw\n    */\n    function proxyPayment(address) public payable returns (bool) {\n        // Sender check is required to avoid anyone sending ETH to the Token Manager through this method\n        // Even though it is tested, solidity-coverage doesnt get it because\n        // MiniMeToken is not instrumented and entire tx is reverted\n        require(msg.sender == address(token), ERROR_PROXY_PAYMENT_WRONG_SENDER);\n        return false;\n    }\n\n    /**\n    * @dev Notifies the controller about an approval allowing the controller to react if desired\n    * @return False if the controller does not authorize the approval\n    */\n    function onApprove(address, address, uint) public returns (bool) {\n        return true;\n    }\n\n    function _isBalanceIncreaseAllowed(address _receiver, uint _inc) internal view returns (bool) {\n        return token.balanceOf(_receiver).add(_inc) <= maxAccountTokens;\n    }\n\n    function spendableBalanceOf(address _holder) public view returns (uint256) {\n        return transferableBalance(_holder, now);\n    }\n\n    function transferableBalance(address _holder, uint256 _time) public view returns (uint256) {\n        uint256 vestingsCount = vestingsLengths[_holder];\n        uint256 totalNonTransferable = 0;\n\n        for (uint256 i = 0; i < vestingsCount; i++) {\n            TokenVesting storage v = vestings[_holder][i];\n            uint nonTransferable = _calculateNonVestedTokens(\n                v.amount,\n                _time.toUint64(),\n                v.start,\n                v.cliff,\n                v.vesting\n            );\n            totalNonTransferable = totalNonTransferable.add(nonTransferable);\n        }\n\n        return token.balanceOf(_holder).sub(totalNonTransferable);\n    }\n\n    /**\n    * @dev Disable recovery escape hatch for own token,\n    *      as the it has the concept of issuing tokens without assigning them\n    */\n    function allowRecoverability(address _token) public view returns (bool) {\n        return _token != address(token);\n    }\n\n    /**\n    * @dev Calculate amount of non-vested tokens at a specifc time\n    * @param tokens The total amount of tokens vested\n    * @param time The time at which to check\n    * @param start The date vesting started\n    * @param cliff The cliff period\n    * @param vested The fully vested date\n    * @return The amount of non-vested tokens of a specific grant\n    *  transferableTokens\n    *   |                         _/--------   vestedTokens rect\n    *   |                       _/\n    *   |                     _/\n    *   |                   _/\n    *   |                 _/\n    *   |                /\n    *   |              .|\n    *   |            .  |\n    *   |          .    |\n    *   |        .      |\n    *   |      .        |\n    *   |    .          |\n    *   +===+===========+---------+----------> time\n    *      Start       Cliff    Vested\n    */\n    function _calculateNonVestedTokens(\n        uint256 tokens,\n        uint256 time,\n        uint256 start,\n        uint256 cliff,\n        uint256 vested\n    )\n        private\n        pure\n        returns (uint256)\n    {\n        // Shortcuts for before cliff and after vested cases.\n        if (time >= vested) {\n            return 0;\n        }\n        if (time < cliff) {\n            return tokens;\n        }\n\n        // Interpolate all vested tokens.\n        // As before cliff the shortcut returns 0, we can just calculate a value\n        // in the vesting rect (as shown in above's figure)\n\n        // vestedTokens = tokens * (time - start) / (vested - start)\n        // In assignVesting we enforce start <= cliff <= vested\n        // Here we shortcut time >= vested and time < cliff,\n        // so no division by 0 is possible\n        uint256 vestedTokens = tokens.mul(time.sub(start)) / vested.sub(start);\n\n        // tokens - vestedTokens\n        return tokens.sub(vestedTokens);\n    }\n\n    function _assign(address _receiver, uint256 _amount) internal {\n        require(_isBalanceIncreaseAllowed(_receiver, _amount), ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED);\n        // Must use transferFrom() as transfer() does not give the token controller full control\n        require(token.transferFrom(this, _receiver, _amount), ERROR_ASSIGN_TRANSFER_FROM_REVERTED);\n    }\n\n    function _mint(address _receiver, uint256 _amount) internal {\n        token.generateTokens(_receiver, _amount); // minime.generateTokens() never returns false\n    }\n}\n",
  "sourcePath": "@aragon/apps-token-manager/contracts/TokenManager.sol",
  "ast": {
    "absolutePath": "@aragon/apps-token-manager/contracts/TokenManager.sol",
    "exportedSymbols": {
      "TokenManager": [
        4663
      ]
    },
    "id": 4664,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3786,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "94:23:6"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 3787,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8476,
        "src": "119:49:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 3788,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8644,
        "src": "169:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/Uint256Helpers.sol",
        "file": "@aragon/os/contracts/common/Uint256Helpers.sol",
        "id": 3789,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8901,
        "src": "222:56:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 3790,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 11942,
        "src": "280:50:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 3791,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 11712,
        "src": "331:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "file": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "id": 3792,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 2678,
        "src": "385:67:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
        "file": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
        "id": 3793,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 3785,
        "src": "453:62:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3794,
              "name": "ITokenController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2677,
              "src": "543:16:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenController_$2677",
                "typeString": "contract ITokenController"
              }
            },
            "id": 3795,
            "nodeType": "InheritanceSpecifier",
            "src": "543:16:6"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3796,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8643,
              "src": "561:10:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$8643",
                "typeString": "contract IForwarder"
              }
            },
            "id": 3797,
            "nodeType": "InheritanceSpecifier",
            "src": "561:10:6"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3798,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "573:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3799,
            "nodeType": "InheritanceSpecifier",
            "src": "573:9:6"
          }
        ],
        "contractDependencies": [
          2677,
          7585,
          8347,
          8475,
          8488,
          8621,
          8643,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4663,
        "linearizedBaseContracts": [
          4663,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347,
          8643,
          2677
        ],
        "name": "TokenManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3802,
            "libraryName": {
              "contractScope": null,
              "id": 3800,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11711,
              "src": "595:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$11711",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "589:27:6",
            "typeName": {
              "id": 3801,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "608:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3805,
            "libraryName": {
              "contractScope": null,
              "id": 3803,
              "name": "Uint256Helpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8900,
              "src": "627:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uint256Helpers_$8900",
                "typeString": "library Uint256Helpers"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "621:33:6",
            "typeName": {
              "id": 3804,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "646:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 3810,
            "name": "MINT_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "660:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3806,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "660:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d494e545f524f4c45",
                  "id": 3808,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "706:11:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_154c00819833dac601ee5ddded6fda79d9d8b506b911b3dbd54cdb95fe6c3686",
                    "typeString": "literal_string \"MINT_ROLE\""
                  },
                  "value": "MINT_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_154c00819833dac601ee5ddded6fda79d9d8b506b911b3dbd54cdb95fe6c3686",
                    "typeString": "literal_string \"MINT_ROLE\""
                  }
                ],
                "id": 3807,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "696:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3809,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "696:22:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3815,
            "name": "ISSUE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "724:60:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3811,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "724:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "49535355455f524f4c45",
                  "id": 3813,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "771:12:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_2406f1e99f79cea012fb88c5c36566feaeefee0f4b98d3a376b49310222b53c4",
                    "typeString": "literal_string \"ISSUE_ROLE\""
                  },
                  "value": "ISSUE_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_2406f1e99f79cea012fb88c5c36566feaeefee0f4b98d3a376b49310222b53c4",
                    "typeString": "literal_string \"ISSUE_ROLE\""
                  }
                ],
                "id": 3812,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "761:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3814,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "761:23:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3820,
            "name": "ASSIGN_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "790:62:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3816,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "790:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "41535349474e5f524f4c45",
                  "id": 3818,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "838:13:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_f5a08927c847d7a29dc35e105208dbde5ce951392105d712761cc5d17440e2ff",
                    "typeString": "literal_string \"ASSIGN_ROLE\""
                  },
                  "value": "ASSIGN_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_f5a08927c847d7a29dc35e105208dbde5ce951392105d712761cc5d17440e2ff",
                    "typeString": "literal_string \"ASSIGN_ROLE\""
                  }
                ],
                "id": 3817,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "828:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3819,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "828:24:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3825,
            "name": "REVOKE_VESTINGS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "858:80:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3821,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "858:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "5245564f4b455f56455354494e47535f524f4c45",
                  "id": 3823,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "915:22:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_95ffc68daedf1eb334cfcd22ee24a5eeb5a8e58aa40679f2ad247a84140f8d6e",
                    "typeString": "literal_string \"REVOKE_VESTINGS_ROLE\""
                  },
                  "value": "REVOKE_VESTINGS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_95ffc68daedf1eb334cfcd22ee24a5eeb5a8e58aa40679f2ad247a84140f8d6e",
                    "typeString": "literal_string \"REVOKE_VESTINGS_ROLE\""
                  }
                ],
                "id": 3822,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "905:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3824,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "905:33:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3830,
            "name": "BURN_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "944:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3826,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "944:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4255524e5f524f4c45",
                  "id": 3828,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "990:11:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_e97b137254058bd94f28d2f3eb79e2d34074ffb488d042e3bc958e0a57d2fa22",
                    "typeString": "literal_string \"BURN_ROLE\""
                  },
                  "value": "BURN_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_e97b137254058bd94f28d2f3eb79e2d34074ffb488d042e3bc958e0a57d2fa22",
                    "typeString": "literal_string \"BURN_ROLE\""
                  }
                ],
                "id": 3827,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "980:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3829,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "980:22:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3833,
            "name": "MAX_VESTINGS_PER_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1009:53:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3831,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1009:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3530",
              "id": 3832,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1060:2:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3836,
            "name": "ERROR_NO_VESTING",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1069:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3834,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1069:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f4e4f5f56455354494e47",
              "id": 3835,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1112:15:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e58800e54011b78b0f26f397495d939339b84ffc714b84e5f9f82d7f925b4cd4",
                "typeString": "literal_string \"TM_NO_VESTING\""
              },
              "value": "TM_NO_VESTING"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3839,
            "name": "ERROR_TOKEN_CONTROLLER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1133:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3837,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1133:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f544f4b454e5f434f4e54524f4c4c4552",
              "id": 3838,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1182:21:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_665d12afb25ae855835fa801a495db5c0dc17509fd09ae2f0e71ad1c99c0f7ef",
                "typeString": "literal_string \"TM_TOKEN_CONTROLLER\""
              },
              "value": "TM_TOKEN_CONTROLLER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3842,
            "name": "ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1209:95:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3840,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1209:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f4d494e545f42414c5f494e435f4e4f545f414c4c4f574544",
              "id": 3841,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1275:29:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2b772fcef80de71598aed5681079e38847580b8f43b3cb49ce6848ff4a8d18b0",
                "typeString": "literal_string \"TM_MINT_BAL_INC_NOT_ALLOWED\""
              },
              "value": "TM_MINT_BAL_INC_NOT_ALLOWED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3845,
            "name": "ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1310:99:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3843,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1310:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f41535349474e5f42414c5f494e435f4e4f545f414c4c4f574544",
              "id": 3844,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1378:31:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e39bacc8832f554ae60d5f440057f8cae429db320282edeb0f64d55040d0c73e",
                "typeString": "literal_string \"TM_ASSIGN_BAL_INC_NOT_ALLOWED\""
              },
              "value": "TM_ASSIGN_BAL_INC_NOT_ALLOWED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3848,
            "name": "ERROR_TOO_MANY_VESTINGS",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1415:72:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3846,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1415:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f544f4f5f4d414e595f56455354494e4753",
              "id": 3847,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1465:22:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d7e86ff8841a8dbc5e617dd3cf057b08b2d9a42c406172be99a5de4b7831cf47",
                "typeString": "literal_string \"TM_TOO_MANY_VESTINGS\""
              },
              "value": "TM_TOO_MANY_VESTINGS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3851,
            "name": "ERROR_WRONG_CLIFF_DATE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1493:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3849,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1493:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f57524f4e475f434c4946465f44415445",
              "id": 3850,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1542:21:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7153794b46b4c93f4f46a4245605d5f0b27f26ef1574b8394431bdaae283cbc0",
                "typeString": "literal_string \"TM_WRONG_CLIFF_DATE\""
              },
              "value": "TM_WRONG_CLIFF_DATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3854,
            "name": "ERROR_VESTING_NOT_REVOKABLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1569:80:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3852,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1569:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f56455354494e475f4e4f545f5245564f4b41424c45",
              "id": 3853,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1623:26:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_95fd8da2a2e85dbbc02186b47870f457257c14a8e30040d7cdfddd0db2ec8f03",
                "typeString": "literal_string \"TM_VESTING_NOT_REVOKABLE\""
              },
              "value": "TM_VESTING_NOT_REVOKABLE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3857,
            "name": "ERROR_REVOKE_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1655:96:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3855,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1655:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f5245564f4b455f5452414e534645525f46524f4d5f5245564552544544",
              "id": 3856,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1717:34:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_db7e7bea8a3e06053d9ce1a46fec9f3cae3468c59c1d825a9595d219c5fb4ba0",
                "typeString": "literal_string \"TM_REVOKE_TRANSFER_FROM_REVERTED\""
              },
              "value": "TM_REVOKE_TRANSFER_FROM_REVERTED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3860,
            "name": "ERROR_ASSIGN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1757:96:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3858,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1757:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f41535349474e5f5452414e534645525f46524f4d5f5245564552544544",
              "id": 3859,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1819:34:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_942e082c893982fa16c1067985c53ce2706583b575c0148f5e47f0926af1b6b5",
                "typeString": "literal_string \"TM_ASSIGN_TRANSFER_FROM_REVERTED\""
              },
              "value": "TM_ASSIGN_TRANSFER_FROM_REVERTED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3863,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1859:68:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3861,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1859:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f43414e5f4e4f545f464f5257415244",
              "id": 3862,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1907:20:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_40dad3e8808c9552adc0ceb63220b80475917fd314fe84bbfed3430b25a7cdaf",
                "typeString": "literal_string \"TM_CAN_NOT_FORWARD\""
              },
              "value": "TM_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3866,
            "name": "ERROR_ON_TRANSFER_WRONG_SENDER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1933:83:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3864,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1933:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f5452414e534645525f57524f4e475f53454e444552",
              "id": 3865,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1990:26:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_98099312d69732738735b3f5e61f3d09c0efb428ca1ff01f9f87228005190af6",
                "typeString": "literal_string \"TM_TRANSFER_WRONG_SENDER\""
              },
              "value": "TM_TRANSFER_WRONG_SENDER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3869,
            "name": "ERROR_PROXY_PAYMENT_WRONG_SENDER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2022:90:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3867,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2022:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f50524f58595f5041594d454e545f57524f4e475f53454e444552",
              "id": 3868,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2081:31:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_76e948c6176a0396c703a3a245eba7e3c22508ebf35bbab992f2014240286b85",
                "typeString": "literal_string \"TM_PROXY_PAYMENT_WRONG_SENDER\""
              },
              "value": "TM_PROXY_PAYMENT_WRONG_SENDER"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "TokenManager.TokenVesting",
            "id": 3880,
            "members": [
              {
                "constant": false,
                "id": 3871,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2149:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3870,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2149:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3873,
                "name": "start",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2173:12:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3872,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2173:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3875,
                "name": "cliff",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2195:12:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3874,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2195:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3877,
                "name": "vesting",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2217:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3876,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2217:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3879,
                "name": "revokable",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2241:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3878,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2241:4:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenVesting",
            "nodeType": "StructDefinition",
            "scope": 4663,
            "src": "2119:143:6",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3882,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2268:24:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
              "typeString": "contract MiniMeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 3881,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3743,
              "src": "2268:11:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                "typeString": "contract MiniMeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3884,
            "name": "maxAccountTokens",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2298:31:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3883,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2298:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3890,
            "name": "vestings",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2449:72:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
              "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting))"
            },
            "typeName": {
              "id": 3889,
              "keyType": {
                "id": 3885,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2458:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2449:54:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting))"
              },
              "valueType": {
                "id": 3888,
                "keyType": {
                  "id": 3886,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2478:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "2469:33:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                  "typeString": "mapping(uint256 => struct TokenManager.TokenVesting)"
                },
                "valueType": {
                  "contractScope": null,
                  "id": 3887,
                  "name": "TokenVesting",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 3880,
                  "src": "2489:12:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                    "typeString": "struct TokenManager.TokenVesting"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3894,
            "name": "vestingsLengths",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2527:51:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 3893,
              "keyType": {
                "id": 3891,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2536:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2527:28:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 3892,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2547:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3898,
            "name": "everHeld",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2584:41:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 3897,
              "keyType": {
                "id": 3895,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2593:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2584:25:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 3896,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2604:4:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3906,
            "name": "NewVesting",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3900,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2750:24:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2750:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3902,
                  "indexed": false,
                  "name": "vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2776:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3901,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2776:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3904,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2795:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2749:61:6"
            },
            "src": "2733:78:6"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3914,
            "name": "RevokeVesting",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3908,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2836:24:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3907,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2836:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3910,
                  "indexed": false,
                  "name": "vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2862:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3912,
                  "indexed": false,
                  "name": "nonVestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2881:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3911,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2881:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2835:70:6"
            },
            "src": "2816:90:6"
          },
          {
            "body": {
              "id": 3930,
              "nodeType": "Block",
              "src": "2972:197:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3921,
                          "name": "_vestingId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3918,
                          "src": "3095:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3922,
                            "name": "vestingsLengths",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3894,
                            "src": "3108:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3924,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3923,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3916,
                            "src": "3124:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3108:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3095:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3926,
                        "name": "ERROR_NO_VESTING",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3836,
                        "src": "3134:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3920,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3087:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3087:64:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3928,
                  "nodeType": "ExpressionStatement",
                  "src": "3087:64:6"
                },
                {
                  "id": 3929,
                  "nodeType": "PlaceholderStatement",
                  "src": "3161:1:6"
                }
              ]
            },
            "documentation": null,
            "id": 3931,
            "name": "vestingExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3916,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 3931,
                  "src": "2935:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3915,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2935:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3918,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3931,
                  "src": "2952:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3917,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2952:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2934:37:6"
            },
            "src": "2912:257:6",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3985,
              "nodeType": "Block",
              "src": "3907:338:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3942,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "3917:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3917:13:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3944,
                  "nodeType": "ExpressionStatement",
                  "src": "3917:13:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3946,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3933,
                              "src": "3949:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 3947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "controller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2693,
                            "src": "3949:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3949:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3950,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12805,
                              "src": "3980:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenManager_$4663",
                                "typeString": "contract TokenManager"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_TokenManager_$4663",
                                "typeString": "contract TokenManager"
                              }
                            ],
                            "id": 3949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3972:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3972:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3949:36:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3953,
                        "name": "ERROR_TOKEN_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3839,
                        "src": "3987:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3941:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3941:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3955,
                  "nodeType": "ExpressionStatement",
                  "src": "3941:69:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3956,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3882,
                      "src": "4021:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3957,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3933,
                      "src": "4029:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "src": "4021:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "id": 3959,
                  "nodeType": "ExpressionStatement",
                  "src": "4021:14:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3960,
                      "name": "maxAccountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3884,
                      "src": "4045:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3961,
                          "name": "_maxAccountTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3937,
                          "src": "4064:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4085:1:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4064:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 3968,
                        "name": "_maxAccountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3937,
                        "src": "4103:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "4064:56:6",
                      "trueExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "4097:2:6",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 3965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4098:1:6",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4089:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 3967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4089:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4045:75:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3971,
                  "nodeType": "ExpressionStatement",
                  "src": "4045:75:6"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3972,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "4135:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        },
                        "id": 3973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfersEnabled",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2765,
                        "src": "4135:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                          "typeString": "function () view external returns (bool)"
                        }
                      },
                      "id": 3974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4135:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3975,
                      "name": "_transferable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3935,
                      "src": "4163:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4135:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3984,
                  "nodeType": "IfStatement",
                  "src": "4131:108:6",
                  "trueBody": {
                    "id": 3983,
                    "nodeType": "Block",
                    "src": "4178:61:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3980,
                              "name": "_transferable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3935,
                              "src": "4214:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3977,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "4192:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 3979,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "enableTransfers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3433,
                            "src": "4192:21:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bool_$returns$__$",
                              "typeString": "function (bool) external"
                            }
                          },
                          "id": 3981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4192:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3982,
                        "nodeType": "ExpressionStatement",
                        "src": "4192:36:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Initialize Token Manager for `_token.symbol(): string`, whose tokens are `transferable ? 'not' : ''` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''`\n@param _token MiniMeToken address for the managed token (Token Manager instance must be already set as the token controller)\n@param _transferable whether the token can be transferred by holders\n@param _maxAccountTokens Maximum amount of tokens an account can have (0 for infinite tokens)",
            "id": 3986,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3940,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3939,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "3894:8:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3894:8:6"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3933,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3781:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3932,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3743,
                    "src": "3781:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3935,
                  "name": "_transferable",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3809:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3934,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3809:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3937,
                  "name": "_maxAccountTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3837:25:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3837:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3771:97:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 3941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3907:0:6"
            },
            "scope": 4663,
            "src": "3752:493:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4013,
              "nodeType": "Block",
              "src": "4564:147:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4002,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3988,
                            "src": "4608:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4003,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3990,
                            "src": "4619:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4001,
                          "name": "_isBalanceIncreaseAllowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4473,
                          "src": "4582:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 4004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4582:45:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4005,
                        "name": "ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3842,
                        "src": "4629:39:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4000,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "4574:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4574:95:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4007,
                  "nodeType": "ExpressionStatement",
                  "src": "4574:95:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4009,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3988,
                        "src": "4685:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4010,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3990,
                        "src": "4696:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4008,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4662,
                      "src": "4679:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4679:25:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4012,
                  "nodeType": "ExpressionStatement",
                  "src": "4679:25:6"
                }
              ]
            },
            "documentation": "@notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for `_receiver`\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens minted",
            "id": 4014,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3993,
                    "name": "MINT_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3810,
                    "src": "4528:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3988,
                        "src": "4543:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3990,
                        "src": "4554:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3994,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "4539:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 3997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4539:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 3998,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3992,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "4522:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4522:41:6"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3988,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4014,
                  "src": "4477:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4477:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3990,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4014,
                  "src": "4496:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4476:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 3999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4564:0:6"
            },
            "scope": 4663,
            "src": "4463:248:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4032,
              "nodeType": "Block",
              "src": "4952:46:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4027,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "4976:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4968:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4028,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4968:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4029,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "4983:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4025,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4662,
                      "src": "4962:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4962:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4031,
                  "nodeType": "ExpressionStatement",
                  "src": "4962:29:6"
                }
              ]
            },
            "documentation": "@notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for the Token Manager\n@param _amount Number of tokens minted",
            "id": 4033,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4019,
                    "name": "ISSUE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3815,
                    "src": "4926:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4021,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "4942:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4020,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7412,
                      "src": "4938:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4938:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4018,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "4920:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4920:31:6"
              }
            ],
            "name": "issue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4016,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4033,
                  "src": "4894:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4894:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4893:17:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4952:0:6"
            },
            "scope": 4663,
            "src": "4879:119:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4052,
              "nodeType": "Block",
              "src": "5361:44:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4048,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4035,
                        "src": "5379:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4049,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4037,
                        "src": "5390:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4047,
                      "name": "_assign",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4647,
                      "src": "5371:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5371:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4051,
                  "nodeType": "ExpressionStatement",
                  "src": "5371:27:6"
                }
              ]
            },
            "documentation": "@notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens transferred",
            "id": 4053,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4040,
                    "name": "ASSIGN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3820,
                    "src": "5323:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4035,
                        "src": "5340:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4043,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4037,
                        "src": "5351:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4041,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "5336:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5336:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4045,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4039,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "5317:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5317:43:6"
              }
            ],
            "name": "assign",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4035,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "5272:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4034,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5272:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4037,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "5291:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4036,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5291:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5271:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4046,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5361:0:6"
            },
            "scope": 4663,
            "src": "5256:149:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4074,
              "nodeType": "Block",
              "src": "5720:133:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4070,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4055,
                        "src": "5829:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4071,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4057,
                        "src": "5838:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4067,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3882,
                        "src": "5809:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 4069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "destroyTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3421,
                      "src": "5809:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5809:37:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4073,
                  "nodeType": "ExpressionStatement",
                  "src": "5809:37:6"
                }
              ]
            },
            "documentation": "@notice Burn `@tokenAmount(self.token(): address, _amount, false)` tokens from `_holder`\n@param _holder Holder of tokens being burned\n@param _amount Number of tokens being burned",
            "id": 4075,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4060,
                    "name": "BURN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3830,
                    "src": "5686:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4062,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4055,
                        "src": "5701:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4063,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4057,
                        "src": "5710:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4061,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "5697:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5697:21:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4065,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4059,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "5680:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5680:39:6"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4055,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4075,
                  "src": "5637:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5637:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4057,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4075,
                  "src": "5654:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4056,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5654:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5636:34:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5720:0:6"
            },
            "scope": 4663,
            "src": "5623:230:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4153,
              "nodeType": "Block",
              "src": "6879:537:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4100,
                            "name": "vestingsLengths",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3894,
                            "src": "6897:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4102,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4101,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4077,
                            "src": "6913:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6897:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4103,
                          "name": "MAX_VESTINGS_PER_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3833,
                          "src": "6926:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6897:53:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4105,
                        "name": "ERROR_TOO_MANY_VESTINGS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3848,
                        "src": "6952:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4099,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6889:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6889:87:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4107,
                  "nodeType": "ExpressionStatement",
                  "src": "6889:87:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4109,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4081,
                            "src": "6995:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4110,
                            "name": "_cliff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4083,
                            "src": "7005:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6995:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4112,
                            "name": "_cliff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4083,
                            "src": "7015:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4113,
                            "name": "_vested",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4085,
                            "src": "7025:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "7015:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6995:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4116,
                        "name": "ERROR_WRONG_CLIFF_DATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3851,
                        "src": "7034:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4108,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6987:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6987:70:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4118,
                  "nodeType": "ExpressionStatement",
                  "src": "6987:70:6"
                },
                {
                  "assignments": [
                    4120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4120,
                      "name": "vestingId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4154,
                      "src": "7068:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4119,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7068:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4125,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "7088:28:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4121,
                        "name": "vestingsLengths",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3894,
                        "src": "7088:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4123,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4122,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7104:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7088:26:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7068:48:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4126,
                          "name": "vestings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3890,
                          "src": "7126:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                            "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                          }
                        },
                        "id": 4129,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4127,
                          "name": "_receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4077,
                          "src": "7135:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7126:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                          "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                        }
                      },
                      "id": 4130,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4128,
                        "name": "vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4120,
                        "src": "7146:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7126:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                        "typeString": "struct TokenManager.TokenVesting storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4132,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4079,
                          "src": "7185:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4133,
                          "name": "_start",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4081,
                          "src": "7206:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4134,
                          "name": "_cliff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4083,
                          "src": "7226:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4135,
                          "name": "_vested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4085,
                          "src": "7246:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4136,
                          "name": "_revokable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4087,
                          "src": "7267:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 4131,
                        "name": "TokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3880,
                        "src": "7159:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_TokenVesting_$3880_storage_ptr_$",
                          "typeString": "type(struct TokenManager.TokenVesting storage pointer)"
                        }
                      },
                      "id": 4137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7159:128:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_memory",
                        "typeString": "struct TokenManager.TokenVesting memory"
                      }
                    },
                    "src": "7126:161:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "id": 4139,
                  "nodeType": "ExpressionStatement",
                  "src": "7126:161:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4141,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7306:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4142,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "7317:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4140,
                      "name": "_assign",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4647,
                      "src": "7298:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7298:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4144,
                  "nodeType": "ExpressionStatement",
                  "src": "7298:27:6"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4146,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7352:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4147,
                        "name": "vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4120,
                        "src": "7363:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4148,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "7374:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4145,
                      "name": "NewVesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3906,
                      "src": "7341:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7341:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4150,
                  "nodeType": "EmitStatement",
                  "src": "7336:46:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4151,
                    "name": "vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4120,
                    "src": "7400:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4098,
                  "id": 4152,
                  "nodeType": "Return",
                  "src": "7393:16:6"
                }
              ]
            },
            "documentation": "@notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings with a `_revokable : 'revokable' : ''` vesting starting at `@formatDate(_start)`, cliff at `@formatDate(_cliff)` (first portion of tokens transferable), and completed vesting at `@formatDate(_vested)` (all tokens transferable)\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens vested\n@param _start Date the vesting calculations start\n@param _cliff Date when the initial portion of tokens are transferable\n@param _vested Date when all tokens are transferable\n@param _revokable Whether the vesting can be revoked by the Token Manager",
            "id": 4154,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4090,
                    "name": "ASSIGN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3820,
                    "src": "6811:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4092,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "6828:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4093,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "6839:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4091,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "6824:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6824:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4095,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4089,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "6805:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6805:43:6"
              }
            ],
            "name": "assignVested",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4077,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6636:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6636:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4079,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6663:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4081,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6688:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4080,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6688:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4083,
                  "name": "_cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6711:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4082,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4085,
                  "name": "_vested",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6734:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4084,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6734:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4087,
                  "name": "_revokable",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6758:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4086,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6758:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6626:153:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4097,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6866:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6866:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6865:9:6"
            },
            "scope": 4663,
            "src": "6605:811:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4225,
              "nodeType": "Block",
              "src": "7820:746:6",
              "statements": [
                {
                  "assignments": [
                    4172
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4172,
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "scope": 4226,
                      "src": "7830:22:6",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                        "typeString": "struct TokenManager.TokenVesting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4171,
                        "name": "TokenVesting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3880,
                        "src": "7830:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4178,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4173,
                        "name": "vestings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3890,
                        "src": "7855:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                        }
                      },
                      "id": 4175,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4174,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "7864:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7855:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                        "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                      }
                    },
                    "id": 4177,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4176,
                      "name": "_vestingId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4158,
                      "src": "7873:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7855:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7830:54:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4180,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "7902:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "revokable",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3879,
                        "src": "7902:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "ERROR_VESTING_NOT_REVOKABLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3854,
                        "src": "7915:27:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4179,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "7894:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7894:49:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4184,
                  "nodeType": "ExpressionStatement",
                  "src": "7894:49:6"
                },
                {
                  "assignments": [
                    4186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4186,
                      "name": "nonVested",
                      "nodeType": "VariableDeclaration",
                      "scope": 4226,
                      "src": "7954:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4185,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7954:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4199,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4188,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8013:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4189,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3871,
                        "src": "8013:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4190,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "8035:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8035:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4192,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8065:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4193,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "start",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3873,
                        "src": "8065:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4194,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8086:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4195,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "cliff",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3875,
                        "src": "8086:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4196,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8107:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4197,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vesting",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3877,
                        "src": "8107:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4187,
                      "name": "_calculateNonVestedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4621,
                      "src": "7974:25:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7974:152:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7954:172:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8225:36:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4200,
                          "name": "vestings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3890,
                          "src": "8232:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                            "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                          }
                        },
                        "id": 4202,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4201,
                          "name": "_holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4156,
                          "src": "8241:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8232:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                          "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                        }
                      },
                      "id": 4204,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4203,
                        "name": "_vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "8250:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8232:29:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                        "typeString": "struct TokenManager.TokenVesting storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4206,
                  "nodeType": "ExpressionStatement",
                  "src": "8225:36:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4210,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4156,
                            "src": "8426:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4212,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12805,
                                "src": "8443:4:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TokenManager_$4663",
                                  "typeString": "contract TokenManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_TokenManager_$4663",
                                  "typeString": "contract TokenManager"
                                }
                              ],
                              "id": 4211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8435:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8435:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4214,
                            "name": "nonVested",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4186,
                            "src": "8450:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4208,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "8407:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "8407:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8407:53:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4216,
                        "name": "ERROR_REVOKE_TRANSFER_FROM_REVERTED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3857,
                        "src": "8462:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8399:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8399:99:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4218,
                  "nodeType": "ExpressionStatement",
                  "src": "8399:99:6"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4220,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "8528:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4221,
                        "name": "_vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "8537:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4222,
                        "name": "nonVested",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4186,
                        "src": "8549:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4219,
                      "name": "RevokeVesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3914,
                      "src": "8514:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8514:45:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4224,
                  "nodeType": "EmitStatement",
                  "src": "8509:50:6"
                }
              ]
            },
            "documentation": "@notice Revoke vesting #`_vestingId` from `_holder`, returning unvested tokens to the Token Manager\n@param _holder Address whose vesting to revoke\n@param _vestingId Numeric id of the vesting",
            "id": 4226,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4161,
                    "name": "REVOKE_VESTINGS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3825,
                    "src": "7737:20:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4163,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "7763:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4162,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7225,
                      "src": "7759:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7759:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4165,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4160,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "7731:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7731:41:6"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4167,
                    "name": "_holder",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4156,
                    "src": "7795:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 4168,
                    "name": "_vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4158,
                    "src": "7804:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4169,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4166,
                  "name": "vestingExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3931,
                  "src": "7781:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_uint256_$",
                    "typeString": "modifier (address,uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7781:34:6"
              }
            ],
            "name": "revokeVesting",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4156,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "7669:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7669:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4158,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "7686:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7686:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7668:37:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7820:0:6"
            },
            "scope": 4663,
            "src": "7646:920:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4271,
              "nodeType": "Block",
              "src": "8809:464:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4233,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12670,
                              "src": "8838:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "8838:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4235,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4228,
                            "src": "8850:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 4232,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            4300
                          ],
                          "referencedDeclaration": 4300,
                          "src": "8827:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 4236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8827:34:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4237,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3863,
                        "src": "8863:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4231,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8819:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8819:66:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4239,
                  "nodeType": "ExpressionStatement",
                  "src": "8819:66:6"
                },
                {
                  "assignments": [
                    4241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4241,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 4272,
                      "src": "8895:18:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4240,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8895:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4246,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8926:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 4243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "8916:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 4242,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8920:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 4245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8916:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8895:33:6"
                },
                {
                  "assignments": [
                    4250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4250,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 4272,
                      "src": "9132:26:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9132:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4249,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "9132:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 4254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9175:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 4253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "9161:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9165:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4252,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "9165:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 4255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9161:16:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9132:45:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4257,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "9187:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 4259,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9197:1:6",
                        "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": "9187:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4261,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "9210:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        ],
                        "id": 4260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9202:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9202:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9187:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4264,
                  "nodeType": "ExpressionStatement",
                  "src": "9187:29:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4266,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4228,
                        "src": "9237:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4267,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4241,
                        "src": "9249:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4268,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "9256:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 4265,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9432,
                      "src": "9227:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 4269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9227:39:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 4270,
                  "nodeType": "ExpressionStatement",
                  "src": "9227:39:6"
                }
              ]
            },
            "documentation": "@notice Execute desired action as a token holder\n@dev IForwarder interface conformance. Forwards any token holder action.\n@param _evmScript Script being executed",
            "id": 4272,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4228,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 4272,
                  "src": "8784:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8784:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8783:18:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4230,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8809:0:6"
            },
            "scope": 4663,
            "src": "8767:506:6",
            "stateMutability": "nonpayable",
            "superFunction": 8642,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4279,
              "nodeType": "Block",
              "src": "9329:28:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9346:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4276,
                  "id": 4278,
                  "nodeType": "Return",
                  "src": "9339:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 4280,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4273,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9299:2:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4280,
                  "src": "9323:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4274,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9323:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9322:6:6"
            },
            "scope": 4663,
            "src": "9279:78:6",
            "stateMutability": "pure",
            "superFunction": 8628,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4299,
              "nodeType": "Block",
              "src": "9434:72:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4289,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8733,
                        "src": "9451:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 4290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9451:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4293,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4282,
                            "src": "9487:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4291,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "9471:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3014,
                          "src": "9471:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 4294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9471:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9498:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9471:28:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9451:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4288,
                  "id": 4298,
                  "nodeType": "Return",
                  "src": "9444:55:6"
                }
              ]
            },
            "documentation": null,
            "id": 4300,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4282,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9383:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9383:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4284,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9400:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4283,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9400:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9382:24:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4287,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9428:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4286,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9428:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9427:6:6"
            },
            "scope": 4663,
            "src": "9363:143:6",
            "stateMutability": "view",
            "superFunction": 8637,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4354,
              "nodeType": "Block",
              "src": "9835:279:6",
              "statements": [
                {
                  "assignments": [
                    4322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4322,
                      "name": "tokenVesting",
                      "nodeType": "VariableDeclaration",
                      "scope": 4355,
                      "src": "9845:33:6",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                        "typeString": "struct TokenManager.TokenVesting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4321,
                        "name": "TokenVesting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3880,
                        "src": "9845:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4328,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4323,
                        "name": "vestings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3890,
                        "src": "9881:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                        }
                      },
                      "id": 4325,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4324,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4302,
                        "src": "9890:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9881:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                        "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                      }
                    },
                    "id": 4327,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4326,
                      "name": "_vestingId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4304,
                      "src": "9902:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9881:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9845:68:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4329,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4311,
                      "src": "9923:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4330,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "9932:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4331,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3871,
                      "src": "9932:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9923:28:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4333,
                  "nodeType": "ExpressionStatement",
                  "src": "9923:28:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4334,
                      "name": "start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4313,
                      "src": "9961:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4335,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "9969:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4336,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3873,
                      "src": "9969:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9961:26:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4338,
                  "nodeType": "ExpressionStatement",
                  "src": "9961:26:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4339,
                      "name": "cliff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4315,
                      "src": "9997:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4340,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10005:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4341,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cliff",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3875,
                      "src": "10005:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9997:26:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4343,
                  "nodeType": "ExpressionStatement",
                  "src": "9997:26:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4344,
                      "name": "vesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4317,
                      "src": "10033:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4345,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10043:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4346,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "vesting",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3877,
                      "src": "10043:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "10033:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4348,
                  "nodeType": "ExpressionStatement",
                  "src": "10033:30:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4349,
                      "name": "revokable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4319,
                      "src": "10073:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4350,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10085:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3879,
                      "src": "10085:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10073:34:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4353,
                  "nodeType": "ExpressionStatement",
                  "src": "10073:34:6"
                }
              ]
            },
            "documentation": null,
            "id": 4355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4307,
                    "name": "_recipient",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4302,
                    "src": "9644:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 4308,
                    "name": "_vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4304,
                    "src": "9656:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4309,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4306,
                  "name": "vestingExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3931,
                  "src": "9630:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_uint256_$",
                    "typeString": "modifier (address,uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9630:37:6"
              }
            ],
            "name": "getVesting",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4302,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9541:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4301,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9541:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4304,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9569:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4303,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9569:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9531:62:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4311,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9698:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4310,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9698:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4313,
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9726:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4312,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9726:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4315,
                  "name": "cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9752:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4314,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9752:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4317,
                  "name": "vesting",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9778:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4316,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9778:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4319,
                  "name": "revokable",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9806:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4318,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9806:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9684:146:6"
            },
            "scope": 4663,
            "src": "9512:602:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4418,
              "nodeType": "Block",
              "src": "10608:436:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "10626:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10626:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4372,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "10648:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            ],
                            "id": 4371,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10640:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10640:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10626:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4375,
                        "name": "ERROR_ON_TRANSFER_WRONG_SENDER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3866,
                        "src": "10656:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "10618:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10618:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4377,
                  "nodeType": "ExpressionStatement",
                  "src": "10618:69:6"
                },
                {
                  "assignments": [
                    4379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4379,
                      "name": "includesTokenManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 4419,
                      "src": "10698:25:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4378,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "10698:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4391,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4380,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "10726:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4382,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "10743:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10735:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10735:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10726:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4385,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "10752:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4387,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "10767:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10759:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10759:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10752:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10726:46:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10698:74:6"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "10787:21:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 4392,
                      "name": "includesTokenManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4379,
                      "src": "10788:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4415,
                  "nodeType": "IfStatement",
                  "src": "10783:233:6",
                  "trueBody": {
                    "id": 4414,
                    "nodeType": "Block",
                    "src": "10810:206:6",
                    "statements": [
                      {
                        "assignments": [
                          4395
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4395,
                            "name": "toCanReceive",
                            "nodeType": "VariableDeclaration",
                            "scope": 4419,
                            "src": "10824:17:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4394,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "10824:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4400,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4397,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4359,
                              "src": "10870:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4398,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4361,
                              "src": "10875:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4396,
                            "name": "_isBalanceIncreaseAllowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4473,
                            "src": "10844:25:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) view returns (bool)"
                            }
                          },
                          "id": 4399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10844:39:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10824:59:6"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "10901:13:6",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 4401,
                              "name": "toCanReceive",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4395,
                              "src": "10902:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4404,
                                  "name": "_from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4357,
                                  "src": "10938:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4405,
                                  "name": "now",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12672,
                                  "src": "10945:3:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4403,
                                "name": "transferableBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4557,
                                "src": "10918:19:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (address,uint256) view returns (uint256)"
                                }
                              },
                              "id": 4406,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10918:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4407,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4361,
                              "src": "10952:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10918:41:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10901:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4413,
                        "nodeType": "IfStatement",
                        "src": "10897:109:6",
                        "trueBody": {
                          "id": 4412,
                          "nodeType": "Block",
                          "src": "10961:45:6",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 4410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10986:5:6",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 4367,
                              "id": 4411,
                              "nodeType": "Return",
                              "src": "10979:12:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11033:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4367,
                  "id": 4417,
                  "nodeType": "Return",
                  "src": "11026:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 4419,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4364,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4363,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "10579:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10579:13:6"
              }
            ],
            "name": "onTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4357,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10530:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10530:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4359,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10545:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10545:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4361,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10558:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4360,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10558:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10529:42:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4366,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10602:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4365,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10602:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10601:6:6"
            },
            "scope": 4663,
            "src": "10510:534:6",
            "stateMutability": "nonpayable",
            "superFunction": 2665,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4438,
              "nodeType": "Block",
              "src": "11262:361:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4427,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "11531:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11531:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4430,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "11553:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            ],
                            "id": 4429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11545:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11545:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11531:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4433,
                        "name": "ERROR_PROXY_PAYMENT_WRONG_SENDER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3869,
                        "src": "11561:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4426,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "11523:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11523:71:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4435,
                  "nodeType": "ExpressionStatement",
                  "src": "11523:71:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11611:5:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 4425,
                  "id": 4437,
                  "nodeType": "Return",
                  "src": "11604:12:6"
                }
              ]
            },
            "documentation": "@notice Called when ether is sent to the MiniMe Token contract\n@return True if the ether is accepted, false for it to throw",
            "id": 4439,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "proxyPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4421,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4439,
                  "src": "11223:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11223:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11222:9:6"
            },
            "payable": true,
            "returnParameters": {
              "id": 4425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4424,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4439,
                  "src": "11256:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4423,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11256:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11255:6:6"
            },
            "scope": 4663,
            "src": "11201:422:6",
            "stateMutability": "payable",
            "superFunction": 2654,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4452,
              "nodeType": "Block",
              "src": "11876:28:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11893:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4449,
                  "id": 4451,
                  "nodeType": "Return",
                  "src": "11886:11:6"
                }
              ]
            },
            "documentation": "@dev Notifies the controller about an approval allowing the controller to react if desired\n@return False if the controller does not authorize the approval",
            "id": 4453,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "onApprove",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4441,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11830:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11830:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4443,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11839:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11839:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11848:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4444,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11848:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11829:24:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4448,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11870:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4447,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11870:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11869:6:6"
            },
            "scope": 4663,
            "src": "11811:93:6",
            "stateMutability": "nonpayable",
            "superFunction": 2676,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4472,
              "nodeType": "Block",
              "src": "12004:80:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4467,
                          "name": "_inc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4457,
                          "src": "12052:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4464,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4455,
                              "src": "12037:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4462,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "12021:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 4463,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3014,
                            "src": "12021:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 4465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12021:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11689,
                        "src": "12021:30:6",
                        "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": 4468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12021:36:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4469,
                      "name": "maxAccountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3884,
                      "src": "12061:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12021:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4461,
                  "id": 4471,
                  "nodeType": "Return",
                  "src": "12014:63:6"
                }
              ]
            },
            "documentation": null,
            "id": 4473,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isBalanceIncreaseAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4455,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11945:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11945:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4457,
                  "name": "_inc",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11964:9:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4456,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11964:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11944:30:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4460,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11998:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4459,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11998:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11997:6:6"
            },
            "scope": 4663,
            "src": "11910:174:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4485,
              "nodeType": "Block",
              "src": "12165:57:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4481,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4475,
                        "src": "12202:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4482,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12672,
                        "src": "12211:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4480,
                      "name": "transferableBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4557,
                      "src": "12182:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 4483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12182:33:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4479,
                  "id": 4484,
                  "nodeType": "Return",
                  "src": "12175:40:6"
                }
              ]
            },
            "documentation": null,
            "id": 4486,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "spendableBalanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4475,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4486,
                  "src": "12118:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12118:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12117:17:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4478,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4486,
                  "src": "12156:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12156:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12155:9:6"
            },
            "scope": 4663,
            "src": "12090:132:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4556,
              "nodeType": "Block",
              "src": "12319:590:6",
              "statements": [
                {
                  "assignments": [
                    4496
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4496,
                      "name": "vestingsCount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4557,
                      "src": "12329:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4495,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12329:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4500,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4497,
                      "name": "vestingsLengths",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3894,
                      "src": "12353:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 4499,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4498,
                      "name": "_holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4488,
                      "src": "12369:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12353:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12329:48:6"
                },
                {
                  "assignments": [
                    4502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4502,
                      "name": "totalNonTransferable",
                      "nodeType": "VariableDeclaration",
                      "scope": 4557,
                      "src": "12387:28:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4501,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12387:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4504,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12418:1:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12387:32:6"
                },
                {
                  "body": {
                    "id": 4546,
                    "nodeType": "Block",
                    "src": "12474:361:6",
                    "statements": [
                      {
                        "assignments": [
                          4516
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4516,
                            "name": "v",
                            "nodeType": "VariableDeclaration",
                            "scope": 4557,
                            "src": "12488:22:6",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                              "typeString": "struct TokenManager.TokenVesting"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4515,
                              "name": "TokenVesting",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3880,
                              "src": "12488:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                "typeString": "struct TokenManager.TokenVesting"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4522,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4517,
                              "name": "vestings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3890,
                              "src": "12513:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                                "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                              }
                            },
                            "id": 4519,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4518,
                              "name": "_holder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4488,
                              "src": "12522:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12513:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                              "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                            }
                          },
                          "id": 4521,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4520,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4506,
                            "src": "12531:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12513:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                            "typeString": "struct TokenManager.TokenVesting storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12488:45:6"
                      },
                      {
                        "assignments": [
                          4524
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4524,
                            "name": "nonTransferable",
                            "nodeType": "VariableDeclaration",
                            "scope": 4557,
                            "src": "12547:20:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4523,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "12547:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4538,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4526,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12613:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4527,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3871,
                              "src": "12613:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4528,
                                  "name": "_time",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4490,
                                  "src": "12639:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4529,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint64",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8899,
                                "src": "12639:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint64)"
                                }
                              },
                              "id": 4530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12639:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4531,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12673:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4532,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "start",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3873,
                              "src": "12673:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4533,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12698:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4534,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "cliff",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3875,
                              "src": "12698:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4535,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12723:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4536,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "vesting",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3877,
                              "src": "12723:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 4525,
                            "name": "_calculateNonVestedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4621,
                            "src": "12570:25:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12570:176:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12547:199:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4539,
                            "name": "totalNonTransferable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4502,
                            "src": "12760:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4542,
                                "name": "nonTransferable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4524,
                                "src": "12808:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4540,
                                "name": "totalNonTransferable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4502,
                                "src": "12783:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "12783:24:6",
                              "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": 4543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12783:41:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12760:64:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4545,
                        "nodeType": "ExpressionStatement",
                        "src": "12760:64:6"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4509,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4506,
                      "src": "12450:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4510,
                      "name": "vestingsCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4496,
                      "src": "12454:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12450:17:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4547,
                  "initializationExpression": {
                    "assignments": [
                      4506
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4506,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4557,
                        "src": "12435:9:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4505,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12435:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4508,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12447:1:6",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12435:13:6"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "12469:3:6",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4512,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4506,
                        "src": "12469:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4514,
                    "nodeType": "ExpressionStatement",
                    "src": "12469:3:6"
                  },
                  "nodeType": "ForStatement",
                  "src": "12430:405:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4553,
                        "name": "totalNonTransferable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4502,
                        "src": "12881:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4550,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4488,
                            "src": "12868:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4548,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "12852:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3014,
                          "src": "12852:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 4551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12852:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "12852:28:6",
                      "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": 4554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12852:50:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4494,
                  "id": 4555,
                  "nodeType": "Return",
                  "src": "12845:57:6"
                }
              ]
            },
            "documentation": null,
            "id": 4557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "transferableBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4488,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12257:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4487,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4490,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12274:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12274:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12256:32:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12310:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12310:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12309:9:6"
            },
            "scope": 4663,
            "src": "12228:681:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4570,
              "nodeType": "Block",
              "src": "13136:48:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4564,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4559,
                      "src": "13153:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4566,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "13171:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        ],
                        "id": 4565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13163:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13163:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13153:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4563,
                  "id": 4569,
                  "nodeType": "Return",
                  "src": "13146:31:6"
                }
              ]
            },
            "documentation": "@dev Disable recovery escape hatch for own token,\n     as the it has the concept of issuing tokens without assigning them",
            "id": 4571,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4559,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "13093:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13093:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13092:16:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4562,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "13130:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4561,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13130:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13129:6:6"
            },
            "scope": 4663,
            "src": "13064:120:6",
            "stateMutability": "view",
            "superFunction": 9060,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4620,
              "nodeType": "Block",
              "src": "14268:773:6",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4586,
                      "name": "time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4575,
                      "src": "14344:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4587,
                      "name": "vested",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4581,
                      "src": "14352:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14344:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4592,
                  "nodeType": "IfStatement",
                  "src": "14340:53:6",
                  "trueBody": {
                    "id": 4591,
                    "nodeType": "Block",
                    "src": "14360:33:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14381:1:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 4585,
                        "id": 4590,
                        "nodeType": "Return",
                        "src": "14374:8:6"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4593,
                      "name": "time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4575,
                      "src": "14406:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4594,
                      "name": "cliff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4579,
                      "src": "14413:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14406:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4599,
                  "nodeType": "IfStatement",
                  "src": "14402:56:6",
                  "trueBody": {
                    "id": 4598,
                    "nodeType": "Block",
                    "src": "14420:38:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4596,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4573,
                          "src": "14441:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4585,
                        "id": 4597,
                        "nodeType": "Return",
                        "src": "14434:13:6"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4601,
                      "name": "vestedTokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 4621,
                      "src": "14889:20:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4600,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14889:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4614,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4606,
                              "name": "start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4577,
                              "src": "14932:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4604,
                              "name": "time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4575,
                              "src": "14923:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11664,
                            "src": "14923:8:6",
                            "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": 4607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14923:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4602,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4573,
                          "src": "14912:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11614,
                        "src": "14912:10:6",
                        "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": 4608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14912:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4611,
                          "name": "start",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4577,
                          "src": "14953:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4609,
                          "name": "vested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4581,
                          "src": "14942:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11664,
                        "src": "14942:10:6",
                        "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": 4612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14942:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14912:47:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14889:70:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4617,
                        "name": "vestedTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4601,
                        "src": "15021:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4615,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4573,
                        "src": "15010:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4616,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "15010:10:6",
                      "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": 4618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15010:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4585,
                  "id": 4619,
                  "nodeType": "Return",
                  "src": "15003:31:6"
                }
              ]
            },
            "documentation": "@dev Calculate amount of non-vested tokens at a specifc time\n@param tokens The total amount of tokens vested\n@param time The time at which to check\n@param start The date vesting started\n@param cliff The cliff period\n@param vested The fully vested date\n@return The amount of non-vested tokens of a specific grant\n transferableTokens\n  |                         _/--------   vestedTokens rect\n  |                       _/\n  |                     _/\n  |                   _/\n  |                 _/\n  |                /\n  |              .|\n  |            .  |\n  |          .    |\n  |        .      |\n  |      .        |\n  |    .          |\n  +===+===========+---------+----------> time\n     Start       Cliff    Vested",
            "id": 4621,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_calculateNonVestedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4573,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14096:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4572,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14096:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4575,
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14120:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4574,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14120:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4577,
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14142:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14142:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4579,
                  "name": "cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14165:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4578,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14165:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4581,
                  "name": "vested",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14188:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14188:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14086:122:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4584,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14255:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14255:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14254:9:6"
            },
            "scope": 4663,
            "src": "14052:989:6",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4646,
              "nodeType": "Block",
              "src": "15109:311:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4630,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4623,
                            "src": "15153:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4631,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4625,
                            "src": "15164:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4629,
                          "name": "_isBalanceIncreaseAllowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4473,
                          "src": "15127:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 4632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15127:45:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4633,
                        "name": "ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3845,
                        "src": "15174:41:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4628,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "15119:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15119:97:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4635,
                  "nodeType": "ExpressionStatement",
                  "src": "15119:97:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4639,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "15350:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4640,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4623,
                            "src": "15356:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4641,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4625,
                            "src": "15367:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4637,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "15331:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "15331:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15331:44:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4643,
                        "name": "ERROR_ASSIGN_TRANSFER_FROM_REVERTED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "15377:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4636,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "15323:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15323:90:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4645,
                  "nodeType": "ExpressionStatement",
                  "src": "15323:90:6"
                }
              ]
            },
            "documentation": null,
            "id": 4647,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_assign",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4623,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "15064:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15064:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4625,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "15083:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4624,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15083:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15063:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15109:0:6"
            },
            "scope": 4663,
            "src": "15047:373:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4661,
              "nodeType": "Block",
              "src": "15486:104:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4657,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "15517:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4658,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4651,
                        "src": "15528:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4654,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3882,
                        "src": "15496:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 4656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "generateTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3362,
                      "src": "15496:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15496:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4660,
                  "nodeType": "ExpressionStatement",
                  "src": "15496:40:6"
                }
              ]
            },
            "documentation": null,
            "id": 4662,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4649,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4662,
                  "src": "15441:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15441:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4651,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4662,
                  "src": "15460:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4650,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15460:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15440:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4653,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15486:0:6"
            },
            "scope": 4663,
            "src": "15426:164:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4664,
        "src": "518:15074:6"
      }
    ],
    "src": "94:15499:6"
  },
  "legacyAST": {
    "absolutePath": "@aragon/apps-token-manager/contracts/TokenManager.sol",
    "exportedSymbols": {
      "TokenManager": [
        4663
      ]
    },
    "id": 4664,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3786,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "94:23:6"
      },
      {
        "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
        "file": "@aragon/os/contracts/apps/AragonApp.sol",
        "id": 3787,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8476,
        "src": "119:49:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/IForwarder.sol",
        "file": "@aragon/os/contracts/common/IForwarder.sol",
        "id": 3788,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8644,
        "src": "169:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/common/Uint256Helpers.sol",
        "file": "@aragon/os/contracts/common/Uint256Helpers.sol",
        "id": 3789,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 8901,
        "src": "222:56:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/token/ERC20.sol",
        "file": "@aragon/os/contracts/lib/token/ERC20.sol",
        "id": 3790,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 11942,
        "src": "280:50:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "file": "@aragon/os/contracts/lib/math/SafeMath.sol",
        "id": 3791,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 11712,
        "src": "331:52:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "file": "@aragon/apps-shared-minime/contracts/ITokenController.sol",
        "id": 3792,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 2678,
        "src": "385:67:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
        "file": "@aragon/apps-shared-minime/contracts/MiniMeToken.sol",
        "id": 3793,
        "nodeType": "ImportDirective",
        "scope": 4664,
        "sourceUnit": 3785,
        "src": "453:62:6",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3794,
              "name": "ITokenController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2677,
              "src": "543:16:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenController_$2677",
                "typeString": "contract ITokenController"
              }
            },
            "id": 3795,
            "nodeType": "InheritanceSpecifier",
            "src": "543:16:6"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3796,
              "name": "IForwarder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8643,
              "src": "561:10:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IForwarder_$8643",
                "typeString": "contract IForwarder"
              }
            },
            "id": 3797,
            "nodeType": "InheritanceSpecifier",
            "src": "561:10:6"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3798,
              "name": "AragonApp",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8475,
              "src": "573:9:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AragonApp_$8475",
                "typeString": "contract AragonApp"
              }
            },
            "id": 3799,
            "nodeType": "InheritanceSpecifier",
            "src": "573:9:6"
          }
        ],
        "contractDependencies": [
          2677,
          7585,
          8347,
          8475,
          8488,
          8621,
          8643,
          8663,
          8761,
          8789,
          8822,
          8869,
          9066,
          9476,
          9503,
          10769
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4663,
        "linearizedBaseContracts": [
          4663,
          8475,
          7585,
          9476,
          10769,
          9503,
          9066,
          8789,
          8621,
          8663,
          8488,
          8822,
          8761,
          8869,
          8347,
          8643,
          2677
        ],
        "name": "TokenManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3802,
            "libraryName": {
              "contractScope": null,
              "id": 3800,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11711,
              "src": "595:8:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$11711",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "589:27:6",
            "typeName": {
              "id": 3801,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "608:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3805,
            "libraryName": {
              "contractScope": null,
              "id": 3803,
              "name": "Uint256Helpers",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8900,
              "src": "627:14:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Uint256Helpers_$8900",
                "typeString": "library Uint256Helpers"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "621:33:6",
            "typeName": {
              "id": 3804,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "646:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 3810,
            "name": "MINT_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "660:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3806,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "660:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d494e545f524f4c45",
                  "id": 3808,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "706:11:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_154c00819833dac601ee5ddded6fda79d9d8b506b911b3dbd54cdb95fe6c3686",
                    "typeString": "literal_string \"MINT_ROLE\""
                  },
                  "value": "MINT_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_154c00819833dac601ee5ddded6fda79d9d8b506b911b3dbd54cdb95fe6c3686",
                    "typeString": "literal_string \"MINT_ROLE\""
                  }
                ],
                "id": 3807,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "696:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3809,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "696:22:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3815,
            "name": "ISSUE_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "724:60:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3811,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "724:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "49535355455f524f4c45",
                  "id": 3813,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "771:12:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_2406f1e99f79cea012fb88c5c36566feaeefee0f4b98d3a376b49310222b53c4",
                    "typeString": "literal_string \"ISSUE_ROLE\""
                  },
                  "value": "ISSUE_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_2406f1e99f79cea012fb88c5c36566feaeefee0f4b98d3a376b49310222b53c4",
                    "typeString": "literal_string \"ISSUE_ROLE\""
                  }
                ],
                "id": 3812,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "761:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3814,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "761:23:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3820,
            "name": "ASSIGN_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "790:62:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3816,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "790:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "41535349474e5f524f4c45",
                  "id": 3818,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "838:13:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_f5a08927c847d7a29dc35e105208dbde5ce951392105d712761cc5d17440e2ff",
                    "typeString": "literal_string \"ASSIGN_ROLE\""
                  },
                  "value": "ASSIGN_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_f5a08927c847d7a29dc35e105208dbde5ce951392105d712761cc5d17440e2ff",
                    "typeString": "literal_string \"ASSIGN_ROLE\""
                  }
                ],
                "id": 3817,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "828:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3819,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "828:24:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3825,
            "name": "REVOKE_VESTINGS_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "858:80:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3821,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "858:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "5245564f4b455f56455354494e47535f524f4c45",
                  "id": 3823,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "915:22:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_95ffc68daedf1eb334cfcd22ee24a5eeb5a8e58aa40679f2ad247a84140f8d6e",
                    "typeString": "literal_string \"REVOKE_VESTINGS_ROLE\""
                  },
                  "value": "REVOKE_VESTINGS_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_95ffc68daedf1eb334cfcd22ee24a5eeb5a8e58aa40679f2ad247a84140f8d6e",
                    "typeString": "literal_string \"REVOKE_VESTINGS_ROLE\""
                  }
                ],
                "id": 3822,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "905:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3824,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "905:33:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3830,
            "name": "BURN_ROLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "944:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3826,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "944:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4255524e5f524f4c45",
                  "id": 3828,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "990:11:6",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_e97b137254058bd94f28d2f3eb79e2d34074ffb488d042e3bc958e0a57d2fa22",
                    "typeString": "literal_string \"BURN_ROLE\""
                  },
                  "value": "BURN_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_e97b137254058bd94f28d2f3eb79e2d34074ffb488d042e3bc958e0a57d2fa22",
                    "typeString": "literal_string \"BURN_ROLE\""
                  }
                ],
                "id": 3827,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 12664,
                "src": "980:9:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                  "typeString": "function () pure returns (bytes32)"
                }
              },
              "id": 3829,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "980:22:6",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3833,
            "name": "MAX_VESTINGS_PER_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1009:53:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3831,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1009:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3530",
              "id": 3832,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1060:2:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50_by_1",
                "typeString": "int_const 50"
              },
              "value": "50"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3836,
            "name": "ERROR_NO_VESTING",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1069:58:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3834,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1069:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f4e4f5f56455354494e47",
              "id": 3835,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1112:15:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e58800e54011b78b0f26f397495d939339b84ffc714b84e5f9f82d7f925b4cd4",
                "typeString": "literal_string \"TM_NO_VESTING\""
              },
              "value": "TM_NO_VESTING"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3839,
            "name": "ERROR_TOKEN_CONTROLLER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1133:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3837,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1133:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f544f4b454e5f434f4e54524f4c4c4552",
              "id": 3838,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1182:21:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_665d12afb25ae855835fa801a495db5c0dc17509fd09ae2f0e71ad1c99c0f7ef",
                "typeString": "literal_string \"TM_TOKEN_CONTROLLER\""
              },
              "value": "TM_TOKEN_CONTROLLER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3842,
            "name": "ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1209:95:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3840,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1209:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f4d494e545f42414c5f494e435f4e4f545f414c4c4f574544",
              "id": 3841,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1275:29:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_2b772fcef80de71598aed5681079e38847580b8f43b3cb49ce6848ff4a8d18b0",
                "typeString": "literal_string \"TM_MINT_BAL_INC_NOT_ALLOWED\""
              },
              "value": "TM_MINT_BAL_INC_NOT_ALLOWED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3845,
            "name": "ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1310:99:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3843,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1310:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f41535349474e5f42414c5f494e435f4e4f545f414c4c4f574544",
              "id": 3844,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1378:31:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e39bacc8832f554ae60d5f440057f8cae429db320282edeb0f64d55040d0c73e",
                "typeString": "literal_string \"TM_ASSIGN_BAL_INC_NOT_ALLOWED\""
              },
              "value": "TM_ASSIGN_BAL_INC_NOT_ALLOWED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3848,
            "name": "ERROR_TOO_MANY_VESTINGS",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1415:72:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3846,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1415:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f544f4f5f4d414e595f56455354494e4753",
              "id": 3847,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1465:22:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d7e86ff8841a8dbc5e617dd3cf057b08b2d9a42c406172be99a5de4b7831cf47",
                "typeString": "literal_string \"TM_TOO_MANY_VESTINGS\""
              },
              "value": "TM_TOO_MANY_VESTINGS"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3851,
            "name": "ERROR_WRONG_CLIFF_DATE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1493:70:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3849,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1493:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f57524f4e475f434c4946465f44415445",
              "id": 3850,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1542:21:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7153794b46b4c93f4f46a4245605d5f0b27f26ef1574b8394431bdaae283cbc0",
                "typeString": "literal_string \"TM_WRONG_CLIFF_DATE\""
              },
              "value": "TM_WRONG_CLIFF_DATE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3854,
            "name": "ERROR_VESTING_NOT_REVOKABLE",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1569:80:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3852,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1569:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f56455354494e475f4e4f545f5245564f4b41424c45",
              "id": 3853,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1623:26:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_95fd8da2a2e85dbbc02186b47870f457257c14a8e30040d7cdfddd0db2ec8f03",
                "typeString": "literal_string \"TM_VESTING_NOT_REVOKABLE\""
              },
              "value": "TM_VESTING_NOT_REVOKABLE"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3857,
            "name": "ERROR_REVOKE_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1655:96:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3855,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1655:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f5245564f4b455f5452414e534645525f46524f4d5f5245564552544544",
              "id": 3856,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1717:34:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_db7e7bea8a3e06053d9ce1a46fec9f3cae3468c59c1d825a9595d219c5fb4ba0",
                "typeString": "literal_string \"TM_REVOKE_TRANSFER_FROM_REVERTED\""
              },
              "value": "TM_REVOKE_TRANSFER_FROM_REVERTED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3860,
            "name": "ERROR_ASSIGN_TRANSFER_FROM_REVERTED",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1757:96:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3858,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1757:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f41535349474e5f5452414e534645525f46524f4d5f5245564552544544",
              "id": 3859,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1819:34:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_942e082c893982fa16c1067985c53ce2706583b575c0148f5e47f0926af1b6b5",
                "typeString": "literal_string \"TM_ASSIGN_TRANSFER_FROM_REVERTED\""
              },
              "value": "TM_ASSIGN_TRANSFER_FROM_REVERTED"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3863,
            "name": "ERROR_CAN_NOT_FORWARD",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1859:68:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3861,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1859:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f43414e5f4e4f545f464f5257415244",
              "id": 3862,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1907:20:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_40dad3e8808c9552adc0ceb63220b80475917fd314fe84bbfed3430b25a7cdaf",
                "typeString": "literal_string \"TM_CAN_NOT_FORWARD\""
              },
              "value": "TM_CAN_NOT_FORWARD"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3866,
            "name": "ERROR_ON_TRANSFER_WRONG_SENDER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "1933:83:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3864,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1933:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f5452414e534645525f57524f4e475f53454e444552",
              "id": 3865,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1990:26:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_98099312d69732738735b3f5e61f3d09c0efb428ca1ff01f9f87228005190af6",
                "typeString": "literal_string \"TM_TRANSFER_WRONG_SENDER\""
              },
              "value": "TM_TRANSFER_WRONG_SENDER"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3869,
            "name": "ERROR_PROXY_PAYMENT_WRONG_SENDER",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2022:90:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory",
              "typeString": "string"
            },
            "typeName": {
              "id": 3867,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "2022:6:6",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "544d5f50524f58595f5041594d454e545f57524f4e475f53454e444552",
              "id": 3868,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2081:31:6",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_76e948c6176a0396c703a3a245eba7e3c22508ebf35bbab992f2014240286b85",
                "typeString": "literal_string \"TM_PROXY_PAYMENT_WRONG_SENDER\""
              },
              "value": "TM_PROXY_PAYMENT_WRONG_SENDER"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "TokenManager.TokenVesting",
            "id": 3880,
            "members": [
              {
                "constant": false,
                "id": 3871,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2149:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3870,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2149:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3873,
                "name": "start",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2173:12:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3872,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2173:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3875,
                "name": "cliff",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2195:12:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3874,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2195:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3877,
                "name": "vesting",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2217:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3876,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2217:6:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3879,
                "name": "revokable",
                "nodeType": "VariableDeclaration",
                "scope": 3880,
                "src": "2241:14:6",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 3878,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2241:4:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "TokenVesting",
            "nodeType": "StructDefinition",
            "scope": 4663,
            "src": "2119:143:6",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3882,
            "name": "token",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2268:24:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
              "typeString": "contract MiniMeToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 3881,
              "name": "MiniMeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3743,
              "src": "2268:11:6",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                "typeString": "contract MiniMeToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3884,
            "name": "maxAccountTokens",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2298:31:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3883,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2298:7:6",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3890,
            "name": "vestings",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2449:72:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
              "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting))"
            },
            "typeName": {
              "id": 3889,
              "keyType": {
                "id": 3885,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2458:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2449:54:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting))"
              },
              "valueType": {
                "id": 3888,
                "keyType": {
                  "id": 3886,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2478:7:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "2469:33:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                  "typeString": "mapping(uint256 => struct TokenManager.TokenVesting)"
                },
                "valueType": {
                  "contractScope": null,
                  "id": 3887,
                  "name": "TokenVesting",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 3880,
                  "src": "2489:12:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                    "typeString": "struct TokenManager.TokenVesting"
                  }
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3894,
            "name": "vestingsLengths",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2527:51:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 3893,
              "keyType": {
                "id": 3891,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2536:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2527:28:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 3892,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2547:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3898,
            "name": "everHeld",
            "nodeType": "VariableDeclaration",
            "scope": 4663,
            "src": "2584:41:6",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 3897,
              "keyType": {
                "id": 3895,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2593:7:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2584:25:6",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 3896,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2604:4:6",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3906,
            "name": "NewVesting",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3905,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3900,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2750:24:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2750:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3902,
                  "indexed": false,
                  "name": "vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2776:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3901,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2776:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3904,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3906,
                  "src": "2795:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2749:61:6"
            },
            "src": "2733:78:6"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3914,
            "name": "RevokeVesting",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3908,
                  "indexed": true,
                  "name": "receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2836:24:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3907,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2836:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3910,
                  "indexed": false,
                  "name": "vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2862:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3912,
                  "indexed": false,
                  "name": "nonVestedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3914,
                  "src": "2881:23:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3911,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2881:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2835:70:6"
            },
            "src": "2816:90:6"
          },
          {
            "body": {
              "id": 3930,
              "nodeType": "Block",
              "src": "2972:197:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3921,
                          "name": "_vestingId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3918,
                          "src": "3095:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 3922,
                            "name": "vestingsLengths",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3894,
                            "src": "3108:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 3924,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 3923,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3916,
                            "src": "3124:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3108:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3095:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3926,
                        "name": "ERROR_NO_VESTING",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3836,
                        "src": "3134:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3920,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3087:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3087:64:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3928,
                  "nodeType": "ExpressionStatement",
                  "src": "3087:64:6"
                },
                {
                  "id": 3929,
                  "nodeType": "PlaceholderStatement",
                  "src": "3161:1:6"
                }
              ]
            },
            "documentation": null,
            "id": 3931,
            "name": "vestingExists",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3919,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3916,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 3931,
                  "src": "2935:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3915,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2935:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3918,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 3931,
                  "src": "2952:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3917,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2952:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2934:37:6"
            },
            "src": "2912:257:6",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3985,
              "nodeType": "Block",
              "src": "3907:338:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 3942,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8746,
                      "src": "3917:11:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 3943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3917:13:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3944,
                  "nodeType": "ExpressionStatement",
                  "src": "3917:13:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3946,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3933,
                              "src": "3949:6:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 3947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "controller",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2693,
                            "src": "3949:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 3948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3949:19:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3950,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12805,
                              "src": "3980:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TokenManager_$4663",
                                "typeString": "contract TokenManager"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_TokenManager_$4663",
                                "typeString": "contract TokenManager"
                              }
                            ],
                            "id": 3949,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3972:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 3951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3972:13:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3949:36:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3953,
                        "name": "ERROR_TOKEN_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3839,
                        "src": "3987:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 3945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "3941:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3941:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3955,
                  "nodeType": "ExpressionStatement",
                  "src": "3941:69:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3956,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3882,
                      "src": "4021:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3957,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3933,
                      "src": "4029:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                        "typeString": "contract MiniMeToken"
                      }
                    },
                    "src": "4021:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "id": 3959,
                  "nodeType": "ExpressionStatement",
                  "src": "4021:14:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3960,
                      "name": "maxAccountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3884,
                      "src": "4045:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3961,
                          "name": "_maxAccountTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3937,
                          "src": "4064:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4085:1:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4064:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 3968,
                        "name": "_maxAccountTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3937,
                        "src": "4103:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "4064:56:6",
                      "trueExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "-",
                            "prefix": true,
                            "src": "4097:2:6",
                            "subExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 3965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4098:1:6",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_-1_by_1",
                              "typeString": "int_const -1"
                            }
                          ],
                          "id": 3964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4089:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 3967,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4089:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4045:75:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3971,
                  "nodeType": "ExpressionStatement",
                  "src": "4045:75:6"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3972,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "4135:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        },
                        "id": 3973,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "transfersEnabled",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2765,
                        "src": "4135:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                          "typeString": "function () view external returns (bool)"
                        }
                      },
                      "id": 3974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4135:24:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3975,
                      "name": "_transferable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3935,
                      "src": "4163:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4135:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3984,
                  "nodeType": "IfStatement",
                  "src": "4131:108:6",
                  "trueBody": {
                    "id": 3983,
                    "nodeType": "Block",
                    "src": "4178:61:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3980,
                              "name": "_transferable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3935,
                              "src": "4214:13:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3977,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "4192:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 3979,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "enableTransfers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3433,
                            "src": "4192:21:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bool_$returns$__$",
                              "typeString": "function (bool) external"
                            }
                          },
                          "id": 3981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4192:36:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3982,
                        "nodeType": "ExpressionStatement",
                        "src": "4192:36:6"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Initialize Token Manager for `_token.symbol(): string`, whose tokens are `transferable ? 'not' : ''` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''`\n@param _token MiniMeToken address for the managed token (Token Manager instance must be already set as the token controller)\n@param _transferable whether the token can be transferred by holders\n@param _maxAccountTokens Maximum amount of tokens an account can have (0 for infinite tokens)",
            "id": 3986,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 3940,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3939,
                  "name": "onlyInit",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8693,
                  "src": "3894:8:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3894:8:6"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3933,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3781:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                    "typeString": "contract MiniMeToken"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3932,
                    "name": "MiniMeToken",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3743,
                    "src": "3781:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                      "typeString": "contract MiniMeToken"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3935,
                  "name": "_transferable",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3809:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3934,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3809:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3937,
                  "name": "_maxAccountTokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 3986,
                  "src": "3837:25:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3936,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3837:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3771:97:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 3941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3907:0:6"
            },
            "scope": 4663,
            "src": "3752:493:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4013,
              "nodeType": "Block",
              "src": "4564:147:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4002,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3988,
                            "src": "4608:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4003,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3990,
                            "src": "4619:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4001,
                          "name": "_isBalanceIncreaseAllowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4473,
                          "src": "4582:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 4004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4582:45:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4005,
                        "name": "ERROR_MINT_BALANCE_INCREASE_NOT_ALLOWED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3842,
                        "src": "4629:39:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4000,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "4574:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4574:95:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4007,
                  "nodeType": "ExpressionStatement",
                  "src": "4574:95:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4009,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3988,
                        "src": "4685:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4010,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3990,
                        "src": "4696:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4008,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4662,
                      "src": "4679:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4679:25:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4012,
                  "nodeType": "ExpressionStatement",
                  "src": "4679:25:6"
                }
              ]
            },
            "documentation": "@notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for `_receiver`\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens minted",
            "id": 4014,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 3993,
                    "name": "MINT_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3810,
                    "src": "4528:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3995,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3988,
                        "src": "4543:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3996,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3990,
                        "src": "4554:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3994,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "4539:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 3997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4539:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 3998,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3992,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "4522:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4522:41:6"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3991,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3988,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4014,
                  "src": "4477:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3987,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4477:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3990,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4014,
                  "src": "4496:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3989,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4476:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 3999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4564:0:6"
            },
            "scope": 4663,
            "src": "4463:248:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4032,
              "nodeType": "Block",
              "src": "4952:46:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4027,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "4976:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4968:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4028,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4968:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4029,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "4983:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4025,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4662,
                      "src": "4962:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4962:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4031,
                  "nodeType": "ExpressionStatement",
                  "src": "4962:29:6"
                }
              ]
            },
            "documentation": "@notice Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for the Token Manager\n@param _amount Number of tokens minted",
            "id": 4033,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4019,
                    "name": "ISSUE_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3815,
                    "src": "4926:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4021,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "4942:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4020,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7412,
                      "src": "4938:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4938:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4018,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "4920:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4920:31:6"
              }
            ],
            "name": "issue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4016,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4033,
                  "src": "4894:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4015,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4894:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4893:17:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4952:0:6"
            },
            "scope": 4663,
            "src": "4879:119:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4052,
              "nodeType": "Block",
              "src": "5361:44:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4048,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4035,
                        "src": "5379:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4049,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4037,
                        "src": "5390:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4047,
                      "name": "_assign",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4647,
                      "src": "5371:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5371:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4051,
                  "nodeType": "ExpressionStatement",
                  "src": "5371:27:6"
                }
              ]
            },
            "documentation": "@notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens transferred",
            "id": 4053,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4040,
                    "name": "ASSIGN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3820,
                    "src": "5323:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4035,
                        "src": "5340:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4043,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4037,
                        "src": "5351:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4041,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "5336:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5336:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4045,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4039,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "5317:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5317:43:6"
              }
            ],
            "name": "assign",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4035,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "5272:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4034,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5272:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4037,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4053,
                  "src": "5291:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4036,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5291:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5271:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4046,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5361:0:6"
            },
            "scope": 4663,
            "src": "5256:149:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4074,
              "nodeType": "Block",
              "src": "5720:133:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4070,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4055,
                        "src": "5829:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4071,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4057,
                        "src": "5838:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4067,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3882,
                        "src": "5809:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 4069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "destroyTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3421,
                      "src": "5809:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5809:37:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4073,
                  "nodeType": "ExpressionStatement",
                  "src": "5809:37:6"
                }
              ]
            },
            "documentation": "@notice Burn `@tokenAmount(self.token(): address, _amount, false)` tokens from `_holder`\n@param _holder Holder of tokens being burned\n@param _amount Number of tokens being burned",
            "id": 4075,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4060,
                    "name": "BURN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3830,
                    "src": "5686:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4062,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4055,
                        "src": "5701:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4063,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4057,
                        "src": "5710:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4061,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "5697:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5697:21:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4065,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4059,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "5680:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5680:39:6"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4055,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4075,
                  "src": "5637:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5637:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4057,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4075,
                  "src": "5654:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4056,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5654:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5636:34:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5720:0:6"
            },
            "scope": 4663,
            "src": "5623:230:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4153,
              "nodeType": "Block",
              "src": "6879:537:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4100,
                            "name": "vestingsLengths",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3894,
                            "src": "6897:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4102,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4101,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4077,
                            "src": "6913:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6897:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4103,
                          "name": "MAX_VESTINGS_PER_ADDRESS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3833,
                          "src": "6926:24:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6897:53:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4105,
                        "name": "ERROR_TOO_MANY_VESTINGS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3848,
                        "src": "6952:23:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4099,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6889:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6889:87:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4107,
                  "nodeType": "ExpressionStatement",
                  "src": "6889:87:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4109,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4081,
                            "src": "6995:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4110,
                            "name": "_cliff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4083,
                            "src": "7005:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6995:16:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 4114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4112,
                            "name": "_cliff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4083,
                            "src": "7015:6:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4113,
                            "name": "_vested",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4085,
                            "src": "7025:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "7015:17:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6995:37:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4116,
                        "name": "ERROR_WRONG_CLIFF_DATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3851,
                        "src": "7034:22:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4108,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "6987:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6987:70:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4118,
                  "nodeType": "ExpressionStatement",
                  "src": "6987:70:6"
                },
                {
                  "assignments": [
                    4120
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4120,
                      "name": "vestingId",
                      "nodeType": "VariableDeclaration",
                      "scope": 4154,
                      "src": "7068:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4119,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7068:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4125,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 4124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "++",
                    "prefix": false,
                    "src": "7088:28:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4121,
                        "name": "vestingsLengths",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3894,
                        "src": "7088:15:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4123,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4122,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7104:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7088:26:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7068:48:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4126,
                          "name": "vestings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3890,
                          "src": "7126:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                            "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                          }
                        },
                        "id": 4129,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4127,
                          "name": "_receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4077,
                          "src": "7135:9:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7126:19:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                          "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                        }
                      },
                      "id": 4130,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4128,
                        "name": "vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4120,
                        "src": "7146:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7126:30:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                        "typeString": "struct TokenManager.TokenVesting storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4132,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4079,
                          "src": "7185:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4133,
                          "name": "_start",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4081,
                          "src": "7206:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4134,
                          "name": "_cliff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4083,
                          "src": "7226:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4135,
                          "name": "_vested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4085,
                          "src": "7246:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4136,
                          "name": "_revokable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4087,
                          "src": "7267:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 4131,
                        "name": "TokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3880,
                        "src": "7159:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_TokenVesting_$3880_storage_ptr_$",
                          "typeString": "type(struct TokenManager.TokenVesting storage pointer)"
                        }
                      },
                      "id": 4137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7159:128:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_memory",
                        "typeString": "struct TokenManager.TokenVesting memory"
                      }
                    },
                    "src": "7126:161:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "id": 4139,
                  "nodeType": "ExpressionStatement",
                  "src": "7126:161:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4141,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7306:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4142,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "7317:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4140,
                      "name": "_assign",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4647,
                      "src": "7298:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7298:27:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4144,
                  "nodeType": "ExpressionStatement",
                  "src": "7298:27:6"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4146,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "7352:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4147,
                        "name": "vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4120,
                        "src": "7363:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4148,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "7374:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4145,
                      "name": "NewVesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3906,
                      "src": "7341:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7341:41:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4150,
                  "nodeType": "EmitStatement",
                  "src": "7336:46:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4151,
                    "name": "vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4120,
                    "src": "7400:9:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4098,
                  "id": 4152,
                  "nodeType": "Return",
                  "src": "7393:16:6"
                }
              ]
            },
            "documentation": "@notice Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings with a `_revokable : 'revokable' : ''` vesting starting at `@formatDate(_start)`, cliff at `@formatDate(_cliff)` (first portion of tokens transferable), and completed vesting at `@formatDate(_vested)` (all tokens transferable)\n@param _receiver The address receiving the tokens\n@param _amount Number of tokens vested\n@param _start Date the vesting calculations start\n@param _cliff Date when the initial portion of tokens are transferable\n@param _vested Date when all tokens are transferable\n@param _revokable Whether the vesting can be revoked by the Token Manager",
            "id": 4154,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4090,
                    "name": "ASSIGN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3820,
                    "src": "6811:11:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4092,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4077,
                        "src": "6828:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4093,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "6839:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4091,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7310,
                      "src": "6824:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address,uint256) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6824:23:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4095,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4089,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "6805:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6805:43:6"
              }
            ],
            "name": "assignVested",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4077,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6636:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4076,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6636:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4079,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6663:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4081,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6688:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4080,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6688:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4083,
                  "name": "_cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6711:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4082,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4085,
                  "name": "_vested",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6734:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4084,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6734:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4087,
                  "name": "_revokable",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6758:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4086,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6758:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6626:153:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4097,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4154,
                  "src": "6866:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6866:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6865:9:6"
            },
            "scope": 4663,
            "src": "6605:811:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4225,
              "nodeType": "Block",
              "src": "7820:746:6",
              "statements": [
                {
                  "assignments": [
                    4172
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4172,
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "scope": 4226,
                      "src": "7830:22:6",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                        "typeString": "struct TokenManager.TokenVesting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4171,
                        "name": "TokenVesting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3880,
                        "src": "7830:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4178,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4173,
                        "name": "vestings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3890,
                        "src": "7855:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                        }
                      },
                      "id": 4175,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4174,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "7864:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7855:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                        "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                      }
                    },
                    "id": 4177,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4176,
                      "name": "_vestingId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4158,
                      "src": "7873:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7855:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7830:54:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4180,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "7902:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "revokable",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3879,
                        "src": "7902:11:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4182,
                        "name": "ERROR_VESTING_NOT_REVOKABLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3854,
                        "src": "7915:27:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4179,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "7894:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7894:49:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4184,
                  "nodeType": "ExpressionStatement",
                  "src": "7894:49:6"
                },
                {
                  "assignments": [
                    4186
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4186,
                      "name": "nonVested",
                      "nodeType": "VariableDeclaration",
                      "scope": 4226,
                      "src": "7954:17:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4185,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7954:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4199,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4188,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8013:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4189,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3871,
                        "src": "8013:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 4190,
                          "name": "getTimestamp64",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8868,
                          "src": "8035:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$",
                            "typeString": "function () view returns (uint64)"
                          }
                        },
                        "id": 4191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8035:16:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4192,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8065:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4193,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "start",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3873,
                        "src": "8065:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4194,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8086:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4195,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "cliff",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3875,
                        "src": "8086:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4196,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4172,
                          "src": "8107:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                            "typeString": "struct TokenManager.TokenVesting storage pointer"
                          }
                        },
                        "id": 4197,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vesting",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3877,
                        "src": "8107:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4187,
                      "name": "_calculateNonVestedTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4621,
                      "src": "7974:25:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7974:152:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7954:172:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "8225:36:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4200,
                          "name": "vestings",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3890,
                          "src": "8232:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                            "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                          }
                        },
                        "id": 4202,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 4201,
                          "name": "_holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4156,
                          "src": "8241:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8232:17:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                          "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                        }
                      },
                      "id": 4204,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4203,
                        "name": "_vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "8250:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8232:29:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                        "typeString": "struct TokenManager.TokenVesting storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4206,
                  "nodeType": "ExpressionStatement",
                  "src": "8225:36:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4210,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4156,
                            "src": "8426:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4212,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12805,
                                "src": "8443:4:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_TokenManager_$4663",
                                  "typeString": "contract TokenManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_TokenManager_$4663",
                                  "typeString": "contract TokenManager"
                                }
                              ],
                              "id": 4211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8435:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8435:13:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4214,
                            "name": "nonVested",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4186,
                            "src": "8450:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4208,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "8407:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "8407:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8407:53:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4216,
                        "name": "ERROR_REVOKE_TRANSFER_FROM_REVERTED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3857,
                        "src": "8462:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8399:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8399:99:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4218,
                  "nodeType": "ExpressionStatement",
                  "src": "8399:99:6"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4220,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "8528:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4221,
                        "name": "_vestingId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4158,
                        "src": "8537:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4222,
                        "name": "nonVested",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4186,
                        "src": "8549:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4219,
                      "name": "RevokeVesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3914,
                      "src": "8514:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8514:45:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4224,
                  "nodeType": "EmitStatement",
                  "src": "8509:50:6"
                }
              ]
            },
            "documentation": "@notice Revoke vesting #`_vestingId` from `_holder`, returning unvested tokens to the Token Manager\n@param _holder Address whose vesting to revoke\n@param _vestingId Numeric id of the vesting",
            "id": 4226,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4161,
                    "name": "REVOKE_VESTINGS_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3825,
                    "src": "7737:20:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4163,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4156,
                        "src": "7763:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4162,
                      "name": "arr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7175,
                        7190,
                        7210,
                        7225,
                        7245,
                        7266,
                        7290,
                        7310,
                        7339,
                        7364,
                        7389,
                        7412,
                        7443,
                        7482,
                        7529,
                        7584
                      ],
                      "referencedDeclaration": 7225,
                      "src": "7759:3:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                        "typeString": "function (address) pure returns (uint256[] memory)"
                      }
                    },
                    "id": 4164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7759:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  }
                ],
                "id": 4165,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4160,
                  "name": "authP",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8406,
                  "src": "7731:5:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                    "typeString": "modifier (bytes32,uint256[] memory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7731:41:6"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4167,
                    "name": "_holder",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4156,
                    "src": "7795:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 4168,
                    "name": "_vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4158,
                    "src": "7804:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4169,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4166,
                  "name": "vestingExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3931,
                  "src": "7781:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_uint256_$",
                    "typeString": "modifier (address,uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7781:34:6"
              }
            ],
            "name": "revokeVesting",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4159,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4156,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "7669:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4155,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7669:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4158,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4226,
                  "src": "7686:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7686:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7668:37:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7820:0:6"
            },
            "scope": 4663,
            "src": "7646:920:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4271,
              "nodeType": "Block",
              "src": "8809:464:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4233,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12670,
                              "src": "8838:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "8838:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4235,
                            "name": "_evmScript",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4228,
                            "src": "8850:10:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 4232,
                          "name": "canForward",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            4300
                          ],
                          "referencedDeclaration": 4300,
                          "src": "8827:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 4236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8827:34:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4237,
                        "name": "ERROR_CAN_NOT_FORWARD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3863,
                        "src": "8863:21:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4231,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "8819:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8819:66:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4239,
                  "nodeType": "ExpressionStatement",
                  "src": "8819:66:6"
                },
                {
                  "assignments": [
                    4241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4241,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 4272,
                      "src": "8895:18:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4240,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8895:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4246,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8926:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 4243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "8916:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 4242,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8920:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 4245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8916:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8895:33:6"
                },
                {
                  "assignments": [
                    4250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4250,
                      "name": "blacklist",
                      "nodeType": "VariableDeclaration",
                      "scope": 4272,
                      "src": "9132:26:6",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9132:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4249,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "9132:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4256,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 4254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9175:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 4253,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "9161:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 4251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9165:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4252,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "9165:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 4255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9161:16:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9132:45:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4257,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "9187:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 4259,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9197:1:6",
                        "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": "9187:12:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4261,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "9210:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        ],
                        "id": 4260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9202:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9202:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9187:29:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4264,
                  "nodeType": "ExpressionStatement",
                  "src": "9187:29:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4266,
                        "name": "_evmScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4228,
                        "src": "9237:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4267,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4241,
                        "src": "9249:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4268,
                        "name": "blacklist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4250,
                        "src": "9256:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 4265,
                      "name": "runScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9432,
                      "src": "9227:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,bytes memory,address[] memory) returns (bytes memory)"
                      }
                    },
                    "id": 4269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9227:39:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 4270,
                  "nodeType": "ExpressionStatement",
                  "src": "9227:39:6"
                }
              ]
            },
            "documentation": "@notice Execute desired action as a token holder\n@dev IForwarder interface conformance. Forwards any token holder action.\n@param _evmScript Script being executed",
            "id": 4272,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "forward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4228,
                  "name": "_evmScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 4272,
                  "src": "8784:16:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4227,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8784:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8783:18:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4230,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8809:0:6"
            },
            "scope": 4663,
            "src": "8767:506:6",
            "stateMutability": "nonpayable",
            "superFunction": 8642,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4279,
              "nodeType": "Block",
              "src": "9329:28:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9346:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4276,
                  "id": 4278,
                  "nodeType": "Return",
                  "src": "9339:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 4280,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "isForwarder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4273,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9299:2:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4275,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4280,
                  "src": "9323:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4274,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9323:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9322:6:6"
            },
            "scope": 4663,
            "src": "9279:78:6",
            "stateMutability": "pure",
            "superFunction": 8628,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4299,
              "nodeType": "Block",
              "src": "9434:72:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4289,
                        "name": "hasInitialized",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8733,
                        "src": "9451:14:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 4290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9451:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4293,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4282,
                            "src": "9487:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4291,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "9471:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3014,
                          "src": "9471:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 4294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9471:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9498:1:6",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9471:28:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9451:48:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4288,
                  "id": 4298,
                  "nodeType": "Return",
                  "src": "9444:55:6"
                }
              ]
            },
            "documentation": null,
            "id": 4300,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "canForward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4282,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9383:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9383:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4284,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9400:5:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4283,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9400:5:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9382:24:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4287,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4300,
                  "src": "9428:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4286,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9428:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9427:6:6"
            },
            "scope": 4663,
            "src": "9363:143:6",
            "stateMutability": "view",
            "superFunction": 8637,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4354,
              "nodeType": "Block",
              "src": "9835:279:6",
              "statements": [
                {
                  "assignments": [
                    4322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4322,
                      "name": "tokenVesting",
                      "nodeType": "VariableDeclaration",
                      "scope": 4355,
                      "src": "9845:33:6",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                        "typeString": "struct TokenManager.TokenVesting"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4321,
                        "name": "TokenVesting",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3880,
                        "src": "9845:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4328,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 4323,
                        "name": "vestings",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3890,
                        "src": "9881:8:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                          "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                        }
                      },
                      "id": 4325,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4324,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4302,
                        "src": "9890:10:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9881:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                        "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                      }
                    },
                    "id": 4327,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4326,
                      "name": "_vestingId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4304,
                      "src": "9902:10:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9881:32:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                      "typeString": "struct TokenManager.TokenVesting storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9845:68:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4329,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4311,
                      "src": "9923:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4330,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "9932:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4331,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3871,
                      "src": "9932:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9923:28:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4333,
                  "nodeType": "ExpressionStatement",
                  "src": "9923:28:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4334,
                      "name": "start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4313,
                      "src": "9961:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4335,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "9969:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4336,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3873,
                      "src": "9969:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9961:26:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4338,
                  "nodeType": "ExpressionStatement",
                  "src": "9961:26:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4339,
                      "name": "cliff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4315,
                      "src": "9997:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4340,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10005:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4341,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "cliff",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3875,
                      "src": "10005:18:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "9997:26:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4343,
                  "nodeType": "ExpressionStatement",
                  "src": "9997:26:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4344,
                      "name": "vesting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4317,
                      "src": "10033:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4345,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10043:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4346,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "vesting",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3877,
                      "src": "10043:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "10033:30:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 4348,
                  "nodeType": "ExpressionStatement",
                  "src": "10033:30:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4349,
                      "name": "revokable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4319,
                      "src": "10073:9:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4350,
                        "name": "tokenVesting",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4322,
                        "src": "10085:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                          "typeString": "struct TokenManager.TokenVesting storage pointer"
                        }
                      },
                      "id": 4351,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokable",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3879,
                      "src": "10085:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10073:34:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4353,
                  "nodeType": "ExpressionStatement",
                  "src": "10073:34:6"
                }
              ]
            },
            "documentation": null,
            "id": 4355,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4307,
                    "name": "_recipient",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4302,
                    "src": "9644:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 4308,
                    "name": "_vestingId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4304,
                    "src": "9656:10:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 4309,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4306,
                  "name": "vestingExists",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3931,
                  "src": "9630:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$_t_uint256_$",
                    "typeString": "modifier (address,uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9630:37:6"
              }
            ],
            "name": "getVesting",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4302,
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9541:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4301,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9541:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4304,
                  "name": "_vestingId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9569:18:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4303,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9569:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9531:62:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4311,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9698:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4310,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9698:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4313,
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9726:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4312,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9726:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4315,
                  "name": "cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9752:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4314,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9752:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4317,
                  "name": "vesting",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9778:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4316,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "9778:6:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4319,
                  "name": "revokable",
                  "nodeType": "VariableDeclaration",
                  "scope": 4355,
                  "src": "9806:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4318,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9806:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9684:146:6"
            },
            "scope": 4663,
            "src": "9512:602:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4418,
              "nodeType": "Block",
              "src": "10608:436:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "10626:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10626:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4372,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "10648:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            ],
                            "id": 4371,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10640:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10640:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10626:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4375,
                        "name": "ERROR_ON_TRANSFER_WRONG_SENDER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3866,
                        "src": "10656:30:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "10618:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10618:69:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4377,
                  "nodeType": "ExpressionStatement",
                  "src": "10618:69:6"
                },
                {
                  "assignments": [
                    4379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4379,
                      "name": "includesTokenManager",
                      "nodeType": "VariableDeclaration",
                      "scope": 4419,
                      "src": "10698:25:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4378,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "10698:4:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4391,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4380,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4357,
                        "src": "10726:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4382,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "10743:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10735:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10735:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10726:22:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4385,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4359,
                        "src": "10752:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4387,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "10767:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          ],
                          "id": 4386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10759:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10759:13:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "10752:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10726:46:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10698:74:6"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "10787:21:6",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 4392,
                      "name": "includesTokenManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4379,
                      "src": "10788:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4415,
                  "nodeType": "IfStatement",
                  "src": "10783:233:6",
                  "trueBody": {
                    "id": 4414,
                    "nodeType": "Block",
                    "src": "10810:206:6",
                    "statements": [
                      {
                        "assignments": [
                          4395
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4395,
                            "name": "toCanReceive",
                            "nodeType": "VariableDeclaration",
                            "scope": 4419,
                            "src": "10824:17:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4394,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "10824:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4400,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4397,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4359,
                              "src": "10870:3:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4398,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4361,
                              "src": "10875:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4396,
                            "name": "_isBalanceIncreaseAllowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4473,
                            "src": "10844:25:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) view returns (bool)"
                            }
                          },
                          "id": 4399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10844:39:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10824:59:6"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4402,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "10901:13:6",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 4401,
                              "name": "toCanReceive",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4395,
                              "src": "10902:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4404,
                                  "name": "_from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4357,
                                  "src": "10938:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4405,
                                  "name": "now",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12672,
                                  "src": "10945:3:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4403,
                                "name": "transferableBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4557,
                                "src": "10918:19:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (address,uint256) view returns (uint256)"
                                }
                              },
                              "id": 4406,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10918:31:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4407,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4361,
                              "src": "10952:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10918:41:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10901:58:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4413,
                        "nodeType": "IfStatement",
                        "src": "10897:109:6",
                        "trueBody": {
                          "id": 4412,
                          "nodeType": "Block",
                          "src": "10961:45:6",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 4410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10986:5:6",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 4367,
                              "id": 4411,
                              "nodeType": "Return",
                              "src": "10979:12:6"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11033:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4367,
                  "id": 4417,
                  "nodeType": "Return",
                  "src": "11026:11:6"
                }
              ]
            },
            "documentation": null,
            "id": 4419,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 4364,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4363,
                  "name": "isInitialized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8703,
                  "src": "10579:13:6",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10579:13:6"
              }
            ],
            "name": "onTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4357,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10530:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10530:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4359,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10545:11:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10545:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4361,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10558:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4360,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10558:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10529:42:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4366,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4419,
                  "src": "10602:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4365,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10602:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10601:6:6"
            },
            "scope": 4663,
            "src": "10510:534:6",
            "stateMutability": "nonpayable",
            "superFunction": 2665,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4438,
              "nodeType": "Block",
              "src": "11262:361:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4427,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12670,
                            "src": "11531:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11531:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4430,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "11553:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            ],
                            "id": 4429,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11545:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11545:14:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "11531:28:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4433,
                        "name": "ERROR_PROXY_PAYMENT_WRONG_SENDER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3869,
                        "src": "11561:32:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4426,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "11523:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11523:71:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4435,
                  "nodeType": "ExpressionStatement",
                  "src": "11523:71:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 4436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11611:5:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 4425,
                  "id": 4437,
                  "nodeType": "Return",
                  "src": "11604:12:6"
                }
              ]
            },
            "documentation": "@notice Called when ether is sent to the MiniMe Token contract\n@return True if the ether is accepted, false for it to throw",
            "id": 4439,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "proxyPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4421,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4439,
                  "src": "11223:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4420,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11223:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11222:9:6"
            },
            "payable": true,
            "returnParameters": {
              "id": 4425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4424,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4439,
                  "src": "11256:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4423,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11256:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11255:6:6"
            },
            "scope": 4663,
            "src": "11201:422:6",
            "stateMutability": "payable",
            "superFunction": 2654,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4452,
              "nodeType": "Block",
              "src": "11876:28:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "11893:4:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 4449,
                  "id": 4451,
                  "nodeType": "Return",
                  "src": "11886:11:6"
                }
              ]
            },
            "documentation": "@dev Notifies the controller about an approval allowing the controller to react if desired\n@return False if the controller does not authorize the approval",
            "id": 4453,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "onApprove",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4441,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11830:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4440,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11830:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4443,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11839:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4442,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11839:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11848:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4444,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11848:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11829:24:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4448,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "11870:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4447,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11870:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11869:6:6"
            },
            "scope": 4663,
            "src": "11811:93:6",
            "stateMutability": "nonpayable",
            "superFunction": 2676,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4472,
              "nodeType": "Block",
              "src": "12004:80:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4467,
                          "name": "_inc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4457,
                          "src": "12052:4:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4464,
                              "name": "_receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4455,
                              "src": "12037:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4462,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3882,
                              "src": "12021:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                                "typeString": "contract MiniMeToken"
                              }
                            },
                            "id": 4463,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3014,
                            "src": "12021:15:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 4465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12021:26:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11689,
                        "src": "12021:30:6",
                        "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": 4468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12021:36:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4469,
                      "name": "maxAccountTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3884,
                      "src": "12061:16:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12021:56:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4461,
                  "id": 4471,
                  "nodeType": "Return",
                  "src": "12014:63:6"
                }
              ]
            },
            "documentation": null,
            "id": 4473,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_isBalanceIncreaseAllowed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4455,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11945:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11945:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4457,
                  "name": "_inc",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11964:9:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4456,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11964:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11944:30:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4460,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4473,
                  "src": "11998:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4459,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11998:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11997:6:6"
            },
            "scope": 4663,
            "src": "11910:174:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4485,
              "nodeType": "Block",
              "src": "12165:57:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4481,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4475,
                        "src": "12202:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4482,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12672,
                        "src": "12211:3:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4480,
                      "name": "transferableBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4557,
                      "src": "12182:19:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view returns (uint256)"
                      }
                    },
                    "id": 4483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12182:33:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4479,
                  "id": 4484,
                  "nodeType": "Return",
                  "src": "12175:40:6"
                }
              ]
            },
            "documentation": null,
            "id": 4486,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "spendableBalanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4475,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4486,
                  "src": "12118:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12118:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12117:17:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4478,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4486,
                  "src": "12156:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12156:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12155:9:6"
            },
            "scope": 4663,
            "src": "12090:132:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4556,
              "nodeType": "Block",
              "src": "12319:590:6",
              "statements": [
                {
                  "assignments": [
                    4496
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4496,
                      "name": "vestingsCount",
                      "nodeType": "VariableDeclaration",
                      "scope": 4557,
                      "src": "12329:21:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4495,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12329:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4500,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4497,
                      "name": "vestingsLengths",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3894,
                      "src": "12353:15:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 4499,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4498,
                      "name": "_holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4488,
                      "src": "12369:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12353:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12329:48:6"
                },
                {
                  "assignments": [
                    4502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4502,
                      "name": "totalNonTransferable",
                      "nodeType": "VariableDeclaration",
                      "scope": 4557,
                      "src": "12387:28:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4501,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12387:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4504,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12418:1:6",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12387:32:6"
                },
                {
                  "body": {
                    "id": 4546,
                    "nodeType": "Block",
                    "src": "12474:361:6",
                    "statements": [
                      {
                        "assignments": [
                          4516
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4516,
                            "name": "v",
                            "nodeType": "VariableDeclaration",
                            "scope": 4557,
                            "src": "12488:22:6",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                              "typeString": "struct TokenManager.TokenVesting"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4515,
                              "name": "TokenVesting",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 3880,
                              "src": "12488:12:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                "typeString": "struct TokenManager.TokenVesting"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4522,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4517,
                              "name": "vestings",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3890,
                              "src": "12513:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$_$",
                                "typeString": "mapping(address => mapping(uint256 => struct TokenManager.TokenVesting storage ref))"
                              }
                            },
                            "id": 4519,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4518,
                              "name": "_holder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4488,
                              "src": "12522:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12513:17:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenVesting_$3880_storage_$",
                              "typeString": "mapping(uint256 => struct TokenManager.TokenVesting storage ref)"
                            }
                          },
                          "id": 4521,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4520,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4506,
                            "src": "12531:1:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12513:20:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenVesting_$3880_storage",
                            "typeString": "struct TokenManager.TokenVesting storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12488:45:6"
                      },
                      {
                        "assignments": [
                          4524
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4524,
                            "name": "nonTransferable",
                            "nodeType": "VariableDeclaration",
                            "scope": 4557,
                            "src": "12547:20:6",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4523,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "12547:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4538,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4526,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12613:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4527,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3871,
                              "src": "12613:8:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4528,
                                  "name": "_time",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4490,
                                  "src": "12639:5:6",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4529,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint64",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8899,
                                "src": "12639:14:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint64)"
                                }
                              },
                              "id": 4530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12639:16:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4531,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12673:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4532,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "start",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3873,
                              "src": "12673:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4533,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12698:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4534,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "cliff",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3875,
                              "src": "12698:7:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4535,
                                "name": "v",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4516,
                                "src": "12723:1:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenVesting_$3880_storage_ptr",
                                  "typeString": "struct TokenManager.TokenVesting storage pointer"
                                }
                              },
                              "id": 4536,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "vesting",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3877,
                              "src": "12723:9:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 4525,
                            "name": "_calculateNonVestedTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4621,
                            "src": "12570:25:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12570:176:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12547:199:6"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4539,
                            "name": "totalNonTransferable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4502,
                            "src": "12760:20:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4542,
                                "name": "nonTransferable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4524,
                                "src": "12808:15:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4540,
                                "name": "totalNonTransferable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4502,
                                "src": "12783:20:6",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11689,
                              "src": "12783:24:6",
                              "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": 4543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12783:41:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12760:64:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4545,
                        "nodeType": "ExpressionStatement",
                        "src": "12760:64:6"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4509,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4506,
                      "src": "12450:1:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4510,
                      "name": "vestingsCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4496,
                      "src": "12454:13:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12450:17:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4547,
                  "initializationExpression": {
                    "assignments": [
                      4506
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4506,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4557,
                        "src": "12435:9:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4505,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12435:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4508,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12447:1:6",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "12435:13:6"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4513,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "12469:3:6",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4512,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4506,
                        "src": "12469:1:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4514,
                    "nodeType": "ExpressionStatement",
                    "src": "12469:3:6"
                  },
                  "nodeType": "ForStatement",
                  "src": "12430:405:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4553,
                        "name": "totalNonTransferable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4502,
                        "src": "12881:20:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4550,
                            "name": "_holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4488,
                            "src": "12868:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4548,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "12852:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3014,
                          "src": "12852:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 4551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12852:24:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "12852:28:6",
                      "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": 4554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12852:50:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4494,
                  "id": 4555,
                  "nodeType": "Return",
                  "src": "12845:57:6"
                }
              ]
            },
            "documentation": null,
            "id": 4557,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "transferableBalance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4488,
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12257:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4487,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12257:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4490,
                  "name": "_time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12274:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12274:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12256:32:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4493,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "12310:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4492,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12310:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12309:9:6"
            },
            "scope": 4663,
            "src": "12228:681:6",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4570,
              "nodeType": "Block",
              "src": "13136:48:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4564,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4559,
                      "src": "13153:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4566,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3882,
                          "src": "13171:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                            "typeString": "contract MiniMeToken"
                          }
                        ],
                        "id": 4565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13163:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13163:14:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13153:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4563,
                  "id": 4569,
                  "nodeType": "Return",
                  "src": "13146:31:6"
                }
              ]
            },
            "documentation": "@dev Disable recovery escape hatch for own token,\n     as the it has the concept of issuing tokens without assigning them",
            "id": 4571,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "allowRecoverability",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4559,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "13093:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13093:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13092:16:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4562,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "13130:4:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4561,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13130:4:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13129:6:6"
            },
            "scope": 4663,
            "src": "13064:120:6",
            "stateMutability": "view",
            "superFunction": 9060,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4620,
              "nodeType": "Block",
              "src": "14268:773:6",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4586,
                      "name": "time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4575,
                      "src": "14344:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4587,
                      "name": "vested",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4581,
                      "src": "14352:6:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14344:14:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4592,
                  "nodeType": "IfStatement",
                  "src": "14340:53:6",
                  "trueBody": {
                    "id": 4591,
                    "nodeType": "Block",
                    "src": "14360:33:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14381:1:6",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 4585,
                        "id": 4590,
                        "nodeType": "Return",
                        "src": "14374:8:6"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4593,
                      "name": "time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4575,
                      "src": "14406:4:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4594,
                      "name": "cliff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4579,
                      "src": "14413:5:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14406:12:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4599,
                  "nodeType": "IfStatement",
                  "src": "14402:56:6",
                  "trueBody": {
                    "id": 4598,
                    "nodeType": "Block",
                    "src": "14420:38:6",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4596,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4573,
                          "src": "14441:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4585,
                        "id": 4597,
                        "nodeType": "Return",
                        "src": "14434:13:6"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4601,
                      "name": "vestedTokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 4621,
                      "src": "14889:20:6",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4600,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14889:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4614,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4606,
                              "name": "start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4577,
                              "src": "14932:5:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4604,
                              "name": "time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4575,
                              "src": "14923:4:6",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11664,
                            "src": "14923:8:6",
                            "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": 4607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14923:15:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4602,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4573,
                          "src": "14912:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11614,
                        "src": "14912:10:6",
                        "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": 4608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14912:27:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4611,
                          "name": "start",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4577,
                          "src": "14953:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4609,
                          "name": "vested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4581,
                          "src": "14942:6:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11664,
                        "src": "14942:10:6",
                        "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": 4612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14942:17:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14912:47:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14889:70:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4617,
                        "name": "vestedTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4601,
                        "src": "15021:12:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4615,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4573,
                        "src": "15010:6:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4616,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11664,
                      "src": "15010:10:6",
                      "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": 4618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15010:24:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4585,
                  "id": 4619,
                  "nodeType": "Return",
                  "src": "15003:31:6"
                }
              ]
            },
            "documentation": "@dev Calculate amount of non-vested tokens at a specifc time\n@param tokens The total amount of tokens vested\n@param time The time at which to check\n@param start The date vesting started\n@param cliff The cliff period\n@param vested The fully vested date\n@return The amount of non-vested tokens of a specific grant\n transferableTokens\n  |                         _/--------   vestedTokens rect\n  |                       _/\n  |                     _/\n  |                   _/\n  |                 _/\n  |                /\n  |              .|\n  |            .  |\n  |          .    |\n  |        .      |\n  |      .        |\n  |    .          |\n  +===+===========+---------+----------> time\n     Start       Cliff    Vested",
            "id": 4621,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_calculateNonVestedTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4573,
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14096:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4572,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14096:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4575,
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14120:12:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4574,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14120:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4577,
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14142:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14142:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4579,
                  "name": "cliff",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14165:13:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4578,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14165:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4581,
                  "name": "vested",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14188:14:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4580,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14188:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14086:122:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4584,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4621,
                  "src": "14255:7:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14255:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14254:9:6"
            },
            "scope": 4663,
            "src": "14052:989:6",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4646,
              "nodeType": "Block",
              "src": "15109:311:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4630,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4623,
                            "src": "15153:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4631,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4625,
                            "src": "15164:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4629,
                          "name": "_isBalanceIncreaseAllowed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4473,
                          "src": "15127:25:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 4632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15127:45:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4633,
                        "name": "ERROR_ASSIGN_BALANCE_INCREASE_NOT_ALLOWED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3845,
                        "src": "15174:41:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4628,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "15119:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15119:97:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4635,
                  "nodeType": "ExpressionStatement",
                  "src": "15119:97:6"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4639,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12805,
                            "src": "15350:4:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4640,
                            "name": "_receiver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4623,
                            "src": "15356:9:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4641,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4625,
                            "src": "15367:7:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenManager_$4663",
                              "typeString": "contract TokenManager"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4637,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3882,
                            "src": "15331:5:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                              "typeString": "contract MiniMeToken"
                            }
                          },
                          "id": 4638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2887,
                          "src": "15331:18:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4642,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15331:44:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4643,
                        "name": "ERROR_ASSIGN_TRANSFER_FROM_REVERTED",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "15377:35:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 4636,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        12673,
                        12674
                      ],
                      "referencedDeclaration": 12674,
                      "src": "15323:7:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15323:90:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4645,
                  "nodeType": "ExpressionStatement",
                  "src": "15323:90:6"
                }
              ]
            },
            "documentation": null,
            "id": 4647,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_assign",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4623,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "15064:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15064:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4625,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4647,
                  "src": "15083:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4624,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15083:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15063:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15109:0:6"
            },
            "scope": 4663,
            "src": "15047:373:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4661,
              "nodeType": "Block",
              "src": "15486:104:6",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4657,
                        "name": "_receiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "15517:9:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4658,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4651,
                        "src": "15528:7:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4654,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3882,
                        "src": "15496:5:6",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_MiniMeToken_$3743",
                          "typeString": "contract MiniMeToken"
                        }
                      },
                      "id": 4656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "generateTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3362,
                      "src": "15496:20:6",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 4659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15496:40:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4660,
                  "nodeType": "ExpressionStatement",
                  "src": "15496:40:6"
                }
              ]
            },
            "documentation": null,
            "id": 4662,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4649,
                  "name": "_receiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 4662,
                  "src": "15441:17:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15441:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4651,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4662,
                  "src": "15460:15:6",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4650,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15460:7:6",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15440:36:6"
            },
            "payable": false,
            "returnParameters": {
              "id": 4653,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15486:0:6"
            },
            "scope": 4663,
            "src": "15426:164:6",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4664,
        "src": "518:15074:6"
      }
    ],
    "src": "94:15499:6"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.1",
  "updatedAt": "2019-03-29T09:45:33.431Z",
  "devdoc": {
    "methods": {
      "allowRecoverability(address)": {
        "details": "Disable recovery escape hatch for own token,     as the it has the concept of issuing tokens without assigning them"
      },
      "assign(address,uint256)": {
        "params": {
          "_amount": "Number of tokens transferred",
          "_receiver": "The address receiving the tokens"
        }
      },
      "assignVested(address,uint256,uint64,uint64,uint64,bool)": {
        "params": {
          "_amount": "Number of tokens vested",
          "_cliff": "Date when the initial portion of tokens are transferable",
          "_receiver": "The address receiving the tokens",
          "_revokable": "Whether the vesting can be revoked by the Token Manager",
          "_start": "Date the vesting calculations start",
          "_vested": "Date when all tokens are transferable"
        }
      },
      "burn(address,uint256)": {
        "params": {
          "_amount": "Number of tokens being burned",
          "_holder": "Holder of tokens being burned"
        }
      },
      "canPerform(address,bytes32,uint256[])": {
        "details": "Check whether an action can be performed by a sender for a particular role on this app",
        "params": {
          "_params": "Permission params for the role",
          "_role": "Role on this app",
          "_sender": "Sender of the call"
        },
        "return": "Boolean indicating whether the sender has the permissions to perform the action.        Always returns false if the app hasn't been initialized yet."
      },
      "forward(bytes)": {
        "details": "IForwarder interface conformance. Forwards any token holder action.",
        "params": {
          "_evmScript": "Script being executed"
        }
      },
      "getInitializationBlock()": {
        "return": "Block number in which the contract was initialized"
      },
      "getRecoveryVault()": {
        "details": "Get the recovery vault for the app",
        "return": "Recovery vault address for the app"
      },
      "hasInitialized()": {
        "return": "Whether the contract has been initialized by the time of the current block"
      },
      "initialize(address,bool,uint256)": {
        "params": {
          "_maxAccountTokens": "Maximum amount of tokens an account can have (0 for infinite tokens)",
          "_token": "MiniMeToken address for the managed token (Token Manager instance must be already set as the token controller)",
          "_transferable": "whether the token can be transferred by holders"
        }
      },
      "issue(uint256)": {
        "params": {
          "_amount": "Number of tokens minted"
        }
      },
      "mint(address,uint256)": {
        "params": {
          "_amount": "Number of tokens minted",
          "_receiver": "The address receiving the tokens"
        }
      },
      "onApprove(address,address,uint256)": {
        "details": "Notifies the controller about an approval allowing the controller to react if desired",
        "return": "False if the controller does not authorize the approval"
      },
      "proxyPayment(address)": {
        "return": "True if the ether is accepted, false for it to throw"
      },
      "revokeVesting(address,uint256)": {
        "params": {
          "_holder": "Address whose vesting to revoke",
          "_vestingId": "Numeric id of the vesting"
        }
      },
      "transferToVault(address)": {
        "params": {
          "_token": "Token balance to be sent to recovery vault."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "assign(address,uint256)": {
        "notice": "Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings"
      },
      "assignVested(address,uint256,uint64,uint64,uint64,bool)": {
        "notice": "Assign `@tokenAmount(self.token(): address, _amount, false)` tokens to `_receiver` from the Token Manager's holdings with a `_revokable : 'revokable' : ''` vesting starting at `@formatDate(_start)`, cliff at `@formatDate(_cliff)` (first portion of tokens transferable), and completed vesting at `@formatDate(_vested)` (all tokens transferable)"
      },
      "burn(address,uint256)": {
        "notice": "Burn `@tokenAmount(self.token(): address, _amount, false)` tokens from `_holder`"
      },
      "forward(bytes)": {
        "notice": "Execute desired action as a token holder"
      },
      "initialize(address,bool,uint256)": {
        "notice": "Initialize Token Manager for `_token.symbol(): string`, whose tokens are `transferable ? 'not' : ''` transferable`_maxAccountTokens > 0 ? ' and limited to a maximum of ' + @tokenAmount(_token, _maxAccountTokens, false) + ' per account' : ''`"
      },
      "issue(uint256)": {
        "notice": "Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for the Token Manager"
      },
      "mint(address,uint256)": {
        "notice": "Mint `@tokenAmount(self.token(): address, _amount, false)` tokens for `_receiver`"
      },
      "proxyPayment(address)": {
        "notice": "Called when ether is sent to the MiniMe Token contract"
      },
      "revokeVesting(address,uint256)": {
        "notice": "Revoke vesting #`_vestingId` from `_holder`, returning unvested tokens to the Token Manager"
      },
      "transferToVault(address)": {
        "notice": "Send funds to recovery Vault. This contract should never receive funds,        but in case it does, this function allows one to recover them."
      }
    }
  }
}