MEDIUM severity: The vulnerability is related to the `createOrder` function, specifically when creating an order of t. The vulnerability is related to the `createOrder` function, specifically when creating an order of type `MarketIncrease`. The function allows an attacker to execute transactions with stale prices by inputting a very extensive `swapPath`. This is achieved by creating a market increase order with a lo...

Vulnerable code:
```\nfunction createOrder(\n    DataStore dataStore,\n    EventEmitter eventEmitter,\n    OrderVault orderVault,\n    IReferralStorage referralStorage,\n    address account,\n    BaseOrderUtils.CreateOrderParams memory params\n) external returns (bytes32) {\n    ReferralUtils.setTraderReferralCode(referralStorage, account, params.referralCode);\n\n    uint256 initialCollateralDeltaAmount;\n\n    address wnt = TokenUtils.wnt(dataStore);\n\n    bool shouldRecordSeparateExecutionFeeTransfer = true;\n\n    if (\n        params.orderType == Order.OrderType.MarketSwap ||\n        params.orderType == Order.OrderType.LimitSwap ||\n        params.orderType == Order.OrderType.MarketIncrease ||\n        params.orderType == Order.OrderType.LimitIncrease\n    ) {\n        initialCollateralDeltaAmount = orderVault.recordTransferIn(params.addresses.initialCollateralToken);\n        if (params.addresses.initialCollateralToken == wnt) {\n            if (initialCollateralDeltaAmount < params.numbers.executionFee) {\n                revert InsufficientWntAmountForExecutionFee(initialCollateralDeltaAmount, params.numbers.executionFee);\n            }\n            initialCollateralDeltaAmount -= params.numbers.executionFee;\n            shouldRecordSeparateExecutionFeeTransfer = false;\n        }\n    } else if (\n        params.orderType == Order.OrderType.MarketDecrease ||\n        params.orderType == Order.OrderType.LimitDecrease ||\n        params.orderType == Order.OrderType.StopLossDecrease\n    ) {\n        initialCollateralDeltaAmount = params.numbers.initialCollateralDeltaAmount;\n    } else {\n        revert OrderTypeCannotBeCreated(params.orderType);\n    }\n\n    if (shouldRecordSeparateExecutionFeeTransfer) {\n        uint256 wntAmount = orderVault.recordTransferIn(wnt);\n        if (wntAmount < params.numbers.executionFee) {\n            revert InsufficientWntAmountForExecutionFee(wntAmount, params.numbers.executionFee);\n        }\n\n        GasUtils.handleExcessExecutionFee(\n            dataStore,\n            orderVault,\n            wntAmount,\n            params.numbers.executionFee\n        );\n    }\n\n    // validate swap path markets\n    MarketUtils.getEnabledMarkets(\n        dataStore,\n        params.addresses.swapPath\n    );\n\n    Order.Props memory order;\n\n    order.setAccount(account);\n    order.setReceiver(params.addresses.receiver);\n    order.setCallbackContract(params.addresses.callbackContract);\n    order.setMarket(params.addresses.market);\n    order.setInitialCollateralToken\n```\n```\nBaseOrderUtils.CreateOrderParams memory params\n\nstruct CreateOrderParams {\n    CreateOrderParamsAddresses addresses;\n    CreateOrderParamsNumbers numbers;\n    Order.OrderType orderType;\n    Order.DecreasePositionSwapType decreasePositionSwapType;\n    bool isLong;\n    bool shouldUnwrapNativeToken;\n    bytes32 referralCode;\n}\n\nstruct CreateOrderParamsAddresses {\n    address receiver;\n    address callbackContract;\n    address market;\n    address initialCollateralToken;\n    address[] swapPath;\n}\n```\n```\nimport { expect } from "chai";\nimport { mine } from "@nomicfoundation/hardhat-network-helpers";\nimport { OrderType, getOrderCount, getOrderKeys, createOrder, executeOrder, handleOrder } from "../utils/order";\nimport { expandDecimals, decimalToFloat } from "../utils/math";\nimport { deployFixture } from "../utils/fixture";\nimport { handleDeposit } from "../utils/deposit";\nimport { getPositionCount, getAccountPositionCount } from "../utils/position";\n\ndescribe("Execute transaction with all prices", () => {\n  let fixture;\n  let user0;\n  let user1;\n  let user2;\n  let reader;\n  let dataStore;\n  let ethUsdMarket;\n  let ethUsdSpotOnlyMarket;\n  let wnt;\n  let usdc;\n  let attackContract;\n  let oracle;\n  let depositVault;\n  let exchangeRouter;\n  let swapHandler;\n  let executionFee;\n\n  beforeEach(async () => {\n    fixture = await deployFixture();\n\n    ({ user0, user1, user2 } = fixture.accounts);\n    ({\n      reader,\n      dataStore,\n      oracle,\n      depositVault,\n      ethUsdMarket,\n      ethUsdSpotOnlyMarket,\n      wnt,\n      usdc,\n      attackContract,\n      exchangeRouter,\n      swapHandler,\n    } = fixture.contracts);\n    ({ executionFee } = fixture.props);\n\n    await handleDeposit(fixture, {\n      create: {\n        market: ethUsdMarket,\n        longTokenAmount: expandDecimals(10000000, 18),\n        shortTokenAmount: expandDecimals(10000000 * 5000, 6),\n      },\n    });\n    await handleDeposit(fixture, {\n      create: {\n        market: ethUsdSpotOnlyMarket,\n        longTokenAmount: expandDecimals(10000000, 18),\n        shortTokenAmount: expandDecimals(10000000 * 5000, 6),\n      },\n    });\n  });\n\n  it("Old price order execution", async () => {\n    const path = [];\n    const UsdcBal = expandDecimals(50 * 1000, 6);\n    expect(await getOrderCount(dataStore)).to.equal(0);\n\n    for (let i = 0; i < 63; i++) {\n      if (i % 2 === 0) {\n        path.push(ethUsdMarket.marketToken);\n      } else {\n        path.push(eth\n```