`InvestorBasedRateLimiter::setInvestorMintLimit` and `setInvestorRedemptionLimit` can make subsequent calls to `checkAndUpdateMintLimit` and `checkAndUpdateRedemptionLimit` revert due to underflow
`InvestorBasedRateLimiter::_checkAndUpdateRateLimitState` L211-213 subtracts the current mint/redemption amount from the corresponding limit:\\n```\\nif (amount > rateLimit.limit - rateLimit.currentAmount) {\\n  revert RateLimitExceeded();\\n}\\n```\\n\\nIf `setInvestorMintLimit` or `setInvestorRedemptionLimit` are used to set the limit amount for minting or redemptions smaller than the current mint/redemption amount, calls to this function will revert due to underflow.
Explicitly handle the case where the limit is smaller than the current mint/redemption amount:\\n```\\nif (rateLimit.limit <= rateLimit.currentAmount || amount > rateLimit.limit - rateLimit.currentAmount) {\\n  revert RateLimitExceeded();\\n}\\n```\\n
`InvestorBasedRateLimiter::setInvestorMintLimit` and `setInvestorRedemptionLimit` can make subsequent calls to `checkAndUpdateMintLimit` and `checkAndUpdateRedemptionLimit` revert due to underflow.\\nProof of Concept: Add this drop-in PoC to forge-tests/ousg/InvestorBasedRateLimiter/setters.t.sol:\\n```\\nfunction test_setInvestorMintLimit_underflow_DoS() public initDefault(alice) {\\n    // first perform a mint\\n    uint256 mintAmount = rateLimiter.defaultMintLimit();\\n    vm.prank(client);\\n    rateLimiter.checkAndUpdateMintLimit(alice, mintAmount);\\n\\n    // admin now reduces the mint limit to be under the current\\n    // minted amount\\n    uint256 aliceInvestorId = 1;\\n    uint256 newMintLimit = mintAmount - 1;\\n    vm.prank(guardian);\\n    rateLimiter.setInvestorMintLimit(aliceInvestorId, newMintLimit);\\n\\n    // subsequent calls to `checkAndUpdateMintLimit` revert due to underflow\\n    vm.prank(client);\\n    rateLimiter.checkAndUpdateMintLimit(alice, 1);\\n\\n    // same issue affects `setInvestorRedemptionLimit`\\n}\\n```\\n\\nRun with: `forge test --match-test test_setInvestorMintLimit_underflow_DoS`\\nProduces output:\\n```\\nRan 1 test for forge-tests/ousg/InvestorBasedRateLimiter/setters.t.sol:Test_InvestorBasedRateLimiter_setters_ETH\\n[FAIL. Reason: panic: arithmetic underflow or overflow (0x11)] test_setInvestorMintLimit_underflow_DoS() (gas: 264384)\\nSuite result: FAILED. 0 passed; 1 failed; 0 skipped; finished in 1.09ms (116.74µs CPU time)\\n```\\n
```\\nif (amount > rateLimit.limit - rateLimit.currentAmount) {\\n  revert RateLimitExceeded();\\n}\\n```\\n