{"version":3,"sources":["../../../../src/raydium/clmm/libraries/bigNum.ts","../../../../src/raydium/clmm/libraries/constants.ts","../../../../src/raydium/clmm/libraries/sqrtPriceMath.ts"],"sourcesContent":["import BN from \"bn.js\"\nimport Decimal from \"decimal.js\"\nimport { BN_ONE, BN_ZERO, Q128, U128_MAX } from \"./constants\"\n\nexport function mask(bits: number): BN {\n  return new BN(1).shln(bits).subn(1)\n}\n\nexport function checkedAdd(a: BN, b: BN, maxBits: number): BN {\n  const result = a.add(b)\n  const maxValue = mask(maxBits)\n  if (result.gt(maxValue)) {\n    throw new Error(`Addition overflow: result exceeds ${maxBits} bits`)\n  }\n  return result\n}\n\nexport function checkedSub(a: BN, b: BN): BN {\n  if (a.lt(b)) {\n    throw new Error(\"Subtraction underflow\")\n  }\n  return a.sub(b)\n}\n\nexport function checkedMul(a: BN, b: BN, maxBits: number): BN {\n  const result = a.mul(b)\n  const maxValue = mask(maxBits)\n  if (result.gt(maxValue)) {\n    throw new Error(`Multiplication overflow: result exceeds ${maxBits} bits`)\n  }\n  return result\n}\n\nexport function mulFull(a: BN, b: BN): [BN, BN] {\n  const result = a.mul(b)\n  const low = result.and(mask(128))\n  const high = result.shrn(128)\n  return [low, high]\n}\n\nexport function mulDivFloor(a: BN, b: BN, denominator: BN): BN {\n  if (denominator.isZero()) {\n    throw new Error(\"Division by zero\")\n  }\n  return a.mul(b).div(denominator)\n}\n\nexport function mulDivCeil(a: BN, b: BN, denominator: BN): BN {\n  if (denominator.isZero()) {\n    throw new Error(\"Division by zero\")\n  }\n  const product = a.mul(b)\n  const quotient = product.div(denominator)\n  const remainder = product.mod(denominator)\n\n  if (remainder.isZero()) {\n    return quotient\n  }\n  return quotient.addn(1)\n}\n\nexport function mulDivRound(a: BN, b: BN, denominator: BN, roundUp: boolean): BN {\n  return roundUp ? mulDivCeil(a, b, denominator) : mulDivFloor(a, b, denominator)\n}\n\nexport function divRoundingUp(x: BN, y: BN) {\n  return x.div(y).add(x.mod(y).isZero() ? BN_ZERO : BN_ONE)\n}\n\nexport function u128SaturatingAdd(a: BN, b: BN): BN {\n  const result = a.add(b)\n  return result.gt(U128_MAX) ? U128_MAX : result\n}\n\nexport function u128SaturatingSub(a: BN, b: BN): BN {\n  return a.gt(b) ? a.sub(b) : new BN(0)\n}\n\nexport function u128CheckedMul(a: BN, b: BN): BN {\n  const result = a.mul(b)\n  if (result.gt(U128_MAX)) {\n    throw new Error(\"U128 multiplication overflow\")\n  }\n  return result\n}\n\nexport const U256_MAX = new BN(1).shln(256).subn(1)\n\nexport function u256MulDivFloor(a: BN, b: BN, denominator: BN): BN {\n  if (denominator.isZero()) {\n    throw new Error(\"Division by zero\")\n  }\n  return a.mul(b).div(denominator)\n}\n\nexport function u256MulDivCeil(a: BN, b: BN, denominator: BN): BN {\n  if (denominator.isZero()) {\n    throw new Error(\"Division by zero\")\n  }\n  const product = a.mul(b)\n  const quotient = product.div(denominator)\n  const remainder = product.mod(denominator)\n\n  if (remainder.isZero()) {\n    return quotient\n  }\n  return quotient.addn(1)\n}\n\nexport function mostSignificantBit(n: BN): number {\n  if (n.isZero()) {\n    return -1\n  }\n  return n.bitLength() - 1\n}\n\nexport function leastSignificantBit(n: BN): number {\n  if (n.isZero()) {\n    return -1\n  }\n\n  let pos = 0\n  let temp = n.clone()\n\n  while (temp.and(new BN(1)).isZero()) {\n    temp = temp.shrn(1)\n    pos++\n  }\n\n  return pos\n}\n\nexport function isBitSet(n: BN, bit: number): boolean {\n  return n.testn(bit)\n}\n\nexport function setBit(n: BN, bit: number): BN {\n  return n.or(new BN(1).shln(bit))\n}\n\nexport function clearBit(n: BN, bit: number): BN {\n  return n.and(new BN(1).shln(bit).notn(256))\n}\n\nexport function toggleBit(n: BN, bit: number): BN {\n  return n.xor(new BN(1).shln(bit))\n}\n\nexport function toSignedI128(n: BN): BN {\n  const signBit = new BN(1).shln(127)\n  if (n.and(signBit).isZero()) {\n    return n\n  }\n  return n.sub(new BN(1).shln(128))\n}\n\nexport function fromSignedI128(n: BN): BN {\n  if (n.isNeg()) {\n    return n.add(new BN(1).shln(128))\n  }\n  return n\n}\n\nexport function abs(n: BN): BN {\n  return n.isNeg() ? n.neg() : n\n}\n\nexport function x64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n  return new Decimal(num.toString()).div(Decimal.pow(2, 64)).toDecimalPlaces(decimalPlaces)\n}\n\nexport function decimalToX64(num: Decimal): BN {\n  return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed())\n}\n\nexport function wrappingSubU128(n0: BN, n1: BN): BN {\n  return n0.add(Q128).sub(n1).mod(Q128)\n}\n","import BN from \"bn.js\";\n\nexport const Q64 = new BN(1).shln(64);\n\nexport const RESOLUTION = 64;\n\nexport const Q128 = new BN(1).shln(128);\n\nexport const U64_MAX = new BN(1).shln(64).subn(1);\n\nexport const U128_MAX = new BN(1).shln(128).subn(1);\n\nexport const MIN_TICK = -443636;\n\nexport const MAX_TICK = 443636;\n\nexport const MIN_SQRT_PRICE_X64 = new BN(\"4295048016\");\n\nexport const MAX_SQRT_PRICE_X64 = new BN(\"79226673521066979257578248091\");\n\nexport const LOG_B_2_X32 = new BN(\"59543866431248\");\n\nexport const LOG_B_P_ERR_MARGIN_LOWER_X64 = new BN(\"184467440737095516\");\n\nexport const LOG_B_P_ERR_MARGIN_UPPER_X64 = new BN(\"15793534762490258745\");\n\nexport const BIT_PRECISION = 16;\n\nexport const TICK_ARRAY_BITMAP_SIZE = 512;\n\nexport const TICK_ARRAY_SIZE = 60;\n\nexport const MAGIC_SQRT_10001 = new BN(\"18446743708227953217\");\n\nexport const TICK_TO_SQRT_PRICE_FACTORS: { bit: number; factor: BN }[] = [\n  { bit: 0, factor: new BN(\"fffcb933bd6fb800\", 16) }, // i=0\n  { bit: 1, factor: new BN(\"fff97272373d4000\", 16) }, // i=1\n  { bit: 2, factor: new BN(\"fff2e50f5f657000\", 16) }, // i=2\n  { bit: 3, factor: new BN(\"ffe5caca7e10f000\", 16) }, // i=3\n  { bit: 4, factor: new BN(\"ffcb9843d60f7000\", 16) }, // i=4\n  { bit: 5, factor: new BN(\"ff973b41fa98e800\", 16) }, // i=5\n  { bit: 6, factor: new BN(\"ff2ea16466c9b000\", 16) }, // i=6\n  { bit: 7, factor: new BN(\"fe5dee046a9a3800\", 16) }, // i=7\n  { bit: 8, factor: new BN(\"fcbe86c7900bb000\", 16) }, // i=8\n  { bit: 9, factor: new BN(\"f987a7253ac65800\", 16) }, // i=9\n  { bit: 10, factor: new BN(\"f3392b0822bb6000\", 16) }, // i=10\n  { bit: 11, factor: new BN(\"e7159475a2caf000\", 16) }, // i=11\n  { bit: 12, factor: new BN(\"d097f3bdfd2f2000\", 16) }, // i=12\n  { bit: 13, factor: new BN(\"a9f746462d9f8000\", 16) }, // i=13\n  { bit: 14, factor: new BN(\"70d869a156f31c00\", 16) }, // i=14\n  { bit: 15, factor: new BN(\"31be135f97ed3200\", 16) }, // i=15\n  { bit: 16, factor: new BN(\"9aa508b5b85a500\", 16) }, // i=16\n  { bit: 17, factor: new BN(\"5d6af8dedc582c\", 16) }, // i=17\n  { bit: 18, factor: new BN(\"2216e584f5fa\", 16) }, // i=18\n];\n\nexport const FEE_RATE_DENOMINATOR = 1_000_000;\n\nexport const MAX_FEE_RATE = 100_000;\n\nexport enum CollectFeeOn {\n  FromInput = 0,\n  TokenOnlyA = 1,\n  TokenOnlyB = 2,\n}\n\n// export const FEE_RATE_DENOMINATOR_VALUE = 1_000_000;\n\nexport const MAX_FEE_RATE_NUMERATOR = 100_000;\nexport const VOLATILITY_ACCUMULATOR_SCALE = 10_000;\nexport const REDUCTION_FACTOR_DENOMINATOR = 10_000;\nexport const DYNAMIC_FEE_CONTROL_DENOMINATOR = 100_000;\n\nexport const TICK_ARRAY_SIZE_USIZE = 60;\n\nexport const REWARD_NUM = 3;\n\nexport const OBSERVATION_NUM = 100;\nexport const OBSERVATION_UPDATE_DURATION_DEFAULT = 15;\n\nexport const OPERATION_SIZE_USIZE = 10;\nexport const WHITE_MINT_SIZE_USIZE = 100;\n\nexport const EXTENSION_TICKARRAY_BITMAP_SIZE = 14;\n\nexport enum PoolStatusBitIndex {\n  OpenPositionOrIncreaseLiquidity = 0,\n  DecreaseLiquidity = 1,\n  CollectFee = 2,\n  CollectReward = 3,\n  Swap = 4,\n  LimitOrder = 5,\n}\n\nexport enum PoolStatusBitFlag {\n  Enable = 0,\n  Disable = 1,\n}\n\nexport enum RewardState {\n  Uninitialized = 0,\n  Initialized = 1,\n  Opening = 2,\n  Ended = 3,\n}\n\nexport enum UpdateAmmConfigParam {\n  TradeFeeRate = 0,\n  ProtocolFeeRate = 1,\n  FundFeeRate = 2,\n  NewOwner = 3,\n  NewFundOwner = 4,\n}\n\nexport enum UpdateOperationAccountParam {\n  UpdateOperationOwner = 0,\n  RemoveOperationOwner = 1,\n  UpdateWhitelistMint = 2,\n  RemoveWhitelistMint = 3,\n}\n\nexport const BN_ZERO = new BN(0);\nexport const BN_ONE = new BN(1);\nexport const BN_NEGATIVE_ONE = new BN(-1);\n\nexport const mockV3CreatePoolInfo = {\n  tvl: 0,\n  volumeQuote: 0,\n  mintAmountA: 0,\n  mintAmountB: 0,\n  rewardDefaultInfos: [],\n  farmUpcomingCount: 0,\n  farmOngoingCount: 0,\n  farmFinishedCount: 0,\n\n  day: {\n    volume: 0,\n    volumeQuote: 0,\n    volumeFee: 0,\n    apr: 0,\n    feeApr: 0,\n    priceMin: 0,\n    priceMax: 0,\n    rewardApr: [0],\n  },\n  week: {\n    volume: 0,\n    volumeQuote: 0,\n    volumeFee: 0,\n    apr: 0,\n    feeApr: 0,\n    priceMin: 0,\n    priceMax: 0,\n    rewardApr: [0],\n  },\n  month: {\n    volume: 0,\n    volumeQuote: 0,\n    volumeFee: 0,\n    apr: 0,\n    feeApr: 0,\n    priceMin: 0,\n    priceMax: 0,\n    rewardApr: [0],\n  },\n  pooltype: [],\n};\n\n/**\n * Get human-readable description for collectFeeOn value\n * CollectFeeOn enum values:\n * 0 = FromInput - fee collected from input token during swap\n * 1 = Token0Only - fee collected from token0\n * 2 = Token1Only - fee collected from token1\n */\nexport function getCollectFeeOnDescription(value: number): string {\n  switch (value) {\n    case 0:\n      return \"0 (FromInput - fee from input token)\";\n    case 1:\n      return \"1 (Token0Only - fee from token0)\";\n    case 2:\n      return \"2 (Token1Only - fee from token1)\";\n    default:\n      return `${value} (unknown)`;\n  }\n}\n\nexport const DYNAMIC_CONFIG_INDEX = 2;\nexport const U64_IGNORE_RANGE = new BN(\"18446744073700000000\");\n","import BN from \"bn.js\"\nimport { divRoundingUp, mulDivCeil, mulDivFloor } from \"./bigNum\"\nimport { BN_ONE, BN_ZERO, Q64, RESOLUTION } from \"./constants\"\n\nexport class SqrtPriceMath {\n  static getNextSqrtPriceFromAmountARoundingUp(\n    sqrtPriceX64: BN,\n    liquidity: BN,\n    amount: BN,\n    add: boolean\n  ): BN {\n    if (amount.isZero()) {\n      return sqrtPriceX64\n    }\n\n    const numerator = liquidity.shln(RESOLUTION)\n\n    if (add) {\n      const product = amount.mul(sqrtPriceX64)\n\n      const denominator = numerator.add(product)\n\n      if (denominator.gte(numerator)) {\n        return mulDivCeil(numerator, sqrtPriceX64, denominator)\n      }\n\n      const quotient = mulDivFloor(numerator, BN_ONE, sqrtPriceX64)\n      return mulDivCeil(numerator, BN_ONE, quotient.add(amount))\n    } else {\n      const product = amount.mul(sqrtPriceX64)\n\n      if (numerator.lte(product)) {\n        throw new Error(\"Insufficient liquidity for token0 removal\")\n      }\n\n      const denominator = numerator.sub(product)\n\n      return mulDivCeil(numerator, sqrtPriceX64, denominator)\n    }\n  }\n\n  static getNextSqrtPriceFromAmountBRoundingDown(\n    sqrtPriceX64: BN,\n    liquidity: BN,\n    amount: BN,\n    add: boolean\n  ): BN {\n    if (amount.isZero()) {\n      return sqrtPriceX64\n    }\n\n    if (add) {\n      const quotient = amount.shln(RESOLUTION).div(liquidity)\n      return sqrtPriceX64.add(quotient)\n    } else {\n      const quotient = divRoundingUp(amount.shln(RESOLUTION), liquidity)\n      return sqrtPriceX64.sub(quotient)\n    }\n  }\n\n  static getNextSqrtPriceFromInput(\n    sqrtPriceX64: BN,\n    liquidity: BN,\n    amountIn: BN,\n    zeroForOne: boolean\n  ): BN {\n    if (!sqrtPriceX64.gt(BN_ZERO)) throw Error('sqrtPriceX64.gt(BN_ZERO)')\n    if (!liquidity.gt(BN_ZERO)) throw Error('liquidity.gt(BN_ZERO)')\n\n    if (zeroForOne) {\n      return this.getNextSqrtPriceFromAmountARoundingUp(sqrtPriceX64, liquidity, amountIn, true)\n    } else {\n      return this.getNextSqrtPriceFromAmountBRoundingDown(sqrtPriceX64, liquidity, amountIn, true)\n    }\n  }\n\n  static getNextSqrtPriceFromOutput(\n    sqrtPriceX64: BN,\n    liquidity: BN,\n    amountIn: BN,\n    zeroForOne: boolean\n  ): BN {\n    if (!sqrtPriceX64.gt(BN_ZERO)) throw Error('sqrtPriceX64.gt(BN_ZERO)')\n    if (!liquidity.gt(BN_ZERO)) throw Error('liquidity.gt(BN_ZERO)')\n\n    if (zeroForOne) {\n      return this.getNextSqrtPriceFromAmountBRoundingDown(sqrtPriceX64, liquidity, amountIn, false)\n    } else {\n      return this.getNextSqrtPriceFromAmountARoundingUp(sqrtPriceX64, liquidity, amountIn, false)\n    }\n  }\n\n  static getAmountADeltaUnsigned(\n    sqrtPriceLowerX64: BN,\n    sqrtPriceUpperX64: BN,\n    liquidity: BN,\n    roundUp: boolean\n  ): BN {\n    if (sqrtPriceLowerX64.gt(sqrtPriceUpperX64)) {\n      [sqrtPriceLowerX64, sqrtPriceUpperX64] = [sqrtPriceUpperX64, sqrtPriceLowerX64]\n    }\n\n    const priceDelta = sqrtPriceUpperX64.sub(sqrtPriceLowerX64)\n    const numerator = liquidity.mul(priceDelta).shln(64)\n\n    const denominator = sqrtPriceLowerX64.mul(sqrtPriceUpperX64)\n\n    if (roundUp) {\n      return mulDivCeil(numerator, BN_ONE, denominator)\n    } else {\n      return mulDivFloor(numerator, BN_ONE, denominator)\n    }\n  }\n\n  static getAmountBDeltaUnsigned(\n    sqrtPriceLowerX64: BN,\n    sqrtPriceUpperX64: BN,\n    liquidity: BN,\n    roundUp: boolean\n  ): BN {\n    if (sqrtPriceLowerX64.gt(sqrtPriceUpperX64)) {\n      [sqrtPriceLowerX64, sqrtPriceUpperX64] = [sqrtPriceUpperX64, sqrtPriceLowerX64]\n    }\n\n    const priceDelta = sqrtPriceUpperX64.sub(sqrtPriceLowerX64)\n\n    if (roundUp) {\n      return mulDivCeil(liquidity, priceDelta, Q64)\n    } else {\n      return mulDivFloor(liquidity, priceDelta, Q64)\n    }\n  }\n}\n"],"mappings":"AAAA,qBACA,0BCDA,qBAEO,GAAM,GAAM,GAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAEvB,EAAa,GAEb,EAAO,GAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAEzB,EAAU,GAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAEnC,EAAW,GAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,EAM3C,GAAM,GAAqB,GAAI,GAAG,YAAY,EAExC,EAAqB,GAAI,GAAG,+BAA+B,EAE3D,EAAc,GAAI,GAAG,gBAAgB,EAErC,EAA+B,GAAI,GAAG,oBAAoB,EAE1D,EAA+B,GAAI,GAAG,sBAAsB,EAQlE,GAAM,GAAmB,GAAI,GAAG,sBAAsB,EAEhD,EAA4D,CACvE,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,EAAG,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EACjD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,mBAAoB,EAAE,CAAE,EAClD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,kBAAmB,EAAE,CAAE,EACjD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,iBAAkB,EAAE,CAAE,EAChD,CAAE,IAAK,GAAI,OAAQ,GAAI,GAAG,eAAgB,EAAE,CAAE,CAChD,EAmEO,GAAM,GAAU,GAAI,GAAG,CAAC,EAClB,EAAS,GAAI,GAAG,CAAC,EACjB,EAAkB,GAAI,GAAG,EAAE,EAkEjC,GAAM,GAAmB,GAAI,GAAG,sBAAsB,EDrJtD,WAAqB,EAAO,EAAO,EAAqB,CAC7D,GAAI,EAAY,OAAO,EACrB,KAAM,IAAI,OAAM,kBAAkB,EAEpC,MAAO,GAAE,IAAI,CAAC,EAAE,IAAI,CAAW,CACjC,CAEO,WAAoB,EAAO,EAAO,EAAqB,CAC5D,GAAI,EAAY,OAAO,EACrB,KAAM,IAAI,OAAM,kBAAkB,EAEpC,GAAM,GAAU,EAAE,IAAI,CAAC,EACjB,EAAW,EAAQ,IAAI,CAAW,EAGxC,MAAI,AAFc,GAAQ,IAAI,CAAW,EAE3B,OAAO,EACZ,EAEF,EAAS,KAAK,CAAC,CACxB,CAMO,WAAuB,EAAO,EAAO,CAC1C,MAAO,GAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAI,EAAU,CAAM,CAC1D,CAmBO,GAAM,GAAW,GAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,EElF3C,WAAoB,OAClB,uCACL,EACA,EACA,EACA,EACI,CACJ,GAAI,EAAO,OAAO,EAChB,MAAO,GAGT,GAAM,GAAY,EAAU,KAAK,CAAU,EAE3C,GAAI,EAAK,CACP,GAAM,GAAU,EAAO,IAAI,CAAY,EAEjC,EAAc,EAAU,IAAI,CAAO,EAEzC,GAAI,EAAY,IAAI,CAAS,EAC3B,MAAO,GAAW,EAAW,EAAc,CAAW,EAGxD,GAAM,GAAW,EAAY,EAAW,EAAQ,CAAY,EAC5D,MAAO,GAAW,EAAW,EAAQ,EAAS,IAAI,CAAM,CAAC,CAC3D,KAAO,CACL,GAAM,GAAU,EAAO,IAAI,CAAY,EAEvC,GAAI,EAAU,IAAI,CAAO,EACvB,KAAM,IAAI,OAAM,2CAA2C,EAG7D,GAAM,GAAc,EAAU,IAAI,CAAO,EAEzC,MAAO,GAAW,EAAW,EAAc,CAAW,CACxD,CACF,OAEO,yCACL,EACA,EACA,EACA,EACI,CACJ,GAAI,EAAO,OAAO,EAChB,MAAO,GAGT,GAAI,EAAK,CACP,GAAM,GAAW,EAAO,KAAK,CAAU,EAAE,IAAI,CAAS,EACtD,MAAO,GAAa,IAAI,CAAQ,CAClC,KAAO,CACL,GAAM,GAAW,EAAc,EAAO,KAAK,CAAU,EAAG,CAAS,EACjE,MAAO,GAAa,IAAI,CAAQ,CAClC,CACF,OAEO,2BACL,EACA,EACA,EACA,EACI,CACJ,GAAI,CAAC,EAAa,GAAG,CAAO,EAAG,KAAM,OAAM,0BAA0B,EACrE,GAAI,CAAC,EAAU,GAAG,CAAO,EAAG,KAAM,OAAM,uBAAuB,EAE/D,MAAI,GACK,KAAK,sCAAsC,EAAc,EAAW,EAAU,EAAI,EAElF,KAAK,wCAAwC,EAAc,EAAW,EAAU,EAAI,CAE/F,OAEO,4BACL,EACA,EACA,EACA,EACI,CACJ,GAAI,CAAC,EAAa,GAAG,CAAO,EAAG,KAAM,OAAM,0BAA0B,EACrE,GAAI,CAAC,EAAU,GAAG,CAAO,EAAG,KAAM,OAAM,uBAAuB,EAE/D,MAAI,GACK,KAAK,wCAAwC,EAAc,EAAW,EAAU,EAAK,EAErF,KAAK,sCAAsC,EAAc,EAAW,EAAU,EAAK,CAE9F,OAEO,yBACL,EACA,EACA,EACA,EACI,CACJ,AAAI,EAAkB,GAAG,CAAiB,GACxC,EAAC,EAAmB,CAAiB,EAAI,CAAC,EAAmB,CAAiB,GAGhF,GAAM,GAAa,EAAkB,IAAI,CAAiB,EACpD,EAAY,EAAU,IAAI,CAAU,EAAE,KAAK,EAAE,EAE7C,EAAc,EAAkB,IAAI,CAAiB,EAE3D,MAAI,GACK,EAAW,EAAW,EAAQ,CAAW,EAEzC,EAAY,EAAW,EAAQ,CAAW,CAErD,OAEO,yBACL,EACA,EACA,EACA,EACI,CACJ,AAAI,EAAkB,GAAG,CAAiB,GACxC,EAAC,EAAmB,CAAiB,EAAI,CAAC,EAAmB,CAAiB,GAGhF,GAAM,GAAa,EAAkB,IAAI,CAAiB,EAE1D,MAAI,GACK,EAAW,EAAW,EAAY,CAAG,EAErC,EAAY,EAAW,EAAY,CAAG,CAEjD,CACF","names":[]}