withdrawal request override
It is possible that a withdrawal request is overridden during the initial phase.\\nUsers have two options to withdraw: directly or request a withdrawal if not enough funds are available at the moment.\\nWhen making a `withdrawalRequest` it is required that the user has `withdrawalRequestPeriod` not set:\\n```\\n  function withdrawalRequest(\\n    uint256 _amount\\n  ) external nonReentrant onlyWhenVaultIsOn returns (uint256 value) {\\n    UserInfo storage user = userInfo[msg.sender];\\n    require(user.withdrawalRequestPeriod == 0, "Already a request");\\n\\n    value = (_amount * exchangeRate) / (10 ** decimals());\\n\\n    _burn(msg.sender, _amount);\\n\\n    user.withdrawalAllowance = value;\\n    user.withdrawalRequestPeriod = rebalancingPeriod;\\n    totalWithdrawalRequests += value;\\n  }\\n```\\n\\nThis will misbehave during the initial period when `rebalancingPeriod` is 0. The check will pass, so if invoked multiple times, it will burn users' shares and overwrite the value.
Require `rebalancingPeriod` != 0 in `withdrawalRequest`, otherwise, force users to directly withdraw.
While not very likely to happen, the impact would be huge, because the users who invoke this function several times before the first rebalance, would burn their shares and lose previous `withdrawalAllowance`. The protocol should prevent such mistakes.
```\\n  function withdrawalRequest(\\n    uint256 _amount\\n  ) external nonReentrant onlyWhenVaultIsOn returns (uint256 value) {\\n    UserInfo storage user = userInfo[msg.sender];\\n    require(user.withdrawalRequestPeriod == 0, "Already a request");\\n\\n    value = (_amount * exchangeRate) / (10 ** decimals());\\n\\n    _burn(msg.sender, _amount);\\n\\n    user.withdrawalAllowance = value;\\n    user.withdrawalRequestPeriod = rebalancingPeriod;\\n    totalWithdrawalRequests += value;\\n  }\\n```\\n