Vulnerability: First depositor can lock the quote target value to zero
Severity: medium

Description:
When the initial deposit occurs, it is possible for the quote target to be set to 0. This situation significantly impacts other LPs as well. Even if subsequent LPs deposit substantial amounts, the quote target remains at 0 due to multiplication with this zero value. 0 QUOTE_TARGET value will impact the swaps that pool facilities\\nWhen the first deposit happens, QUOTE_TARGET is set as follows:\\n```\\n if (totalSupply == 0) {\\n            // case 1. initial supply\\n            // The shares will be minted to user\\n            shares = quoteBalance < DecimalMath.mulFloor(baseBalance, _I_)\\n                ? DecimalMath.divFloor(quoteBalance, _I_)\\n                : baseBalance;\\n            // The target will be updated\\n            _BASE_TARGET_ = uint112(shares);\\n            _QUOTE_TARGET_ = uint112(DecimalMath.mulFloor(shares, _I_));\\n```\\n\\nIn this scenario, the 'shares' value can be a minimum of 1e3, as indicated here: link to code snippet.\\nThis implies that if someone deposits minuscule amounts of quote token and base token, they can set the QUOTE_TARGET to zero because the `mulFloor` operation uses a scaling factor of 1e18:\\n```\\nfunction mulFloor(uint256 target, uint256 d) internal pure returns (uint256) {\\n        return target * d / (10 ** 18);\\n    }\\n```\\n\\n```\\n// @review 0 + (0 * something) = 0! doesn't matter what amount has been deposited !\\n_QUOTE_TARGET_ = uint112(uint256(_QUOTE_TARGET_) + (DecimalMath.mulFloor(uint256(_QUOTE_TARGET_), mintRatio)));\\n```\\n\\nHere a PoC shows that if the first deposit is tiny the QUOTE_TARGET is 0. Also, whatever deposits after goes through the QUOTE_TARGET still 0 because of the multiplication with 0!\\n```\\nfunction test_StartWithZeroTarget() external {\\n        // tapir deposits tiny amounts to make quote target 0\\n        vm.startPrank(tapir);\\n        dai.safeTransfer(address(gsp), 1 * 1e5);\\n        usdc.transfer(address(gsp), 1 * 1e5);\\n        gsp.buyShares(tapir);\\n\\n        console.log("Base target", gsp._BASE_TARGET_());\\n        console.log("Quote target", gsp._QUOTE_TARGET_());\\n        console.log("Base reserve", gsp._BASE_RESERVE_());\\n        console.log("Quote reserve", gsp._QUOTE_RESERVE_());\\n\\n        // quote target is indeed 0!\\n        assertEq(gsp._QUOTE_TARGET_(), 0);\\n\\n        vm.stopPrank();\\n\\n        // hippo deposits properly\\n        vm.startPrank(hippo);\\n        dai.safeTransfer(address(gsp), 1000 * 1e18);\\n        usdc.transfer(address(gsp), 10000 * 1e6);\\n        gsp.buyShares(hippo);\\n\\n        console.log("Base target", gsp._BASE_TARGET_());\\n        console.log("Quote target", gsp._QUOTE_TARGET_());\\n        console.log("Base reserve", gsp._BASE_RESERVE_());\\n        console.log("Quote reserve", gsp._QUOTE_RESERVE_());\\n\\n        // although hippo deposited 1000 USDC as quote tokens, target is still 0 due to multiplication with 0\\n        assertEq(gsp._QUOTE_TARGET_(), 0);\\n    }\\n```\\n\\nTest result and logs:

Impact:
Since the quote target is important and used when pool deciding the swap math I will label this as high.

Recommended mitigation:
According to the quote tokens decimals, multiply the quote token balance with the proper decimal scalor.