Team members can't unstake the initial allocation forever.
When users call `unstake()`, it calculates the vested amount using `_vestingCheck()`.\\n```\\n  function _vestingCheck(address user, uint256 amount) internal view returns (uint256) {\\n    if(teamAllocations[user] > 0) return 0; //@audit return 0 for team members\\n    uint256 initialAllocation = seedAllocations[user];\\n    if(initialAllocation > 0) {\\n      if(block.timestamp < vestingStart) return 0;\\n      uint256 vestPortion = FixedPointMathLib.divWad(block.timestamp - vestingStart, vestingEnd - vestingStart);\\n      return FixedPointMathLib.mulWad(vestPortion, initialAllocation) - (initialAllocation - stakedLocks[user]);\\n    }\\n    else {\\n      return amount;\\n    }\\n  }\\n```\\n\\nBut it returns 0 for team members and they can't unstake forever. Furthermore, in `stake()`, it just prevents seed investors, not team members. So if team members have staked additionally, they can't unstake also.
`_vestingCheck` should use the same logic as initial investors for team mates.
Team members can't unstake forever.
```\\n  function _vestingCheck(address user, uint256 amount) internal view returns (uint256) {\\n    if(teamAllocations[user] > 0) return 0; //@audit return 0 for team members\\n    uint256 initialAllocation = seedAllocations[user];\\n    if(initialAllocation > 0) {\\n      if(block.timestamp < vestingStart) return 0;\\n      uint256 vestPortion = FixedPointMathLib.divWad(block.timestamp - vestingStart, vestingEnd - vestingStart);\\n      return FixedPointMathLib.mulWad(vestPortion, initialAllocation) - (initialAllocation - stakedLocks[user]);\\n    }\\n    else {\\n      return amount;\\n    }\\n  }\\n```\\n