// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import { IUniswapV3Pool } from "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import { IUniswapV3Factory } from "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol"; struct PositionLiquidity { uint128 liquidity; Range range; } struct SwapPayload { bytes payload; address router; uint256 amountIn; uint256 expectedMinReturn; bool zeroForOne; } struct Range { int24 lowerTick; int24 upperTick; uint24 feeTier; } struct Rebalance { PositionLiquidity[] burns; PositionLiquidity[] mints; SwapPayload swap; uint256 minBurn0; uint256 minBurn1; uint256 minDeposit0; uint256 minDeposit1; } struct RangeWeight { Range range; uint256 weight; // should be between 0 and 100% } struct InitializePayload { uint24[] feeTiers; address token0; address token1; address owner; uint256 init0; uint256 init1; address manager; address[] routers; } // #region internal Structs struct UnderlyingOutput { uint256 amount0; uint256 amount1; uint256 fee0; uint256 fee1; uint256 leftOver0; uint256 leftOver1; } struct ComputeFeesPayload { uint256 feeGrowthInsideLast; uint256 feeGrowthOutsideLower; uint256 feeGrowthOutsideUpper; uint256 feeGrowthGlobal; IUniswapV3Pool pool; uint128 liquidity; int24 tick; int24 lowerTick; int24 upperTick; } struct GetFeesPayload { uint256 feeGrowthInside0Last; uint256 feeGrowthInside1Last; IUniswapV3Pool pool; uint128 liquidity; int24 tick; int24 lowerTick; int24 upperTick; } struct PositionUnderlying { bytes32 positionId; uint160 sqrtPriceX96; IUniswapV3Pool pool; int24 tick; int24 lowerTick; int24 upperTick; } struct Withdraw { uint256 burn0; uint256 burn1; uint256 fee0; uint256 fee1; } struct UnderlyingPayload { Range[] ranges; IUniswapV3Factory factory; address token0; address token1; address self; } struct RangeData { address self; Range range; IUniswapV3Pool pool; } // #endregion internal Structs