{"version":3,"file":"index.mjs","names":["getSwapRouterAddress","getInitCodeHash","getFactoryAddress","getTickLensAddress","getNFTManagerAddress","VAULT_ABI","PERIPHERY_ABI","PoolV3","VAULT_ABI","PERIPHERY_ABI","VAULT_ABI","ZERO_ADDRESS","provenance","deployment","key","deployment","deploymentKey","deploymentKey","ZERO","requireCode","ZERO_ADDRESS","identity","invalid","record","address","hex","unavailable","invalid","record","ZERO","ZERO_ADDRESS","hasCode","requireContractCode","assertPreflightMatches","assertLogBelongsToReceipt"],"sources":["../src/const/chain.ts","../src/const/deployments/abis.ts","../src/const/deployments/apechain.ts","../src/const/deployments/arbitrum.ts","../src/const/deployments/arbitrumgoerli.ts","../src/const/deployments/astar.ts","../src/const/deployments/astarzkevm.ts","../src/const/deployments/avalanche.ts","../src/const/deployments/bartiotest.ts","../src/const/deployments/base.ts","../src/const/deployments/blast.ts","../src/const/deployments/bsc.ts","../src/const/deployments/celo.ts","../src/const/deployments/evmos.ts","../src/const/deployments/fantom.ts","../src/const/deployments/filecoin.ts","../src/const/deployments/flare.ts","../src/const/deployments/goerli.ts","../src/const/deployments/kava.ts","../src/const/deployments/linea.ts","../src/const/deployments/localhost.ts","../src/const/deployments/eth.ts","../src/const/deployments/manta.ts","../src/const/deployments/mantle.ts","../src/const/deployments/metis.ts","../src/const/deployments/mode.ts","../src/const/deployments/moonbeam.ts","../src/const/deployments/mumbai.ts","../src/const/deployments/okxtestnet.ts","../src/const/deployments/optimism.ts","../src/const/deployments/optimismgoerli.ts","../src/const/deployments/polygon.ts","../src/const/deployments/polyzkevm.ts","../src/const/deployments/rootstock.ts","../src/const/deployments/scroll.ts","../src/const/deployments/sei.ts","../src/const/deployments/sonic.ts","../src/const/deployments/taiko.ts","../src/const/deployments/telos.ts","../src/const/deployments/thundercore.ts","../src/const/deployments/xlayer.ts","../src/const/deployments/zircuit.ts","../src/const/deployments/hemi.ts","../src/const/deployments/soneium.ts","../src/const/deployments/uni.ts","../src/const/deployments/zeta.ts","../src/const/deployments/bera.ts","../src/const/deployments/katana.ts","../src/const/deployments/saga.ts","../src/const/deployments/bittensor.ts","../src/const/deployments/robinhood.ts","../src/const/deployments/berachainbartio.ts","../src/const/deployments/core.ts","../src/const/deployments/tataratestnet.ts","../src/const/deployments/zklinknova.ts","../src/const/deployments/peaq.ts","../src/const/deployments/ronin.ts","../src/const/deployments/nibiru.ts","../src/const/deployments/hyperevm.ts","../src/const/feeManagerContracts.ts","../src/const/network.ts","../src/base/vault/single-asset/types.ts","../src/const/protocol.ts","../src/const/subgraph.ts","../src/const/thegraph.ts","../src/const/api.ts","../src/const/abis/erc20.ts","../src/const/abis/erc721.ts","../src/const/abis/erc1155.ts","../src/const/abis/singleTokenDeposit.ts","../src/const/abis/UniswapPool.ts","../src/const/abis/quoter.ts","../src/const/abis/feeManager.ts","../src/const/abis/vaultFees.ts","../src/const/amm/configs/protocols/arthswap.ts","../src/const/amm/configs/protocols/baseswap.ts","../src/const/amm/configs/protocols/basex.ts","../src/const/amm/configs/protocols/camelot.ts","../src/const/amm/configs/protocols/crust.ts","../src/const/amm/configs/protocols/equilibre.ts","../src/const/amm/configs/protocols/fenix.ts","../src/const/amm/configs/protocols/forge.ts","../src/const/amm/configs/protocols/fusionx.ts","../src/const/amm/configs/protocols/henjin.ts","../src/const/amm/configs/protocols/hercules.ts","../src/const/amm/configs/protocols/horiza.ts","../src/const/amm/configs/protocols/kim.ts","../src/const/amm/configs/protocols/linehub.ts","../src/const/amm/configs/protocols/lynex.ts","../src/const/amm/configs/protocols/maia.ts","../src/const/amm/configs/protocols/metavault.ts","../src/const/amm/configs/protocols/novaswap.ts","../src/const/amm/configs/protocols/pancakeswap.ts","../src/const/amm/configs/protocols/poolshark.ts","../src/const/amm/configs/protocols/quickswap.ts","../src/const/amm/configs/protocols/quickswap-algebra.ts","../src/const/amm/configs/protocols/quickswap-integral.ts","../src/const/amm/configs/protocols/quickswap-univ3.ts","../src/const/amm/configs/protocols/retro.ts","../src/const/amm/configs/protocols/spark.ts","../src/const/amm/configs/protocols/spark32.ts","../src/const/amm/configs/protocols/supswap.ts","../src/const/amm/configs/protocols/swapmode.ts","../src/const/amm/configs/protocols/swapsicle.ts","../src/const/amm/configs/protocols/sushi.ts","../src/const/amm/configs/protocols/thena.ts","../src/const/amm/configs/protocols/thick.ts","../src/const/amm/configs/protocols/thruster.ts","../src/const/amm/configs/protocols/uniswap.ts","../src/const/amm/configs/protocols/kinetix.ts","../src/const/amm/configs/protocols/glyph.ts","../src/const/amm/configs/protocols/katana.ts","../src/const/amm/configs/protocols/shadow.ts","../src/const/amm/configs/protocols/nest.ts","../src/const/amm/configs/protocols/bittensor-univ3.ts","../src/const/amm/configs/protocols/blackhole.ts","../src/const/amm/configs/protocols/beam.ts","../src/const/amm/configs/protocols/beamswap.ts","../src/const/amm/configs/protocols/dodo.ts","../src/const/amm/configs/protocols/dragonswap.ts","../src/const/amm/configs/protocols/eddy.ts","../src/const/amm/configs/protocols/kodiak.ts","../src/const/amm/configs/protocols/kyo.ts","../src/const/amm/configs/protocols/ocelex.ts","../src/const/amm/configs/protocols/sailor.ts","../src/const/amm/configs/protocols/silverswap.ts","../src/const/amm/configs/protocols/spookyswap.ts","../src/const/amm/configs/protocols/stellaswap.ts","../src/const/amm/configs/protocols/thickv2.ts","../src/const/amm/configs/protocols/wasabee.ts","../src/const/amm/configs/protocols/machinex.ts","../src/const/amm/configs/protocols/katanaIntegral.ts","../src/const/amm/configs/protocols/aerodrome.ts","../src/const/amm/configs/protocols/aerodrome-v2.ts","../src/const/amm/configs/protocols/cypher.ts","../src/const/amm/configs/protocols/spark-integral.ts","../src/const/amm/configs/protocols/uniswapv4.ts","../src/const/amm/configs/protocols/hydrex.ts","../src/const/amm/configs/protocols/aerodrome-v3.ts","../src/const/amm/configs/ammConfig.ts","../src/const/amm/utils/beacon.ts","../src/const/amm/utils/contracts.ts","../src/const/amm/utils/protocol.ts","../src/const/amm/utils/index.ts","../src/const/capabilities.ts","../src/const/quoter.ts","../src/const/stabilityVaults/stabilityVaultsConfig.ts","../src/utils/SubgraphVaultClient.ts","../src/base/SmartRewards.ts","../src/base/SubgraphClient.ts","../src/base/vault/utils.ts","../src/base/vault/deposit/index.ts","../src/base/vault/single-asset/calculateSwapAmount.ts","../src/base/vault/single-asset/calculateLimitPrice.ts","../src/base/vault/single-asset/simulateSwap.ts","../src/base/vault/single-asset/estimateLpTokens.ts","../src/base/vault/single-asset/singleAssetDeposit.ts","../src/base/vault/single-asset/index.ts","../src/base/vault/withdraw/index.ts","../src/pool-lifecycle/abis/v4.ts","../src/pool-lifecycle/errors.ts","../src/pool-lifecycle/math.ts","../src/pool-lifecycle/v4/key.ts","../src/base/vault/execution-context.ts","../src/base/VaultClient.ts","../src/base/SmartRewardClient.ts","../src/utils/PoolQueryAdapter.ts","../src/base/PoolClient.ts","../src/base/StakingClient.ts","../src/client.ts","../src/base/FeeManagerClient.ts","../src/pool-lifecycle/types.ts","../src/pool-lifecycle/capabilities/registry.ts","../src/pool-lifecycle/capabilities/algebra.ts","../src/pool-lifecycle/capabilities/aerodrome-slipstream.ts","../src/pool-lifecycle/capabilities/v3.ts","../src/pool-lifecycle/capabilities/v4.ts","../src/pool-lifecycle/capabilities.ts","../src/pool-lifecycle/abis/algebra.ts","../src/pool-lifecycle/abis/aerodrome-slipstream.ts","../src/pool-lifecycle/abis/v3.ts","../src/pool-lifecycle/algebra/key.ts","../src/pool-lifecycle/algebra/inspect.ts","../src/pool-lifecycle/algebra/actions.ts","../src/pool-lifecycle/algebra/types.ts","../src/pool-lifecycle/algebra/simulate.ts","../src/pool-lifecycle/algebra/verify.ts","../src/pool-lifecycle/aerodrome-slipstream/key.ts","../src/pool-lifecycle/aerodrome-slipstream/types.ts","../src/pool-lifecycle/aerodrome-slipstream/inspect.ts","../src/pool-lifecycle/aerodrome-slipstream/actions.ts","../src/pool-lifecycle/aerodrome-slipstream/simulate.ts","../src/pool-lifecycle/aerodrome-slipstream/verify.ts","../src/pool-lifecycle/v3/types.ts","../src/pool-lifecycle/v3/key.ts","../src/pool-lifecycle/v3/inspect.ts","../src/pool-lifecycle/v3/actions.ts","../src/pool-lifecycle/v3/simulate.ts","../src/pool-lifecycle/v3/verify.ts","../src/pool-lifecycle/v4/inspect.ts","../src/pool-lifecycle/v4/actions.ts","../src/pool-lifecycle/v4/integrity.ts","../src/pool-lifecycle/v4/simulate.ts","../src/pool-lifecycle/v4/verify.ts","../src/index.ts"],"sourcesContent":["// Chain types\nexport enum Chain {\n  // Mainnet = 'Mainnet',\n  Polygon = 'Polygon',\n  Arbitrum = 'Arbitrum',\n  Optimism = 'Optimism',\n  BSC = 'BSC',\n  Evmos = 'Evmos',\n  Metis = 'Metis',\n  Thundercore = 'Thundercore',\n  Base = 'Base',\n  Avalanche = 'Avalanche',\n  PolygonzkEVM = 'PolygonzkEVM',\n  Celo = 'Celo',\n  Kava = 'Kava',\n  Linea = 'Linea',\n  Scroll = 'Scroll',\n  Manta = 'Manta',\n  Astar = 'Astar',\n  Fantom = 'Fantom',\n  OkxTestnet = 'OkxTestnet',\n  Mantle = 'Mantle',\n  AstarZkevm = 'AstarZkevm',\n  Blast = 'Blast',\n  Mode = 'Mode',\n  XLayer = 'XLayer',\n  Telos = 'Telos',\n  Rootstock = 'Rootstock',\n  Taiko = 'Taiko',\n  ZklinkNova = 'ZklinkNova',\n  Flare = 'Flare',\n  BeraChainBartio = 'BeraChainBartio',\n  Filecoin = 'Filecoin',\n  Apechain = 'Apechain',\n  Zircuit = 'Zircuit',\n  Moonbeam = 'Moonbeam',\n  Sei = 'Sei',\n  Sonic = 'Sonic',\n  Zeta = 'Zeta',\n  Soneium = 'Soneium',\n  Mainnet = 'Mainnet',\n  Bera = 'Bera',\n  Unichain = 'Unichain',\n  TataraTestnet = 'TataraTestnet',\n  Hemi = 'Hemi',\n  Core = 'Core',\n  Peaq = 'Peaq',\n  Katana = 'Katana',\n  Ronin='Ronin',\n  Saga='Saga',\n  Nibiru='Nibiru',\n  Hyperevm='Hyperevm',\n  Bittensor='Bittensor',\n  Robinhood='Robinhood'\n}\n\nexport const ChainId: {\n  [key in Chain]: number;\n} = {\n  Polygon: 137,\n  Arbitrum: 42161,\n  Optimism: 10,\n  BSC: 56,\n  Evmos: 9001,\n  Metis: 1088,\n  Avalanche: 43114,\n  Thundercore: 108,\n  PolygonzkEVM: 1101,\n  Celo: 42220,\n  Kava: 2222,\n  Linea: 59144,\n  Scroll: 534352,\n  Manta: 169,\n  Astar: 592,\n  Mantle: 5000,\n  Fantom: 250,\n  AstarZkevm: 3776,\n  Blast: 81457,\n  Mode: 34443,\n  Telos: 40,\n  Base: 8453,\n  XLayer: 196,\n  Rootstock: 30,\n  Taiko: 167000,\n  ZklinkNova: 810180,\n  Flare: 14,\n  BeraChainBartio: 80084,\n  Filecoin: 314,\n  Apechain: 33139,\n  Zircuit: 48900,\n  Moonbeam: 1284,\n  Sei: 1329,\n  Sonic: 146,\n  Bera: 80094,\n  Zeta: 7000,\n  Soneium: 1868,\n  Mainnet: 1,\n  Unichain: 130,\n  TataraTestnet: 129399,\n  Hemi: 43111,\n  OkxTestnet: 195,\n  Core: 1116,\n  Peaq: 3338,\n  Katana: 747474,\n  Ronin: 2020,\n  Saga: 5464,\n  Nibiru: 6900,\n  Hyperevm: 999,\n  Bittensor: 964,\n  Robinhood: 4663\n};\n\n// Protocol types\nexport enum Protocol {\n  QuickSwap = 'QuickSwap',\n  Uniswap = 'Uniswap',\n  Sushi = 'Sushi',\n  Forge = 'Forge',\n  PancakeSwap = 'PancakeSwap',\n  Maia = 'Maia',\n  Retro = 'Retro',\n  Kinetix = 'Kinetix',\n  MetaVault = 'MetaVault',\n  QuickSwapUniv3 = 'QuickSwapUniv3',\n  Camelot = 'Camelot',\n  Lynex = 'Lynex',\n  Thena = 'Thena',\n  Horiza = 'Horiza',\n  BaseX = 'BaseX',\n  ArthSwap = 'ArthSwap',\n  Hercules = 'Hercules',\n  Thick = 'Thick',\n  Crust = 'Crust',\n  Thruster = 'Thruster',\n  FusionX = 'FusionX',\n  SupSwap = 'SupSwap',\n  SwapMode = 'SwapMode',\n  BaseSwap = 'BaseSwap',\n  PoolShark = 'PoolShark',\n  Kim = 'Kim',\n  Swapsicle = 'Swapsicle',\n  Equilibre = 'Equilibre',\n  QuickSwapAlgebra = 'QuickSwapAlgebra',\n  Fenix = 'Fenix',\n  LineHub = 'LineHub',\n  Henjin = 'Henjin',\n  NovaSwap = 'NovaSwap',\n  Spark = 'Spark',\n  Spark32 = 'Spark32',\n  Kodiak = 'Kodiak',\n  Ocelex = 'Ocelex',\n  StellaSwap = 'StellaSwap',\n  BeamSwap = 'BeamSwap',\n  DragonSwap = 'DragonSwap',\n  SpookySwap = 'SpookySwap',\n  SilverSwap = 'SilverSwap',\n  ThickV2 = 'ThickV2',\n  Beam = 'Beam',\n  QuickSwapIntegral = 'QuickSwapIntegral',\n  Kyo = 'Kyo',\n  Wasabee = 'Wasabee',\n  Katana = 'Katana',\n  Eddy = 'Eddy',\n  Dodo = 'Dodo',\n  Glyph = 'Glyph',\n  Sailor = 'Sailor',\n  Shadow = 'Shadow',\n  MachineX = 'MachineX',\n  KatanaIntegral = 'KatanaIntegral',\n  Blackhole = 'Blackhole',\n  Aerodrome = 'Aerodrome',\n  AerodromeV2 = 'AerodromeV2',\n  Nest = 'Nest',\n  Cypher = 'Cypher',\n  SparkIntegral='SparkIntegral',\n  UniswapV4 = 'UniswapV4',\n  Hydrex = 'Hydrex',\n  BittensorUniV3 = 'BittensorUniV3',\n  AerodromeV3 = 'AerodromeV3',\n}\n\nexport enum StrykePositionManagers {\n  StrykeEqualizerManager= 'StrykeEqualizerPositionManager',\n  StrykeShadowManager = 'StrykeShadowManager'\n}\n\nexport enum MultiPositionManagers {\n  MultiPositionUniswapV3 = 'MultiPositionUniswapV3',\n  MultiPositionSushi = 'MultiPositionSushi',\n  MultiPositionForge = 'MultiPositionForge',\n  MultiPositionMAIA = 'MultiPositionMAIA',\n  MultiPositionPancake = 'MultiPositionPancake',\n  MultiPositionRetro = 'MultiPositionRetro',\n  MultiPositionKinetix = 'MultiPositionKinetix',\n  MultiPositionQuickSwap = 'MultiPositionQuickSwap',\n  MultiPositionQuickSwapUniv3 = 'MultiPositionQuickSwapUniv3',\n  MultiPositionMetaVault = 'MultiPositionMetaVault',\n  MultiPositionCamelot = 'MultiPositionCamelot',\n  MultiPositionLynex = 'MultiPositionLynex',\n  MultiPositionThena = 'MultiPositionThena',\n  MultiPositionHoriza = 'MultiPositionHoriza',\n  MultiPositionBaseX = 'MultiPositionBasex',\n  MultiPositionArthSwap = 'MultiPositionArthSwap',\n  MultiPositionHercules = 'MultiPositionHercules',\n  MultiPositionThick = 'MultiPositionThick',\n  MultiPositionCrust = 'MultiPositionCrust',\n  MultiPositionThruster = 'MultiPositionThruster',\n  MultiPositionFusionX = 'MultiPositionFusionx',\n  MultiPositionSupSwap = 'MultiPositionSupSwap',\n  MultiPositionSwapMode = 'MultiPositionSwapMode',\n  MultiPositionBaseSwap = 'MultiPositionBaseSwap',\n  MultiPositionQuickswap19 = 'MultiPositionQuickSwap19',\n  MultiPositionPoolShark = 'MultiPositionPoolShark',\n  MultiPositionKim = 'MultiPositionKim',\n  MultiPositionSwasicle = 'MultiPositionSwapsicle',\n  MultiPositionEquilibre = 'MultiPositionEquilibre',\n  MultiPositionFenix = 'MultiPositionFenix',\n  MultiPositionLineHub = 'MultiPositionLineHub',\n  MultiPositionHenjin = 'MultiPositionHenjin',\n  MultiPositionNovaSwap = 'MultiPositionNovaSwap',\n  MultiPositionSpark = 'MultiPositionSpark',\n  MultiPositionSpark32 = 'MultipositionSpark32',\n  MultiPositionKodiak = 'MultiPositionKodiak',\n  MultiPositionOcelex = 'MultiPositionOcelex',\n  MultiPositionStellaSwap = 'MultiPositionStellaSwap',\n  MultiPositionBeamSwap = 'MultiPositionBeamSwap',\n  MultiPositionDragonSwap = 'MultiPositionDragonSwap',\n  MultiPositionSpookySwap = 'MultiPositionSpookySwap',\n  MultiPositionSilverSwap = 'MultiPositionSilverSwap',\n  MultiPositionThickV2 = 'MultiPositionThickV2',\n  MultiPositionBeam = 'MultiPositionBeam',\n  MultiPositionQuickSwapIntegral = 'MultiPositionQuickSwapIntegral',\n  MultiPositionKyo = 'MultiPositionKyo',\n  MultiPositionSailor = 'MultiPositionSailor',\n  MultiPositionWasabee = 'MultiPositionWasabee',\n  MultiPositionEddy = 'MultiPositionEddy',\n  MultiPositionDodo = 'MultiPositionDodo',\n  MultiPositionGlyph = 'MultiPositionGlyph',\n  MultiPositionKatana = 'MultiPositionKatana',\n  MultiPositionShadow = 'MultiPositionShadow',\n  MultiPositionMachineX = 'MultiPositionMachineX',\n  MultiPositionKatanaIntegral = 'MultiPositionKatanaIntegral',\n  MultiPositionUniswapV4ALM = 'MultiPositionUniswapV4',\n  MultiPositionUniswapV4Hook = 'UniswapV4Hook',\n  MultiPositionUniswapV4HookOld = 'MultiPositionUniHookTest',\n  MultiPositionBlackhole = 'MultiPositionBlackHole',\n  MultiPositionBlackholeOld = 'MultiPositionBlackhole',\n  AlgebraHook = 'AlgebraHook',\n  MultiPositionAerodrome = 'MultiPositionAerodrome',\n  MultiPositionAerodromeV2 = 'AerodromeStakedPositionManager',\n  MultiPositionAerodromeV3 = 'AerodromeStakedPositionManagerV3',\n  MultiPositionNest = 'MultiPositionNest',\n  MultiPositionCypher = 'MultiPositionCypher',\n  MultiPositionSushiManaged = 'MultiPositionSushiManaged',\n  MultiPositionSparkIntegral='MultiPositionSparkIntegral',\n  MultiPositionHenjinAlgebraHook='HenjinIntegralHook',\n  MultiPositionHydrex='MultiPositionHydrex',\n  MultiPositionBittensorUniV3='MultiPositionBittensorUniV3',\n  MultiPositionReserveV4='MultiPositionReserveV4',\n  TestCypherAlgebraIntegralHook='TestCypherAlgebraIntegralHook',\n  TestQuickswapAlgebraIntegralHook='TestQuickswapAlgebraIntegralHook',\n  TestUniswapJITHook='TestUniswapJITHook',\n  MultiPositionUniswapV4NoOracle='MultiPositionUniswapV4NoOracle'\n}\n\nexport const AlgebgraHookBeacons = [\n  MultiPositionManagers.MultiPositionHenjinAlgebraHook,\n  MultiPositionManagers.AlgebraHook,\n  MultiPositionManagers.TestCypherAlgebraIntegralHook,\n  MultiPositionManagers.TestQuickswapAlgebraIntegralHook\n]\n\nexport const UniswapV4Beacons = [\n  MultiPositionManagers.MultiPositionUniswapV4ALM,\n  MultiPositionManagers.MultiPositionUniswapV4HookOld,\n  MultiPositionManagers.TestUniswapJITHook,\n  MultiPositionManagers.MultiPositionUniswapV4Hook,\n  MultiPositionManagers.MultiPositionReserveV4,\n  MultiPositionManagers.MultiPositionUniswapV4NoOracle,\n] as const;\n\nexport const UniswapHookBeacons = [\n  MultiPositionManagers.MultiPositionUniswapV4Hook,\n  MultiPositionManagers.TestUniswapJITHook,\n  MultiPositionManagers.MultiPositionUniswapV4HookOld,\n] as const;\n","// This file is auto-generated. Do not edit directly.\nexport const abis = {\n  \"BundleRegistry\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"receive\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"hash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"bundle\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"host\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"source\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"output\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"infoHash\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"active\",\n          \"type\": \"bool\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"creator\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BundleRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"hash\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"toggle\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"BundleStateChange\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"bundles\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"bundle\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"source\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"host\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"output\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"info\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"active\",\n          \"type\": \"bool\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"author\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_bundle\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_source\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_host\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_output\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_infoHash\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"_active\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"register\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"_adapter\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"_remainActive\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"setAdapterState\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialLogic\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"constructor\"\n    }\n  ],\n  \"CamelotMultiPositionLiquidityManager\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Deposit\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Earned\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Earned\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"FeesEarned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"previousAdminRole\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"newAdminRole\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RoleAdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleGranted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleRevoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint160\",\n          \"name\": \"sqrtPriceX96\",\n          \"type\": \"uint160\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalAmount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalAmount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalSupply\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Snapshot\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Withdraw\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DEFAULT_ADMIN_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"STEER_FRACTION_OF_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"STRATEGIST_FRACTION_OF_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"TOTAL_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"accruedFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"accruedFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedSteerFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedSteerFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedStrategistFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedStrategistFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"algebraMintCallback\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int256\",\n          \"name\": \"amount0Wanted\",\n          \"type\": \"int256\"\n        },\n        {\n          \"internalType\": \"int256\",\n          \"name\": \"amount1Wanted\",\n          \"type\": \"int256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"algebraSwapCallback\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"feeIdentifier\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"collectFees\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deposit\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Used\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Used\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"tickLower\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"tickUpper\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"liquidity\",\n          \"type\": \"uint128\"\n        }\n      ],\n      \"name\": \"emergencyBurn\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeDetails\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"internalType\": \"string[]\",\n          \"name\": \"\",\n          \"type\": \"string[]\"\n        },\n        {\n          \"internalType\": \"uint256[]\",\n          \"name\": \"\",\n          \"type\": \"uint256[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getPositions\",\n      \"outputs\": [\n        {\n          \"internalType\": \"int24[]\",\n          \"name\": \"\",\n          \"type\": \"int24[]\"\n        },\n        {\n          \"internalType\": \"int24[]\",\n          \"name\": \"\",\n          \"type\": \"int24[]\"\n        },\n        {\n          \"internalType\": \"uint16[]\",\n          \"name\": \"\",\n          \"type\": \"uint16[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleAdmin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"index\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getRoleMember\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleMemberCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getTotalAmounts\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"grantRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"hasRole\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"addedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultManager\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_steer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_params\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxTickChange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"\",\n          \"type\": \"int24\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"migrate\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poke\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pool\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IAlgebraPool\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"renounceRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"revokeRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"interfaceId\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"totalWeight\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"int24[]\",\n              \"name\": \"lowerTick\",\n              \"type\": \"int24[]\"\n            },\n            {\n              \"internalType\": \"int24[]\",\n              \"name\": \"upperTick\",\n              \"type\": \"int24[]\"\n            },\n            {\n              \"internalType\": \"uint16[]\",\n              \"name\": \"relativeWeight\",\n              \"type\": \"uint16[]\"\n            }\n          ],\n          \"internalType\": \"struct CamelotMultiPositionLiquidityManager.LiquidityPositions\",\n          \"name\": \"newPositions\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"timeSensitiveData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"tend\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"token0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"token1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"twapInterval\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdraw\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"GasVault\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"receive\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"origin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"target\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Deposited\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bytes32\",\n          \"name\": \"jobHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"EtherUsed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"targetAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Withdrawn\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"targetAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ethBalances\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_targetAddress\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"gasAvailableForTransaction\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_orchestrator\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_stratRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultRegistry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"orchestrator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IOrchestrator\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"targetAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"originalGas\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"jobHash\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"reimburseGas\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"strategyRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IStrategyRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"targetAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"highGasEstimate\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transactionsRemaining\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"vaultRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IVaultRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address payable\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdraw\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialLogic\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"constructor\"\n    }\n  ],\n  \"SteerPeriphery\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"receive\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"vault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"algebraVaultDetailsByAddress\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"vaultType\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"token0\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"token1\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token0Name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token1Name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token0Symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token1Symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token0Decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token1Decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"totalLPTokensIssued\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token0Balance\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token1Balance\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultCreator\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct IMultiPositionManager.AlgebraVaultDetails\",\n          \"name\": \"details\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"tokenId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"params\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultManager\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct ISteerPeriphery.CVDGParams\",\n          \"name\": \"cvdgParams\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"createVaultAndDepositGas\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newVault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"strategyCreator\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"execBundle\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasCost\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasPerAction\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"params\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultManager\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct ISteerPeriphery.CVSParams\",\n          \"name\": \"cvsParams\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"createVaultAndStrategy\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newVault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"address\",\n              \"name\": \"strategyCreator\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"execBundle\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasCost\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasPerAction\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"bytes\",\n              \"name\": \"jobInitParams\",\n              \"type\": \"bytes\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultManager\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"bytes[]\",\n              \"name\": \"userProvidedData\",\n              \"type\": \"bytes[]\"\n            },\n            {\n              \"internalType\": \"address[]\",\n              \"name\": \"targetAddresses\",\n              \"type\": \"address[]\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"jobName\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"ipfsForJobDetails\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct ISteerPeriphery.CVSRJParams\",\n          \"name\": \"cvsrjParams\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"name\": \"createVaultStrategyAndRegisterJob\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newVault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"vaultAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deposit\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"vaultAddress\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"poolId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"depositAndStake\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_strategyRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_gasVault\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_stakingRewards\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_nodeConfig\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"nodeConfig\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_nodeConfig\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"setNodeConfig\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"creator\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"strategiesByCreator\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"id\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"execBundle\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasCost\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasPerAction\",\n              \"type\": \"uint128\"\n            }\n          ],\n          \"internalType\": \"struct IStrategyRegistry.RegisteredStrategy[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"vault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"vaultBalancesByAddressWithFees\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amountToken0\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"amountToken1\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"internalType\": \"struct IMultiPositionManager.VaultBalance\",\n          \"name\": \"balances\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"vault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"vaultDetailsByAddress\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"string\",\n              \"name\": \"vaultType\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"token0\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"token1\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token0Name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token1Name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token0Symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"token1Symbol\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token0Decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token1Decimals\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"feeTier\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"totalLPTokensIssued\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token0Balance\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"token1Balance\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultCreator\",\n              \"type\": \"address\"\n            }\n          ],\n          \"internalType\": \"struct IMultiPositionManager.VaultDetails\",\n          \"name\": \"details\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"strategyId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"vaultsByStrategy\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"enum IVaultRegistry.VaultState\",\n              \"name\": \"state\",\n              \"type\": \"uint8\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"tokenId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"vaultID\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct IVaultRegistry.VaultData[]\",\n          \"name\": \"\",\n          \"type\": \"tuple[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialLogic\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"constructor\"\n    }\n  ],\n  \"StrategyRegistry\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"receive\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"approved\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"bool\",\n          \"name\": \"approved\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"ApprovalForAll\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"previousAdminRole\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"newAdminRole\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RoleAdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleGranted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleRevoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"StrategyCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DEFAULT_ADMIN_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"GOVERNANCE_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MINTER_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"PAUSER_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"_tokenIdTracker\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"baseURI\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"strategyCreator\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"strategyName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"execBundle\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"maxGasCost\",\n          \"type\": \"uint128\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"maxGasPerAction\",\n          \"type\": \"uint128\"\n        }\n      ],\n      \"name\": \"createStrategy\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"newStrategyTokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getApproved\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getRegisteredStrategy\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"id\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"name\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"owner\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"execBundle\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasCost\",\n              \"type\": \"uint128\"\n            },\n            {\n              \"internalType\": \"uint128\",\n              \"name\": \"maxGasPerAction\",\n              \"type\": \"uint128\"\n            }\n          ],\n          \"internalType\": \"struct IStrategyRegistry.RegisteredStrategy\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleAdmin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"grantRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"hasRole\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"hashedEmptyString\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"registry\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"isApprovedForAll\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxMaxGasPerAction\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"ownerOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"renounceRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"revokeRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"safeTransferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"operator\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"approved\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"setApprovalForAll\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"_maxGasCost\",\n          \"type\": \"uint128\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"_maxGasPerAction\",\n          \"type\": \"uint128\"\n        }\n      ],\n      \"name\": \"setGasParameters\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxMaxGasPerAction\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"setMaxMaxGasPerAction\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"strategies\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"id\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"execBundle\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"maxGasCost\",\n          \"type\": \"uint128\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"maxGasPerAction\",\n          \"type\": \"uint128\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"interfaceId\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"index\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"tokenByIndex\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"tokenIdToExecBundle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"index\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"tokenOfOwnerByIndex\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"tokenURI\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialLogic\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"constructor\"\n    }\n  ],\n  \"VaultRegistry\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"previousAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"AdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"implementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Upgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"fallback\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"implementation\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"upgradeTo\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newImplementation\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"upgradeToAndCall\",\n      \"outputs\": [],\n      \"stateMutability\": \"payable\",\n      \"type\": \"function\"\n    },\n    {\n      \"stateMutability\": \"payable\",\n      \"type\": \"receive\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"selectorLength\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"isImplementedLength\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"IncorrectArrayLengths\",\n      \"type\": \"error\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"_ipfsHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"BeaconConfigUpdated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"BeaconDeregistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"_address\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"_ipfsHash\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"BeaconRegistered\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"beacon\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"BeaconUpgraded\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"FeeSettingFailed\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"previousOwner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"OwnershipTransferred\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"previousAdminRole\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"newAdminRole\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RoleAdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleGranted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleRevoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"deployer\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"vault\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"string\",\n          \"name\": \"beaconName\",\n          \"type\": \"string\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"uint256\",\n          \"name\": \"tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"vaultManager\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"VaultCreated\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"vault\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"enum VaultRegistry.VaultState\",\n          \"name\": \"newState\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"name\": \"VaultStateChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DEFAULT_ADMIN_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"beaconAddresses\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"beaconTypes\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_params\",\n          \"type\": \"bytes\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_beaconName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultManager\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_payloadIpfs\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"createVault\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_address\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_ipfsConfigForBeacon\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"deployAndRegisterBeacon\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"deregisterBeacon\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"interfaceId\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"doISupportInterface\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"feeManager\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleAdmin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vault\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getStrategyCreatorForVault\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_tokenId\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_vaultId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getVaultByStrategyAndIndex\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"enum VaultRegistry.VaultState\",\n              \"name\": \"state\",\n              \"type\": \"uint8\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"tokenId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"vaultID\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct VaultRegistry.VaultData\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_tokenId\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getVaultCountByStrategyId\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_address\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getVaultDetails\",\n      \"outputs\": [\n        {\n          \"components\": [\n            {\n              \"internalType\": \"enum VaultRegistry.VaultState\",\n              \"name\": \"state\",\n              \"type\": \"uint8\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"tokenId\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"vaultID\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"payloadIpfs\",\n              \"type\": \"string\"\n            },\n            {\n              \"internalType\": \"address\",\n              \"name\": \"vaultAddress\",\n              \"type\": \"address\"\n            },\n            {\n              \"internalType\": \"string\",\n              \"name\": \"beaconName\",\n              \"type\": \"string\"\n            }\n          ],\n          \"internalType\": \"struct VaultRegistry.VaultData\",\n          \"name\": \"\",\n          \"type\": \"tuple\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"grantRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"hasRole\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_orchestrator\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_strategyRegistry\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_whitelistRegistry\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"interfaceImplementations\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"linkedVaults\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"orchestrator\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"owner\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_address\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_ipfsConfigForBeacon\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"registerBeacon\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"renounceOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"renounceRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"revokeRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_feeManager\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setFeeManager\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultHelper\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setVaultHelper\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"strategyRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IStrategyRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"interfaceId\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalVaultCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newOwner\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"transferOwnership\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_name\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"string\",\n          \"name\": \"_newIPFSConfigForBeacon\",\n          \"type\": \"string\"\n        }\n      ],\n      \"name\": \"updateBeaconConfig\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"beaconName\",\n          \"type\": \"string\"\n        },\n        {\n          \"internalType\": \"bytes4[]\",\n          \"name\": \"selectors\",\n          \"type\": \"bytes4[]\"\n        },\n        {\n          \"internalType\": \"bool[]\",\n          \"name\": \"isImplemented\",\n          \"type\": \"bool[]\"\n        }\n      ],\n      \"name\": \"updateInterfaceImplementations\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vault\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"enum VaultRegistry.VaultState\",\n          \"name\": \"_newState\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"name\": \"updateVaultState\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"vaultHelper\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"whitelistRegistry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialLogic\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"initialAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_data\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"stateMutability\": \"payable\",\n      \"type\": \"constructor\"\n    }\n  ],\n  \"Helper\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"currentTick\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"_twapInterval\",\n          \"type\": \"uint32\"\n        },\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"_maxTickChange\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"pool\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"algebraVolatilityCheck\",\n      \"outputs\": [],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"int24\",\n              \"name\": \"lowerTick\",\n              \"type\": \"int24\"\n            },\n            {\n              \"internalType\": \"int24\",\n              \"name\": \"upperTick\",\n              \"type\": \"int24\"\n            },\n            {\n              \"internalType\": \"uint16\",\n              \"name\": \"relativeWeight\",\n              \"type\": \"uint16\"\n            }\n          ],\n          \"internalType\": \"struct IHelper.NewLiquidityPositions[]\",\n          \"name\": \"positions\",\n          \"type\": \"tuple[]\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"pool\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"feeManager\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint160\",\n          \"name\": \"sqrtPriceX96\",\n          \"type\": \"uint160\"\n        }\n      ],\n      \"name\": \"getAlgebraVaultBalances\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_totalSupply\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"minShares\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getShares\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Used\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Used\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"pure\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"int24\",\n              \"name\": \"lowerTick\",\n              \"type\": \"int24\"\n            },\n            {\n              \"internalType\": \"int24\",\n              \"name\": \"upperTick\",\n              \"type\": \"int24\"\n            },\n            {\n              \"internalType\": \"uint16\",\n              \"name\": \"relativeWeight\",\n              \"type\": \"uint16\"\n            }\n          ],\n          \"internalType\": \"struct IHelper.NewLiquidityPositions[]\",\n          \"name\": \"positions\",\n          \"type\": \"tuple[]\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"pool\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"feeManager\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUniswapVaultBalances\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"currentTick\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"_twapInterval\",\n          \"type\": \"uint32\"\n        },\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"_maxTickChange\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"pool\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"poolsharkCheckVolatility\",\n      \"outputs\": [],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"currentTick\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"_twapInterval\",\n          \"type\": \"uint32\"\n        },\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"_maxTickChange\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"pool\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"uniVolatilityCheck\",\n      \"outputs\": [],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"QuickSwapUniv3MultiPositionLiquidityManager\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Approval\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Deposit\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Earned\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Earned\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"FeesEarned\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Paused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"previousAdminRole\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"newAdminRole\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"RoleAdminChanged\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleGranted\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"RoleRevoked\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint160\",\n          \"name\": \"sqrtPriceX96\",\n          \"type\": \"uint160\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalAmount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalAmount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"totalSupply\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Snapshot\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"from\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"value\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Transfer\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"Unpaused\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": true,\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"Withdraw\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"DEFAULT_ADMIN_ROLE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"STEER_FRACTION_OF_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"TOTAL_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedSteerFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedSteerFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedStrategistFees0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"accruedStrategistFees1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"owner\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"allowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"approve\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"balanceOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"decimals\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint8\",\n          \"name\": \"\",\n          \"type\": \"uint8\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"subtractedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"decreaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Desired\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deposit\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Used\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Used\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"tickLower\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"tickUpper\",\n          \"type\": \"int24\"\n        },\n        {\n          \"internalType\": \"uint128\",\n          \"name\": \"liquidity\",\n          \"type\": \"uint128\"\n        }\n      ],\n      \"name\": \"emergencyBurn\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getPositions\",\n      \"outputs\": [\n        {\n          \"internalType\": \"int24[]\",\n          \"name\": \"\",\n          \"type\": \"int24[]\"\n        },\n        {\n          \"internalType\": \"int24[]\",\n          \"name\": \"\",\n          \"type\": \"int24[]\"\n        },\n        {\n          \"internalType\": \"uint16[]\",\n          \"name\": \"\",\n          \"type\": \"uint16[]\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleAdmin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"index\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"getRoleMember\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        }\n      ],\n      \"name\": \"getRoleMemberCount\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"getTotalAmounts\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"total1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"grantRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"hasRole\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"spender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"addedValue\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"increaseAllowance\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_vaultManager\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_steer\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"_params\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxTickChange\",\n      \"outputs\": [\n        {\n          \"internalType\": \"int24\",\n          \"name\": \"\",\n          \"type\": \"int24\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"name\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"paused\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"poke\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"pool\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IUniswapV3Pool\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"renounceRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes32\",\n          \"name\": \"role\",\n          \"type\": \"bytes32\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"account\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"revokeRole\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"steerCollectFees\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"strategistCollectFees\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bytes4\",\n          \"name\": \"interfaceId\",\n          \"type\": \"bytes4\"\n        }\n      ],\n      \"name\": \"supportsInterface\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"symbol\",\n      \"outputs\": [\n        {\n          \"internalType\": \"string\",\n          \"name\": \"\",\n          \"type\": \"string\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"totalWeight\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"components\": [\n            {\n              \"internalType\": \"int24[]\",\n              \"name\": \"lowerTick\",\n              \"type\": \"int24[]\"\n            },\n            {\n              \"internalType\": \"int24[]\",\n              \"name\": \"upperTick\",\n              \"type\": \"int24[]\"\n            },\n            {\n              \"internalType\": \"uint16[]\",\n              \"name\": \"relativeWeight\",\n              \"type\": \"uint16[]\"\n            }\n          ],\n          \"internalType\": \"struct QuickSwapUniv3MultiPositionLiquidityManager.LiquidityPositions\",\n          \"name\": \"newPositions\",\n          \"type\": \"tuple\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"timeSensitiveData\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"tend\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"token0\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"token1\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IERC20\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"totalSupply\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transfer\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"sender\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"recipient\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"transferFrom\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"twapInterval\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint32\",\n          \"name\": \"\",\n          \"type\": \"uint32\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"uniswapV3MintCallback\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"int256\",\n          \"name\": \"amount0Wanted\",\n          \"type\": \"int256\"\n        },\n        {\n          \"internalType\": \"int256\",\n          \"name\": \"amount1Wanted\",\n          \"type\": \"int256\"\n        },\n        {\n          \"internalType\": \"bytes\",\n          \"name\": \"\",\n          \"type\": \"bytes\"\n        }\n      ],\n      \"name\": \"uniswapV3SwapCallback\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"unpause\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"shares\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1Min\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"to\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"withdraw\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount0\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"amount1\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ]\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const apechainAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3\", startBlock: 643298 },\n  \"CamelotMultiPositionLiquidityManager\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 643002 },\n  \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 643030 },\n  \"SteerPeriphery\": { address: \"0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e\", startBlock: 643272 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 642937 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 642981 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 642883 },\n  \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 642917 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const arbitrumAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 88699181 },\n  \"CamelotMultiPositionLiquidityManager\": { address: \"0xa2C286BD8E5d2cBA08674ACD202b37d9F922026f\", startBlock: 151369116 },\n  \"GasVault\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 88699087 },\n  \"SteerPeriphery\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 88699141 },\n  \"StrategyRegistry\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 88698868 },\n  \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 88698956 },\n  \"KeeperRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 88698828 },\n  \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 88698903 },\n  \"Helper\": {\n    address: \"0xd1b49Bb21d2c2638CFDdf4B2dC8dbC61DCBCe0ee\",\n    startBlock: 367658396 \n\n  },\n  \"SingleAssetDeposit\": {\n    address: \"0x122126e397677cfd6476c531416b7cbec74c06c8\",\n    startBlock: 367649306 \n  }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const arbitrumgoerliAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 18807200 },\n  \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 18807160 },\n  \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 18807185 },\n  \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 18804021 },\n  \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 18805793 },\n  \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 18804003 },\n  \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 18804037 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const astarAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 5466115 },\n  \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 5465971 },\n  \"SteerPeriphery\": { address: \"0x1afD31627170607657224eD4aE701470209C4B2e\", startBlock: 5466109 },\n  \"StrategyRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 5465955 },\n  \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 5465965 },\n  \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 5465944 },\n  \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 5465950 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const astarzkevmAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 215291 },\n  \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 215237 },\n  \"SteerPeriphery\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 215281 },\n  \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 210939 },\n  \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 210954 },\n  \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 210922 },\n  \"Orchestrator\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 210932 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const avalancheAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0x925C4454820b2b88c2f70F2621E6890b451266Dd',\n    startBlock: 30433379,\n  },\n  Orchestrator: {\n    address: '0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77',\n    startBlock: 30433780,\n  },\n  StrategyRegistry: {\n    address: '0x09eb271b444d1db7163c8555919dE85b20Be7D1d',\n    startBlock: 30433735,\n  },\n  VaultRegistry: {\n    address: '0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc',\n    startBlock: 30434642,\n  },\n  BundleRegistry: {\n    address: '0x87A37bEEcE2918A342F95773Bea7cAA6823c6DC3',\n    startBlock: 30435305,\n  },\n  DynamicJobs: {\n    address: '0x7c464A0AB1f5ebf3E2dCccfec7EF41D02ED7a2f4',\n    startBlock: 30435322,\n  },\n  GasVault: {\n    address: '0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4',\n    startBlock: 30434925,\n  },\n  WhitelistRegistry: {\n    address: '0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9',\n    startBlock: 30434591,\n  },\n  SteerPeriphery: {\n    address: '0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e',\n    startBlock: 30435289,\n  },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const bartiotestAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n  \"GasVault\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n  \"SteerPeriphery\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n  \"StrategyRegistry\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n  \"VaultRegistry\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n  \"KeeperRegistry\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n  \"Orchestrator\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const baseAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 2092242 },\n  \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 2092217 },\n  \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 2092232 },\n  \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 2092162 },\n  \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 2092181 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 2092152 },\n  \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 2092171 },\n  \"Helper\": {\n    address: \"0xa98376572375692455172f6750C67339667974fe\",\n    startBlock: 17910406\n  },\n  \"SingleAssetDeposit\": {\n    address: \"0x588B34D2a9598497f481A9d31B4eD372C6135f32\",\n    startBlock: 48700149 \n  }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const blastAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 417476 },\n  \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 417398 },\n  \"SteerPeriphery\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 417462 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 411072 },\n  \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 417373 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 411010 },\n  \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 411025 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const bscAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x36C796BcA1E8E4031D3FdFA1ff0FA5EF429e0ED2\", startBlock: 28461525 },\n  \"GasVault\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 28461501 },\n  \"SteerPeriphery\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 28461517 },\n  \"StrategyRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 28461392 },\n  \"VaultRegistry\": { address: \"0x31e4ee367d4f2685BAfcAb9566e9C87E60D48983\", startBlock: 28461459 },\n  \"KeeperRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 28461329 },\n  \"Orchestrator\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 28461434 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const celoAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 19813153 },\n  \"GasVault\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 19813141 },\n  \"SteerPeriphery\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 19813148 },\n  \"StrategyRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 19813118 },\n  \"VaultRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 19813127 },\n  \"KeeperRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 19813113 },\n  \"Orchestrator\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 19813123 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const evmosAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 13671980 },\n  \"GasVault\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 13671912 },\n  \"SteerPeriphery\": { address: \"0x1afD31627170607657224eD4aE701470209C4B2e\", startBlock: 13671971 },\n  \"StrategyRegistry\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 13671887 },\n  \"VaultRegistry\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 13671900 },\n  \"KeeperRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 13671871 },\n  \"Orchestrator\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 13671882 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const fantomAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xCF9b0A9D456d6325Bc3B508aB67365D697fe0590\", startBlock: 76157142 },\n  \"GasVault\": { address: \"0x7760D5cb6366dD1dEad394012186202B1834cDE5\", startBlock: 76157028 },\n  \"SteerPeriphery\": { address: \"0xcb77e4C30D92c8b959811E99213625C7b9490b96\", startBlock: 76157080 },\n  \"StrategyRegistry\": { address: \"0xEfecC1cEb7325C269fdb6337208E096f73f76CeD\", startBlock: 76156961 },\n  \"VaultRegistry\": { address: \"0x4DE18F1582Aa71671828F329B826ad45B2798b12\", startBlock: 76156993 },\n  \"KeeperRegistry\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 76156897 },\n  \"Orchestrator\": { address: \"0xc38507394FAdcf1a421BC4103FD66151089FbcfE\", startBlock: 76156977 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const filecoinAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 4333421 },\n  \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 4333398 },\n  \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 4333415 },\n  \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 4333366 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 4333381 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 4333359 },\n  \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 4333373 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const flareAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x9fCFb37f7ED723dE280F5E1D3617aB7d06caaa0A\", startBlock: 26092328 },\n  \"GasVault\": { address: \"0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3\", startBlock: 26092127 },\n  \"SteerPeriphery\": { address: \"0x7Daa68204232a78dBF1Dd853a4018330EE934A39\", startBlock: 26092312 },\n  \"StrategyRegistry\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 26092027 },\n  \"VaultRegistry\": { address: \"0x64F9A121Ccbb8956249Ed52C4f63d0f759da53Ce\", startBlock: 26092102 },\n  \"KeeperRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 26092014 },\n  \"Orchestrator\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 26092087 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const goerliAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x908fA92f4eFA88d7CE2E4DE86127Ca7868978FbE\", startBlock: 8829474 },\n  \"GasVault\": { address: \"0xfE838bF793202E7d479a34bF28C2CA939194895F\", startBlock: 8829435 },\n  \"SteerPeriphery\": { address: \"0x4023AB29dd224Bf5eD71fe5e2Be92637d0176c4C\", startBlock: 8829448 },\n  \"StrategyRegistry\": { address: \"0xD9BbcE593e47AebF12f3Eb2c4Ca6EA03E13e7E77\", startBlock: 8829280 },\n  \"VaultRegistry\": { address: \"0x93a76EAb5bE3c25Cd9f0B53e68173d811D8728dE\", startBlock: 8829407 },\n  \"KeeperRegistry\": { address: \"0x8b313438E027bC6d5FA45D09603B6290d97bc62d\", startBlock: 8829267 },\n  \"Orchestrator\": { address: \"0x03d300515dF6f5b4e1C4F2772F3fC3089B023d96\", startBlock: 8829376 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const kavaAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xfb4F2358F8677e1309868aBce4c447A55eAfb326\", startBlock: 5915652 },\n  \"GasVault\": { address: \"0x7c31a819a36E29939058b61fDAEA28bC3CFb66B8\", startBlock: 5915251 },\n  \"SteerPeriphery\": { address: \"0xf90107890B640387ec3b0474F0c61674AEbCb510\", startBlock: 5915571 },\n  \"StrategyRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 5915194 },\n  \"VaultRegistry\": { address: \"0xe240B9a2936f6Fb8860219bC059349e50F03492e\", startBlock: 5915232 },\n  \"KeeperRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5915167 },\n  \"Orchestrator\": { address: \"0xDe6024872d45032B9C62c2E015d2bcff2922B337\", startBlock: 5915211 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const lineaAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xE431A1dE6F37cD08AAA8821F83bD2157857E8172\", startBlock: 656320 },\n  \"GasVault\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 656313 },\n  \"SteerPeriphery\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 656317 },\n  \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 656297 },\n  \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 656303 },\n  \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 656294 },\n  \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 656300 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\nexport const localhostAddresses = {\n  \"BundleRegistry\": \"0x63B2bF39E0D7bbF5DBE49dD356CA8BA19B175794\",\n  \"GasVault\": \"0xaD0AB54da38B9f7b7b9fAD14404a8e05Aaa7679f\",\n  \"SteerPeriphery\": \"0xC09c86CA28e4252D01aaC3F2dbFDa21A93a034fb\",\n  \"StrategyRegistry\": \"0xb86e6ED9FDd7eFD408462092cA7C270D44Ce62F1\",\n  \"VaultRegistry\": \"0x80df25e3a384BeAA65D48E6d40b0304589510536\"\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const ethAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x38E6291bADD1680054A3fB67f449F8848444Dfa4\", startBlock: 21701103 },\n  \"GasVault\": { address: \"0xa3137A5F54f803BDf0c0209a11EE41446f0C2AfA\", startBlock: 21701090 },\n  \"SteerPeriphery\": { address: \"0xCEBF1A54A9Ce703FC80967760b5A6cbDb4111099\", startBlock: 21701098 },\n  \"StrategyRegistry\": { address: \"0xBb9C7123432B3871b2edF3Cc026c22684F999189\", startBlock: 21701068 },\n  \"VaultRegistry\": { address: \"0x5ef68cc787Cd560ab8b723a2499e9a79c639C647\", startBlock: 21701081 },\n  \"KeeperRegistry\": { address: \"0x86fd6C835FEeA48e1f344d0312D9b081441ced69\", startBlock: 21701065 },\n  \"Orchestrator\": { address: \"0x4867dc4e325C3fF0F676A6316d69180f15bcd463\", startBlock: 21701073 },\n  \"SingleAssetDeposit\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 23239469 },\n  \"Helper\": {\n    address: \"0x18F89CD017f58837721C05ff0aD309ACf7B4087C\",\n    startBlock: 21701078\n    \n  },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const mantaAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 407259 },\n  \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 407252 },\n  \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 407256 },\n  \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 407239 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 407246 },\n  \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 407236 },\n  \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 407243 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const mantleAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x7c31a819a36E29939058b61fDAEA28bC3CFb66B8\", startBlock: 48569983 },\n  \"GasVault\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 48569748 },\n  \"SteerPeriphery\": { address: \"0x36C796BcA1E8E4031D3FdFA1ff0FA5EF429e0ED2\", startBlock: 48569965 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 48569697 },\n  \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 48569734 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 48569643 },\n  \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 48569676 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const metisAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xB27a61fAf33d2F6ad7Af8CC2512C3b58901F779B\", startBlock: 6067804 },\n  \"GasVault\": { address: \"0x31e4ee367d4f2685BAfcAb9566e9C87E60D48983\", startBlock: 6067770 },\n  \"SteerPeriphery\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 6067794 },\n  \"StrategyRegistry\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 6067712 },\n  \"VaultRegistry\": { address: \"0x116Dba5DcE9CcDA828218b7eB46406810632014C\", startBlock: 6067741 },\n  \"KeeperRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 6067702 },\n  \"Orchestrator\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 6067725 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const modeAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 5307828 },\n  \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 5307798 },\n  \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 5307816 },\n  \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 5307749 },\n  \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 5307774 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 5307737 },\n  \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 5307762 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const moonbeamAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xbfd2E0C4cF82d91ec13731e7bc14Ac6120cd01F5\", startBlock: 8677441 },\n  \"GasVault\": { address: \"0x00D0Cc8Db826dA3F68B0F645acC7785F917aAff8\", startBlock: 8677412 },\n  \"SteerPeriphery\": { address: \"0xa4a2f232C92f2DE7181E9fe4d46297FbBb4afaaA\", startBlock: 8677428 },\n  \"StrategyRegistry\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 8677373 },\n  \"VaultRegistry\": { address: \"0xE11709193e7b2E0a0F2a4591022cFf4f01E75050\", startBlock: 8677394 },\n  \"KeeperRegistry\": { address: \"0xa3fd4B3BD38aB8BBF3f26BB17aA410222B9965Bc\", startBlock: 8677361 },\n  \"Orchestrator\": { address: \"0xEfecC1cEb7325C269fdb6337208E096f73f76CeD\", startBlock: 8677382 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const mumbaiAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 35213026 },\n  \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 35213005 },\n  \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 35213018 },\n  \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 35212955 },\n  \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 35212977 },\n  \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 35212946 },\n  \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 35212964 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const okxtestnetAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x2cDAD0Cfa7D5cFc1e54E9f4b9dAcBcFd51b7c466\", startBlock: 10562524 },\n  \"GasVault\": { address: \"0x93470e5d4aFFab0CE2E80D47be420C42F0EB9692\", startBlock: 10562507 },\n  \"SteerPeriphery\": { address: \"0x22Ee5c43031F045f792cCd81c8fEcf70e51B1011\", startBlock: 10562516 },\n  \"StrategyRegistry\": { address: \"0x1673a527836C577c8807480C89CE6de529ab0017\", startBlock: 10562093 },\n  \"VaultRegistry\": { address: \"0xEfE1A4a97181d37d9Fd2aacb306E9a2dB956Ccdd\", startBlock: 10562483 },\n  \"KeeperRegistry\": { address: \"0x125116e39Ec5CECfE29F3d139050cd036Ea2ce19\", startBlock: 10562075 },\n  \"Orchestrator\": { address: \"0xD259853e5d3DB0844f1E70fB876AEdEfBb021148\", startBlock: 10562445 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const optimismAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x64F9A121Ccbb8956249Ed52C4f63d0f759da53Ce\", startBlock: 97061023 },\n  \"GasVault\": { address: \"0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e\", startBlock: 97060844 },\n  \"SteerPeriphery\": { address: \"0x7c464A0AB1f5ebf3E2dCccfec7EF41D02ED7a2f4\", startBlock: 97060953 },\n  \"StrategyRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 96971404 },\n  \"VaultRegistry\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 96971465 },\n  \"KeeperRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 96971378 },\n  \"Orchestrator\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 96971425 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const optimismgoerliAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xdA97EfAa1576FA251D18dcdddFC51A1dE218189f\", startBlock: 8886190 },\n  \"GasVault\": { address: \"0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b\", startBlock: 8886163 },\n  \"SteerPeriphery\": { address: \"0x5248661e4fd7c59C87222806506E905752978800\", startBlock: 8886179 },\n  \"StrategyRegistry\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 8885948 },\n  \"VaultRegistry\": { address: \"0xAd406Cd438f8b28695B9dac2BB18B92B92f01BbF\", startBlock: 8886127 },\n  \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 8885936 },\n  \"Orchestrator\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 8886113 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const polygonAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x3cEa6c4d74d84aF61d9Dc4AA59a69bBf9fE0A5e1\", startBlock: 41535643 },\n  \"GasVault\": { address: \"0xAEF566edD7f25D50b584e4227F62cB5A2e2eBae7\", startBlock: 41535585 },\n  \"SteerPeriphery\": { address: \"0x29E1888F7DD0757f2873E494463Ec389dab38D27\", startBlock: 41535635 },\n  \"StrategyRegistry\": { address: \"0x0f88432be83a7AA4608CC6C0dE555bE74c10F5c3\", startBlock: 41535505 },\n  \"VaultRegistry\": { address: \"0x24825B3C44742600D3995d1D3760cceE999A7f0b\", startBlock: 41535540 },\n  \"KeeperRegistry\": { address: \"0x40402363fD11729183108b10DC96776675229ae7\", startBlock: 41535492 },\n  \"Orchestrator\": { address: \"0x76C9557c63ECFB3a3215A9e7fDA9245b672f521a\", startBlock: 41535523 },\n  \"Helper\": {\n    address: \"0x526e12c87dc9d48623D28e24d997EF81EcA22133\",\n    startBlock: 74667935\n  },\n  \"SingleAssetDeposit\": {\n    address: \"0x7c0222afd475e707b48c6dae27cd2a16d2643218\",\n    startBlock: 75114382\n    \n  }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const polyzkevmAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 1022506 },\n  \"GasVault\": { address: \"0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA\", startBlock: 1022454 },\n  \"SteerPeriphery\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 1022486 },\n  \"StrategyRegistry\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 1022115 },\n  \"VaultRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 1022413 },\n  \"KeeperRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 1022098 },\n  \"Orchestrator\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 1022377 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const rootstockAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 6413199 },\n  \"GasVault\": { address: \"0x5D8249e3F5f702e1Fd720167b40424fc2daDCd1e\", startBlock: 6413185 },\n  \"SteerPeriphery\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 6413193 },\n  \"StrategyRegistry\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 6413160 },\n  \"VaultRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 6413173 },\n  \"KeeperRegistry\": { address: \"0x9f5b097AD23e2CF4F34e502A3E41D941678877Dc\", startBlock: 6413154 },\n  \"Orchestrator\": { address: \"0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA\", startBlock: 6413166 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const scrollAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 287617 },\n  \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 287579 },\n  \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 287609 },\n  \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 287545 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 287562 },\n  \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 287537 },\n  \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 287553 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const seiAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x391cf3047db983caB8dD95B16c4e6C3918d72d23\", startBlock: 119979618 },\n  \"GasVault\": { address: \"0x4Cb98E1eeef513086B6a724f6B5401031b125649\", startBlock: 119979437 },\n  \"SteerPeriphery\": { address: \"0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B\", startBlock: 119979598 },\n  \"StrategyRegistry\": { address: \"0xB1B736e7189ea99634f33EC199a1753E6CC7171C\", startBlock: 119979272 },\n  \"VaultRegistry\": { address: \"0xa3fd4B3BD38aB8BBF3f26BB17aA410222B9965Bc\", startBlock: 119979309 },\n  \"KeeperRegistry\": { address: \"0x9fCFb37f7ED723dE280F5E1D3617aB7d06caaa0A\", startBlock: 119979224 },\n  \"Orchestrator\": { address: \"0xb944789b5C962f1096Ce8674456E68fb0F2e3BB7\", startBlock: 119979256 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const sonicAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 474917 },\n  \"GasVault\": { address: \"0x9A9E78387c21d88138481dA872E1DbaEF71078B2\", startBlock: 474894 },\n  \"SteerPeriphery\": { address: \"0xb95572432c935f62E25376280724FDbAD9F8F755\", startBlock: 474909 },\n  \"StrategyRegistry\": { address: \"0x169133E32C4A68Ad0F922c567Db816951000f0AA\", startBlock: 474861 },\n  \"VaultRegistry\": { address: \"0x253B89EfA5a23B1b0305416973F21F6a11CEfab0\", startBlock: 474881 },\n  \"KeeperRegistry\": { address: \"0x9d72AAc456B5Adf6a557d68EF30862a0755CcCDf\", startBlock: 474855 },\n  \"Orchestrator\": { address: \"0x8cB05d7b3B525070f489167DbB9C0f174e1FB137\", startBlock: 474869 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const taikoAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xAa4448AeF5f5967693751BFB67197946BB6D1dC0\", startBlock: 35165 },\n  \"GasVault\": { address: \"0xC1Ecd10398A6D7036CceE1f50551ff169715081c\", startBlock: 34588 },\n  \"SteerPeriphery\": { address: \"0xD40699A642172DeD33BCFe4E3F84D54610C757Cd\", startBlock: 35160 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 34577 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 34583 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 34571 },\n  \"Orchestrator\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 34575 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const telosAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x806c2240793b3738000fcb62C66BF462764B903F\", startBlock: 337121451 },\n  \"GasVault\": { address: \"0x3B41454CB7858B6D0535e61bAe9362AF0151Cc2d\", startBlock: 337121367 },\n  \"SteerPeriphery\": { address: \"0x16BA7102271dC83Fff2f709691c2B601DAD7668e\", startBlock: 337121426 },\n  \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 337121273 },\n  \"VaultRegistry\": { address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\", startBlock: 337121319 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 337121247 },\n  \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 337121296 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const thundercoreAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 135181905 },\n  \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 135181876 },\n  \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 135181890 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 135181826 },\n  \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 135181847 },\n  \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 135181811 },\n  \"Orchestrator\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 135181840 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const xlayerAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 653519 },\n  \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 653502 },\n  \"SteerPeriphery\": { address: \"0xab36D30C1A1C683037Bd7AAC67f29B2e3ECC6576\", startBlock: 653511 },\n  \"StrategyRegistry\": { address: \"0xF4de4180829272ae5f69AcAcf820f4F7d547513b\", startBlock: 653475 },\n  \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 653490 },\n  \"KeeperRegistry\": { address: \"0x99eca0E5Db125900E3a0389F6D3503837e99F59b\", startBlock: 653467 },\n  \"Orchestrator\": { address: \"0xd964811233b8A0185D3C93664df82136C80d1bb2\", startBlock: 653482 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const zircuitAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5524154 },\n  \"GasVault\": { address: \"0xe1C56f99a459ED47B629F3D818BcC84826bCed66\", startBlock: 5522254 },\n  \"SteerPeriphery\": { address: \"0xD90c8970708FfdFC403bdb56636621e3E9CCe921\", startBlock: 5524033 },\n  \"StrategyRegistry\": { address: \"0x317EEDB54711681056f37e10d5DE0B55455b476f\", startBlock: 5522181 },\n  \"VaultRegistry\": { address: \"0x38a07152ee64C7067fEeBA904D72ABc9a9DA0C77\", startBlock: 5522213 },\n  \"KeeperRegistry\": { address: \"0x1A7e75715d157736103eC429Ff7079994D907472\", startBlock: 5522168 },\n  \"Orchestrator\": { address: \"0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2\", startBlock: 5522196 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const hemiAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xc9De841A2A00DeaAF9F0E5374Fd5011C952e5f5C\", startBlock: 1390479 },\n  \"GasVault\": { address: \"0xAa4448AeF5f5967693751BFB67197946BB6D1dC0\", startBlock: 1390468 },\n  \"SteerPeriphery\": { address: \"0xd47CE509bE01e62cd4629E2f1eb22BA04e7dA192\", startBlock: 1390475 },\n  \"StrategyRegistry\": { address: \"0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce\", startBlock: 1390398 },\n  \"VaultRegistry\": { address: \"0x37Cff062D52Dd6E9E39Df619CCd30c037a36bB83\", startBlock: 1390406 },\n  \"KeeperRegistry\": { address: \"0x279228AAfd13Bb4642ABB772a248c78555DC39c4\", startBlock: 1390389 },\n  \"Orchestrator\": { address: \"0xE431A1dE6F37cD08AAA8821F83bD2157857E8172\", startBlock: 1390401 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const soneiumAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x15471a7555B9d7dbe8fd577FDE381E8Fb7E7702d\", startBlock: 2154765 },\n  \"GasVault\": { address: \"0x3144706Fd5EF06c8fC1B80494902D0fC0Da8497B\", startBlock: 2154739 },\n  \"SteerPeriphery\": { address: \"0x1e5Fd638E8BF242Ae2a5bdd9ABBfd2681D25aDDC\", startBlock: 2154753 },\n  \"StrategyRegistry\": { address: \"0xb95572432c935f62E25376280724FDbAD9F8F755\", startBlock: 2154691 },\n  \"VaultRegistry\": { address: \"0x371A7af1c64396186DfE0d3D0BdBAf43a0Fd8a09\", startBlock: 2154716 },\n  \"KeeperRegistry\": { address: \"0x2Ca933639900b88346EdB1D1dDF58A752314D566\", startBlock: 2154680 },\n  \"Orchestrator\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 2154701 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const uniAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 8620614 },\n  \"GasVault\": { address: \"0xBcD427Ff26b70E73149858C4898DFa60107bedBe\", startBlock: 8620543 },\n  \"SteerPeriphery\": { address: \"0x01ffCeBd15e2EfFD96ba1c3014c9260ecB575823\", startBlock: 8620593 },\n  \"StrategyRegistry\": { address: \"0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B\", startBlock: 8620443 },\n  \"VaultRegistry\": { address: \"0x6d5A04974ba2CdC3E307135fE5886b8c7C499e9A\", startBlock: 8620494 },\n  \"KeeperRegistry\": { address: \"0xbfd2E0C4cF82d91ec13731e7bc14Ac6120cd01F5\", startBlock: 8620421 },\n  \"Orchestrator\": { address: \"0x391cf3047db983caB8dD95B16c4e6C3918d72d23\", startBlock: 8620465 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const zetaAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x51aC65B177F084455750131A81706C32b466101D\", startBlock: 6576836 },\n  \"GasVault\": { address: \"0x8b82CaF0CDcbbf53F9b071c643609EFE02307536\", startBlock: 6576804 },\n  \"SteerPeriphery\": { address: \"0x42D1316c1ce4E0f143C12771004AFb91a03CaF6d\", startBlock: 6576833 },\n  \"StrategyRegistry\": { address: \"0x918b3E95eE1329D9549E32874db0BF161D516457\", startBlock: 6576795 },\n  \"VaultRegistry\": { address: \"0x49c40936D8430dCBf5787bb6F0F3B26578cc3c12\", startBlock: 6576801 },\n  \"KeeperRegistry\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 6576790 },\n  \"Orchestrator\": { address: \"0x82013a220c21caFEa99381738EDFbC52a6956f90\", startBlock: 6576793 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const beraAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0x6d5A04974ba2CdC3E307135fE5886b8c7C499e9A\", startBlock: 785307 },\n  \"GasVault\": { address: \"0xcfffEc77F478959ef5D6B1AE9f4d9b35D12921E1\", startBlock: 785218 },\n  \"SteerPeriphery\": { address: \"0x71bE4708C86B8AFd6Aa47929Ce073e400B5B7747\", startBlock: 785298 },\n  \"StrategyRegistry\": { address: \"0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a\", startBlock: 785194 },\n  \"VaultRegistry\": { address: \"0x1578228D5c62e2705AEe5BA1DeBd6D9a68830189\", startBlock: 785208 },\n  \"KeeperRegistry\": { address: \"0xDAeed7DA964B212963Ce207660633758fc6ECfec\", startBlock: 785177 },\n  \"Orchestrator\": { address: \"0xB1B736e7189ea99634f33EC199a1753E6CC7171C\", startBlock: 785187 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const katanaAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0xe6C78a5Bb134F00a3111f34b5ee863c82041292F',\n    startBlock: 2202723,\n  },\n  Orchestrator: {\n    address: '0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a',\n    startBlock: 2202743,\n  },\n  StrategyRegistry: {\n    address: '0x27C6b12cC14a498E0E252BD7F3E7Af060eBAB048',\n    startBlock: 2202735,\n  },\n  VaultRegistry: {\n    address: '0x1D04A1f5FD79e09B7692baDeE2846Fd0F90dCF24',\n    startBlock: 2202756,\n  },\n  BundleRegistry: {\n    address: '0x491bf4ACa9a475E107Cfa4BcDd836648B72C34e5',\n    startBlock: 2202801,\n  },\n  GasVault: {\n    address: '0x2CCADD513EBBdc51b135879cb7BC1693CB476ED6',\n    startBlock: 2202776,\n  },\n  WhitelistRegistry: {\n    address: '0xBCF95873ed5397Bc0B2e0A35b06C0dd9Ac84C8B8',\n    startBlock: 2202746,\n  },\n  SteerPeriphery: {\n    address: '0x4DE18F1582Aa71671828F329B826ad45B2798b12',\n    startBlock: 2202791,\n  },\n  StakingRewards: { address: '0x5BBDCB03183f5afE2C9DA5a30E2Cdac1CCd151E1', startBlock: 2202749 },\n  Helper: { address: '0x64833f91Df7E9b5b1f35510a7FEbd213201AA06e', startBlock: 2202749 },\n  FeeManager: { address: '0x7760D5cb6366dD1dEad394012186202B1834cDE5', startBlock: 2202811 },\n  \"SingleAssetDeposit\": {\n    address: \"0x01ffCeBd15e2EfFD96ba1c3014c9260ecB575823\",\n    startBlock: 8260827 \n  }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const sagaAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0xdED9B1e5b1d419106d8C982a0D3fE1bbCB983d87',\n    startBlock: 3008348,\n  },\n  Orchestrator: {\n    address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39',\n    startBlock: 3008357,\n  },\n  StrategyRegistry: {\n    address: '0x1afD31627170607657224eD4aE701470209C4B2e',\n    startBlock: 3008353,\n  },\n  VaultRegistry: {\n    address: '0xe6C78a5Bb134F00a3111f34b5ee863c82041292F',\n    startBlock: 3008375,\n  },\n  BundleRegistry: {\n    address: '0xEfecC1cEb7325C269fdb6337208E096f73f76CeD',\n    startBlock: 3008395,\n  },\n  GasVault: {\n    address: '0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a',\n    startBlock: 3008383,\n  },\n  WhitelistRegistry: {\n    address: '0xc9De841A2A00DeaAF9F0E5374Fd5011C952e5f5C',\n    startBlock: 3008358,\n  },\n  SteerPeriphery: {\n    address: '0x4Cb98E1eeef513086B6a724f6B5401031b125649',\n    startBlock: 3008391,\n  },\n  Helper: {\n    address: \"0xB3d8529332450CFc942F480fDc9Ac5c17805c24b\",\n    startBlock: 3106793\n  },\n  SingleAssetDeposit: {\n    address: \"0xa1330e9017aB685dc34B746005f4DAB0476b16b4\",\n    startBlock: 4003688\n  }\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const bittensorAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0x3B4cAD7D6cd045bD038697a4EaA3AD5A99E5Aa70',\n    startBlock: 8081621,\n  },\n  Orchestrator: {\n    address: '0x588B34D2a9598497f481A9d31B4eD372C6135f32',\n    startBlock: 8081627,\n  },\n  StrategyRegistry: {\n    address: '0xcE33017087582548c996581d1cde9549ea54221d',\n    startBlock: 8081624,\n  },\n  VaultRegistry: {\n    address: '0x83966243D6055b1A1157f800cBC9f5084162b871',\n    startBlock: 8081631,\n  },\n  BundleRegistry: {\n    address: '0x10b988Df6b17B4dF7Fe6DFf6De45346e8fa8376D',\n    startBlock: 8081645,\n  },\n  GasVault: {\n    address: '0x4E4D0040AF576482E7757aD4aE47b4f4587807d6',\n    startBlock: 8081637,\n  },\n  SteerPeriphery: {\n    address: '0x83ee3e4Bcac37f69C133f908E5a704eA9b7d74Eb',\n    startBlock: 8081642,\n  },\n  Helper: {\n    address: '0xEe351402D6A89E4468D2E6fD0f702602AdeAde91',\n    startBlock: 8081629,\n  },\n  FeeManager: {\n    address: '0xC347cB5492360aD29a9Cb14A11ecBF5aa23038C7',\n    startBlock: 8081648,\n  },\n  WhitelistRegistry: {\n    address: '0x6511080422911D210681f5618DBd50DEC3e954de',\n    startBlock: 8081628,\n  },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const robinhoodAddresses: Record<string, Contract> = {\n  KeeperRegistry: { address: '0xF6aB5f1faED774e62D30c2A65e39a5a25F8E14e7', startBlock: 8704501 },\n  Orchestrator: { address: '0x20B895F7C02e754AdC461e80b39a9e85f02e2bE3', startBlock: 8704962 },\n  StrategyRegistry: { address: '0xAc7D3A933c44b4D4bad6D5F0685900482E0d995E', startBlock: 8704773 },\n  VaultRegistry: { address: '0x5c7d564fA5CE0e874367121E33c1ff10dB2115dC', startBlock: 8705247 },\n  BundleRegistry: { address: '0xEe351402D6A89E4468D2E6fD0f702602AdeAde91', startBlock: 8705995 },\n  GasVault: { address: '0x3B4cAD7D6cd045bD038697a4EaA3AD5A99E5Aa70', startBlock: 8705555 },\n  WhitelistRegistry: { address: '0xCD31EbF762A5d1F88399E692316903767DA06Cf9', startBlock: 8705032 },\n  SteerPeriphery: { address: '0xCCd21830A8774484AE824AC05B3784D195686C7e', startBlock: 8705824 },\n  StakingRewards: { address: '0x8c78E9F6336bFC518B6651e3A2d02F745a94B09E', startBlock: 8705422 },\n  Helper: { address: '0x2af1bD206aAf5e74073691707d0A006ae2128ED3', startBlock: 8705074 },\n  FeeManager: { address: '0x22518d0C864F6C6391b76850d96D5fC27a7A45bD', startBlock: 8706188 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const berachainbartioAddresses: Record<string, Contract> = {\n  \"Orchestrator_Proxy\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n  \"StakingRewards_Proxy\": { address: \"0xc97B1df5fBB12339D1493d171E10a30Af60164c0\", startBlock: 5094345 },\n  \"KeeperRegistry_Proxy\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n  \"VaultRegistry_Proxy\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n  \"GasVault\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n  \"SteerPeriphery\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n  \"WhitelistRegistry\": { address: \"0xdAD90649Ee38d6eE64e73231888Cc546978Ef20A\", startBlock: 5094244 },\n  \"KeeperRegistry\": { address: \"0xba318B1141ffD56a0B7C17b4f0A8D258016e79D5\", startBlock: 5094220 },\n  \"BundleRegistry\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n  \"StakingRewards_Implementation\": { address: \"0xa017BDE31e344b18E6474D083581C73B1FA0481e\", startBlock: 5094344 },\n  \"KeeperRegistry_Implementation\": { address: \"0xcD5248462534F637302461342AEE5fF806CB3A30\", startBlock: 5094216 },\n  \"StrategyRegistry_Implementation\": { address: \"0x9B6D9a22628c4672f6d40DF99594a8fB4029599E\", startBlock: 5094233 },\n  \"DefaultProxyAdmin\": { address: \"0xaBd55d8720Bc18ec4CDF79681763D879d3C99039\", startBlock: 5094210 },\n  \"StrategyRegistry_Proxy\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n  \"StrategyRegistry\": { address: \"0x2c9305e4Db122017a751Df245620E36008d30BC8\", startBlock: 5094238 },\n  \"SteerPeriphery_Implementation\": { address: \"0x1c2Ba63289fe76c98A5919A78839b429cf177C00\", startBlock: 5094350 },\n  \"KodiakMultiPositionLiquidityManager\": { address: \"0xE34e9384d04190a3673249E60C75A2D3C30E3F9c\", startBlock: 5094209 },\n  \"SteerPeriphery_Proxy\": { address: \"0xb503E92D4e60b3E4F3c4D1F5037BaBde07994D4C\", startBlock: 5094352 },\n  \"StakingRewards\": { address: \"0xc97B1df5fBB12339D1493d171E10a30Af60164c0\", startBlock: 5094345 },\n  \"Orchestrator_Implementation\": { address: \"0x5891EA0B417bea4316a2D55D63fA7e583476F554\", startBlock: 5094225 },\n  \"Helper\": { address: \"0x7e816Dfd0d141aF36E0bC920b90d748C781334E9\", startBlock: 5094249 },\n  \"FeeManager_Proxy\": { address: \"0x16351b41F131664fF717cA18fe82302abbfCbD7d\", startBlock: 5094363 },\n  \"FeeManager_Implementation\": { address: \"0x512A8641197fE9222DD9558E586612EE3F2B4ea3\", startBlock: 5094360 },\n  \"VaultRegistry\": { address: \"0xa07bE822021cf648632Ab026978541ACa0C785B2\", startBlock: 5094258 },\n  \"BundleRegistry_Implementation\": { address: \"0xA545DdAC80a1DcCc1156A9d7bBa93BB0A8563Bc3\", startBlock: 5094355 },\n  \"VaultRegistry_Implementation\": { address: \"0x95fda2FEE2595D0C0C8a82871df6EA48F188aFe0\", startBlock: 5094254 },\n  \"Orchestrator\": { address: \"0x6d5d2BFc6269e6694FD4578Db74Bc2eA1e082FE1\", startBlock: 5094230 },\n  \"BundleRegistry_Proxy\": { address: \"0xbAa0E7Ac5e57E0d5614762D45D7df574Ed36efB8\", startBlock: 5094358 },\n  \"FeeManager\": { address: \"0x16351b41F131664fF717cA18fe82302abbfCbD7d\", startBlock: 5094363 },\n  \"GasVault_Implementation\": { address: \"0x4Be69FCff456216B98467A564f5f9B4BFb1792Fe\", startBlock: 5094266 },\n  \"GasVault_Proxy\": { address: \"0x2870B7F2469FBABa16aAabc3d642216685C94E1f\", startBlock: 5094269 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const coreAddresses: Record<string, Contract> = {\n  BundleRegistry: { address: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3', startBlock: 23460135 },\n  GasVault: { address: '0xC1Ecd10398A6D7036CceE1f50551ff169715081c', startBlock: 23460078 },\n  SteerPeriphery: { address: '0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e', startBlock: 23460128 },\n  StrategyRegistry: { address: '0x8fB2Cd40046b08F155d06C3A31b69C1Bd2C971e2', startBlock: 23460063 },\n  VaultRegistry: { address: '0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9', startBlock: 23460073 },\n  KeeperRegistry: { address: '0xf71Bb63b641031150220f84Fa0326F851ecb3d30', startBlock: 23460052 },\n  Orchestrator: { address: '0x925C4454820b2b88c2f70F2621E6890b451266Dd', startBlock: 23460059 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const tataratestnetAddresses: Record<string, Contract> = {\n  \"BundleRegistry\": { address: \"0xaA98e8f03F528B73157E30a17de3EC40dB7382fE\", startBlock: 1115328 },\n  \"GasVault\": { address: \"0x795BF9303441ef0b1134220d9142A49d8212260C\", startBlock: 1115180 },\n  \"SteerPeriphery\": { address: \"0x2DBca2283f74cB663d1E0E7A85dFf46938B24c87\", startBlock: 1115320 },\n  \"StrategyRegistry\": { address: \"0x13c422072097C7488c1bB9ff28D95798Aa0cDBFA\", startBlock: 1115072 },\n  \"VaultRegistry\": { address: \"0x22Ee5c43031F045f792cCd81c8fEcf70e51B1011\", startBlock: 1115087 },\n  \"KeeperRegistry\": { address: \"0xb78e325915b10D02BA75C24C2bdae7197BBA65ef\", startBlock: 1115057 },\n  \"Orchestrator\": { address: \"0x7bE509f52EBBC41855b3213Fc743B2b865635f20\", startBlock: 1115064 },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n    address: string;\n    startBlock?: number;\n  }\n  \n  export const zklinknovaAddresses: Record<string, Contract> = {\n    \"GasVault\": { address: \"0x57174e55abFaa7d858F8a4C395967FFaF990190A\", startBlock: 34588 },\n    \"SteerPeriphery\": { address: \"0x525b443C8d2D0aA8Bd70d22177EC6250286b9708\", startBlock: 35160 },\n    \"WhitelistRegistry\": { address: \"0x5cC4EA2EbC2F0fF5783A6b21653d23849a6a000f\", startBlock: 34579 },\n    \"KeeperRegistry\": { address: \"0x340C336E0e549e020DedD966F667c7B77D37C513\", startBlock: 34571 },\n    \"BundleRegistry\": { address: \"0x0c38a501079bD12CE350431246311c21231f1242\", startBlock: 35165 },\n    \"StrategyRegistry\": { address: \"0xd58a20afa275D400e4f74c3e822Eb06BDBbee259\", startBlock: 34577 },\n    \"StakingRewards\": { address: \"0x92984a7df4Dc7Cb963eAb076738E2D1Be6453d77\", startBlock: 35157 },\n    \"Helper\": { address: \"0xd401d054fAA7A304d0412982A63d9aC39eb5b3b4\", startBlock: 34580 },\n    \"VaultRegistry\": { address: \"0xFB3b5b859B08Dc86fDA0aF9332E5Ca4cF6689d66\", startBlock: 34583 },\n    \"Orchestrator\": { address: \"0xa5cF70F6e4e236De8c778Bc89741c617816f73aF\", startBlock: 34575 },\n    \"FeeManager\": { address: \"0x7581aC01c19B57408Dd1Bd2ed2cea899BeFEE7dA\", startBlock: 34594 },\n  } as const;\n  ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n    address: string;\n    startBlock?: number;\n  }\n  \n  export const peaqAddresses: Record<string, Contract> = {\n    \"BundleRegistry\": { address: \"0xdca3251Ebe8f85458E8d95813bCb816460e4bef1\", startBlock: 5383056 },\n    \"GasVault\": { address: \"0x30138931Beab8eE0233F8a094660c60A4383eb21\", startBlock: 5383001 },\n    \"SteerPeriphery\": { address: \"0xcA19bEc25A41443F35EeAE03411Dce87D8c0Edc4\", startBlock: 5383047 },\n    \"StrategyRegistry\": { address: \"0x925C4454820b2b88c2f70F2621E6890b451266Dd\", startBlock: 5382980 },\n    \"VaultRegistry\": { address: \"0xa1Dd21fbd9e1F0BF28d41F18bDC22326e50C02e9\", startBlock: 5382992 },\n    \"KeeperRegistry\": { address: \"0xf71Bb63b641031150220f84Fa0326F851ecb3d30\", startBlock: 5382976 },\n    \"Orchestrator\": { address: \"0x09eb271b444d1db7163c8555919dE85b20Be7D1d\", startBlock: 5382986 },\n    \"Helper\": {\n      address: \"0x2822eE30383EAbCBA817Ab4A7a592F4a194e14b5\",\n      startBlock: 5382988\n    },\n    \"SingleAssetDeposit\": {\n      address: \"0x1C735AdFe82133DdA6a08b81b813e4D7aff3b32a\",\n      startBlock: 6429095\n    }\n  } as const;\n  ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n    address: string;\n    startBlock?: number;\n  }\n  \n  export const roninAddresses: Record<string, Contract> = {\n    \"BundleRegistry\": { address: \"0x82013a220c21caFEa99381738EDFbC52a6956f90\", startBlock: 45874579 },\n    \"GasVault\": { address: \"0xcb77e4C30D92c8b959811E99213625C7b9490b96\", startBlock: 45874479 },\n    \"SteerPeriphery\": { address: \"0x7bb362141BB277C7609519e9fBA4927A5e2e5cC7\", startBlock: 45874567 },\n    \"StrategyRegistry\": { address: \"0x491bf4ACa9a475E107Cfa4BcDd836648B72C34e5\", startBlock: 45874447 },\n    \"VaultRegistry\": { address: \"0xac4D51669B80D09d8Cc5EeFF50026c4d1D3290e6\", startBlock: 45874467 },\n    \"KeeperRegistry\": { address: \"0xE11709193e7b2E0a0F2a4591022cFf4f01E75050\", startBlock: 45874428 },\n    \"Orchestrator\": { address: \"0x9427EA2b2262CC5f2F1876F85eFF4e48Fe33A8b2\", startBlock: 45874439 },\n  } as const;\n  ","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const nibiruAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0x1D04A1f5FD79e09B7692baDeE2846Fd0F90dCF24',\n    startBlock: 25374486,\n  },\n  Orchestrator: {\n    address: '0x2CCADD513EBBdc51b135879cb7BC1693CB476ED6',\n    startBlock: 25374513,\n  },\n  StrategyRegistry: {\n    address: '0x5BBDCB03183f5afE2C9DA5a30E2Cdac1CCd151E1',\n    startBlock: 25374497,\n  },\n  VaultRegistry: {\n    address: '0x3Add6C19e86C22B2fe5AD9c328C0C3Db88382534',\n    startBlock: 25374534,\n  },\n  BundleRegistry: {\n    address: '0xCF9b0A9D456d6325Bc3B508aB67365D697fe0590',\n    startBlock: 25374594,\n  },\n  GasVault: {\n    address: '0xa98376572375692455172f6750C67339667974fe',\n    startBlock: 25374560,\n  },\n  WhitelistRegistry: {\n    address: '0x215431CF4699f8bb01F339E09E9603F2975b2997',\n    startBlock: 25374516,\n  },\n  SteerPeriphery: {\n    address: '0xcb77e4C30D92c8b959811E99213625C7b9490b96',\n    startBlock: 25374582,\n  },\n  \"SingleAssetDeposit\": {\n    address: \"0x4e48fced3b4cd92bbfba0314ed844046a91c4fd5\",\n    startBlock: 32069570\n  },\n  \"Helper\": {\n    address: \"0xc38507394FAdcf1a421BC4103FD66151089FbcfE\",\n    startBlock: 25374521\n  },\n} as const;\n","// This file is auto-generated. Do not edit directly.\n\ninterface Contract {\n  address: string;\n  startBlock?: number;\n}\n\nexport const hyperevmAddresses: Record<string, Contract> = {\n  KeeperRegistry: {\n    address: '0x5920168d62238e28e147BEdC0f5eDF02eB6b66f1',\n    startBlock: 14721941,\n  },\n  Orchestrator: {\n    address: '0xb031c61cE15fC62de2Bea264A2d7ac467e5B1e53',\n    startBlock: 14722124,\n  },\n  StrategyRegistry: {\n    address: '0x324e36ad36D204831a7E1eFD1FF882384499F4C0',\n    startBlock: 14722368,\n  },\n  VaultRegistry: {\n    address: '0x210770DEDbB70d269969ac9415241ca4A7b30341',\n    startBlock: 14723039,\n  },\n  BundleRegistry: {\n    address: '0x221b9F402d33dB2F48725782644fB2dd3090e08f',\n    startBlock: 14724137,\n  },\n  GasVault: {\n    address: '0xB8a1C40cE7e0ea1121D016913E32a73004819e24',\n    startBlock: 14723222,\n  },\n  WhitelistRegistry: {\n    address: '0xfEcB56d58B7f70A0EB2E3822fE7C4Eb959095F63',\n    startBlock: 14722490,\n  },\n  SteerPeriphery: {\n    address: '0x40CA241eE876caF5BFa9c0724069f082473a6fFC',\n    startBlock: 14723954,\n  },\n\n  StakingRewards: { address: '0xbE0De6ea74EC22840e4cf91a85aA3F139787ac9e', startBlock: 14723771 },\n  Helper: { address: '0xc98D361ef423fef0174643b42b6f3B018111Ae6a', startBlock: 14722795 },\n  FeeManager: { address: '0x8BfAdC53bfd06F051685b42690076d9c94aaBCBd', startBlock: 14724320 },\n  SingleAssetDeposit: {\n    address: '0x776bddf9b0513f4e2f4622c55c32d5b56fb54927',\n    startBlock: 20161135,\n  },\n} as const;\n","// This file is generated from @steerprotocol/contracts deployment JSON.\n// It is intentionally scoped to FeeManager addresses only.\nexport interface FeeManagerDeployment {\n  address: string;\n  startBlock?: number;\n}\n\nexport const feeManagerContractsByChainId: Record<number, FeeManagerDeployment> = {\n  14: { address: '0xb944789b5C962f1096Ce8674456E68fb0F2e3BB7' },\n  30: { address: '0xAa4448AeF5f5967693751BFB67197946BB6D1dC0' },\n  40: { address: '0xE431A1dE6F37cD08AAA8821F83bD2157857E8172' },\n  146: { address: '0x51aC65B177F084455750131A81706C32b466101D' },\n  199: { address: '0xdca3251Ebe8f85458E8d95813bCb816460e4bef1' },\n  314: { address: '0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce' },\n  1284: { address: '0xfF42cD42d8a5812CB38fb3C0720Dfc490912f48B' },\n  1301: { address: '0xEd3420D9A8D42FAA8D054D284ed2bdd17a6Bca2b' },\n  1329: { address: '0x9790aFEc5d23a840bC0597D9F54584057254d190' },\n  8453: { address: '0xac4D51669B80D09d8Cc5EeFF50026c4d1D3290e6' },\n  33139: { address: '0xd47CE509bE01e62cd4629E2f1eb22BA04e7dA192' },\n  34443: { address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39' },\n  43114: { address: '0x391cf3047db983caB8dD95B16c4e6C3918d72d23' },\n  48900: { address: '0x0C5c5BEB833fD382b04e039f151942DC3D9A60ce' },\n  59144: { address: '0xBcD427Ff26b70E73149858C4898DFa60107bedBe' },\n  80084: { address: '0x0D3Ea88C8C3cb26EF21ab9E9ac6D178602Ef2779' },\n  81457: { address: '0x7Daa68204232a78dBF1Dd853a4018330EE934A39' },\n  167000: { address: '0x254d37F5eD7E96fc2d242CB06B17FAe1EE9E1ADA' },\n  534352: { address: '0xa4a2f232C92f2DE7181E9fe4d46297FbBb4afaaA' },\n};\n","import { Chain, ChainId } from \"./chain.js\";\nimport { apechainAddresses, astarAddresses, astarzkevmAddresses, avalancheAddresses, baseAddresses, beraAddresses, blastAddresses, bscAddresses, celoAddresses, ethAddresses, evmosAddresses, fantomAddresses, filecoinAddresses, flareAddresses, hemiAddresses, katanaAddresses, kavaAddresses, lineaAddresses, mantaAddresses, mantleAddresses, metisAddresses, modeAddresses, moonbeamAddresses, okxtestnetAddresses, polyzkevmAddresses, robinhoodAddresses, rootstockAddresses, sagaAddresses, scrollAddresses, seiAddresses, soneiumAddresses, sonicAddresses, taikoAddresses, telosAddresses, thundercoreAddresses, uniAddresses, xlayerAddresses, zetaAddresses, zircuitAddresses } from \"./deployments/index.js\";\nimport { arbitrumAddresses } from \"./deployments/arbitrum.js\";\nimport { berachainbartioAddresses } from \"./deployments/berachainbartio.js\";\nimport { bittensorAddresses } from \"./deployments/bittensor.js\";\nimport { coreAddresses } from \"./deployments/core.js\";\nimport { optimismAddresses } from \"./deployments/optimism.js\";\nimport { polygonAddresses } from \"./deployments/polygon.js\";\nimport { tataratestnetAddresses } from \"./deployments/tataratestnet.js\";\nimport { zklinknovaAddresses } from \"./deployments/zklinknova.js\";\nimport { peaqAddresses } from \"./deployments/peaq.js\";\nimport { roninAddresses } from \"./deployments/ronin.js\";\nimport { nibiruAddresses } from \"./deployments/nibiru.js\";\nimport { hyperevmAddresses } from \"./deployments/hyperevm.js\";\nimport { feeManagerContractsByChainId } from './feeManagerContracts.js';\n\n/**\n * Interface representing a smart contract with its address and optional start block\n */\nexport interface Contract {\n  /** The contract's deployed address */\n  address: string;\n  /** The block number where the contract was deployed */\n  startBlock?: number;\n}\n\n/**\n * Interface defining the structure of contract addresses for a protocol\n */\nexport interface ContractAddresses {\n  /** Keeper Registry contract */\n  KeeperRegistry: Contract;\n  /** Orchestrator contract */\n  Orchestrator: Contract;\n  /** Strategy Registry contract */\n  StrategyRegistry: Contract;\n  /** Vault Registry contract */\n  VaultRegistry: Contract;\n  /** Bundle Registry contract */\n  BundleRegistry: Contract;\n  /** Steer Periphery contract */\n  SteerPeriphery: Contract;\n  /** Gas Vault contract */\n  GasVault: Contract;\n  /** Optional Runner Registry contract */\n  RunnerRegistry?: Contract;\n  /** Optional Pool Helper contract */\n  PoolHelper?: Contract;\n  /** Optional Whitelist Registry contract */\n  WhitelistRegistry?: Contract;\n  /** Optional Dynamic Jobs contract */\n  DynamicJobs?: Contract;\n  /** Optional Steer Token contract */\n  SteerToken?: Contract;\n  /** Optional Static Jobs contract */\n  StaticJobs?: Contract;\n\n  Helper?:Contract\n\n  SingleAssetDeposit?:Contract\n  FeeManager?: Contract\n}\n\n/**\n * Interface extending ContractAddresses with network-specific configuration\n */\nexport interface NetworkConfig extends ContractAddresses {\n  /** Chain ID of the network */\n  chainId: number;\n  /** Transaction type used on the network (0 = legacy, 1 = EIP-2930, 2 = EIP-1559) */\n  transactionType: number;\n  /** Address of the network's native token wrapper contract */\n  address: string;\n  /** Optional chain name */\n  name: Chain;\n  /** Whether token wrapping is enabled on this network */\n  isWrappingEnabled?: boolean;\n  /** Symbol of the wrapped native token */\n  wrappedNativeToken?: string;\n}\n\n/**\n * Type representing the contract name keys from ContractAddresses\n */\nexport type ContractName = keyof ContractAddresses;\n\n/**\n * Interface mapping Chain enum values to their NetworkConfig\n */\nexport interface Networks extends Record<Chain, NetworkConfig> {}\n\nexport const networks: Networks = {\n  \n  [Chain.Polygon]: {\n    address: \"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270\",\n    name: Chain.Polygon,\n    isWrappingEnabled: true,\n    wrappedNativeToken: \"WMATIC\",\n    chainId: ChainId.Polygon,\n    ...(polygonAddresses as unknown as ContractAddresses),\n    PoolHelper: {\n      address: \"0xa7da6196B871A53f6aEC27F9EA4BBC39C1390EF4\",\n      startBlock: 59943299,\n    },\n    transactionType: 2,\n  },\n  [Chain.Optimism]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Optimism,\n    ...(optimismAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Optimism,\n    wrappedNativeToken: \"WETH\",\n    transactionType: 0,\n  },\n  [Chain.Arbitrum]: {\n    address: \"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n    name: Chain.Arbitrum,\n    isWrappingEnabled: true,\n    wrappedNativeToken: \"WETH\",\n    ...(arbitrumAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Arbitrum,\n    transactionType: 2,\n    PoolHelper: {\n      address: \"0x657bB5fD00e6D6BdA438988DcaF5B62Ef16F6163\",\n      startBlock: 256472779,\n    },\n  },\n  [Chain.BSC]: {\n    address: \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n    name: Chain.BSC,\n    wrappedNativeToken: \"WBNB\",\n    ...(bscAddresses as unknown as ContractAddresses),\n    chainId: ChainId.BSC,\n    transactionType: 2,\n  },\n  [Chain.Evmos]: {\n    address: \"0xD4949664cD82660AaE99bEdc034a0deA8A0bd517\",\n    name: Chain.Evmos,\n    wrappedNativeToken: \"WEVMOS\",\n    ...(evmosAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Evmos,\n    transactionType: 0,\n  },\n  [Chain.Metis]: {\n    address: \"0x75cb093e4d61d2a2e65d8e0bbb01de8d89b53481\",\n    name: Chain.Metis,\n    wrappedNativeToken: \"METIS\",\n    isWrappingEnabled: true,\n    ...(metisAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Metis,\n    transactionType: 0,\n  },\n  [Chain.Avalanche]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Avalanche,\n    wrappedNativeToken: \"WETH\",\n    ...(avalancheAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Avalanche,\n    transactionType: 0,\n  },\n  \n  [Chain.PolygonzkEVM]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.PolygonzkEVM,\n    wrappedNativeToken: \"WMATIC\",\n    ...(polyzkevmAddresses as unknown as ContractAddresses),\n    chainId: ChainId.PolygonzkEVM,\n    transactionType: 0,\n  },\n  [Chain.Celo]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Celo,\n    wrappedNativeToken: \"CELO\",\n    ...(celoAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Celo,\n    transactionType: 0,\n  },\n  [Chain.Base]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Base,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: true,\n    ...(baseAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Base,\n    transactionType: 0,\n    PoolHelper: {\n      address: \"0x603823Ad53c1C7D402c5A20CD1B05488Dafc2646\",\n      startBlock: 20147258,\n    },\n    ...(baseAddresses as unknown as ContractAddresses),\n  },\n\n  [Chain.Kava]: {\n    address: \"0xc86c7C0eFbd6A49B35E8714C5f59D99De09A225b\",\n    name: Chain.Kava,\n    wrappedNativeToken: \"WKAVA\",\n    ...(kavaAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Kava,\n    PoolHelper: {\n      address: \"0x4B76fE1D77faD404e4AFD7Fa9797cDCC84Aa2469\",\n      startBlock: 12934741,\n    },\n    ...(kavaAddresses as unknown as ContractAddresses),\n    transactionType: 0,\n  },\n  [Chain.Linea]: {\n    address: \"0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f\",\n    name: Chain.Linea,\n    wrappedNativeToken: \"WETH\",\n    ...(lineaAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Linea,\n    transactionType: 0,\n  },\n  [Chain.Scroll]: {\n    address: \"0x5300000000000000000000000000000000000004\",\n    name: Chain.Scroll,\n    wrappedNativeToken: \"WETH\",\n    ...(scrollAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Scroll,\n    transactionType: 0,\n  },\n  [Chain.Manta]: {\n    address: \"0x0dc808adce2099a9f62aa87d9670745aba741746\",\n    name: Chain.Manta,\n    wrappedNativeToken: \"WETH\",\n    ...(mantaAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Manta,\n    transactionType: 0,\n  },\n  [Chain.Astar]: {\n    address: \"0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720\",\n    name: Chain.Astar,\n    wrappedNativeToken: \"WASTAR\",\n    ...(astarAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Astar,\n    transactionType: 0,\n  },\n  [Chain.Mantle]: {\n    address: \"0xCD88431107B72b1a1aa13DE27Ab894e27C7D1a61\",\n    name: Chain.Mantle,\n    wrappedNativeToken: \"MNT\",\n    ...(mantleAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Mantle,\n    transactionType: 0,\n  },\n  [Chain.Fantom]: {\n    wrappedNativeToken: \"WFTM\",\n    address: \"0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83\",\n    name: Chain.Fantom,\n    ...(fantomAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Fantom,\n    transactionType: 0,\n  },\n  [Chain.AstarZkevm]: {\n    wrappedNativeToken: \"WETH\",\n    address: \"0xE9CC37904875B459Fa5D0FE37680d36F1ED55e38\",\n    name: Chain.AstarZkevm,\n    ...(astarzkevmAddresses as unknown as ContractAddresses),\n    chainId: ChainId.AstarZkevm,\n    transactionType: 0,\n  },\n  [Chain.Blast]: {\n    wrappedNativeToken: \"WETH\",\n    address: \"0x4300000000000000000000000000000000000004\",\n    name: Chain.Blast,\n    ...(blastAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Blast,\n    transactionType: 0,\n  },\n  [Chain.Mode]: {\n    wrappedNativeToken: \"WETH\",\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Mode,\n    PoolHelper: {\n      address: \"0xA9d55eb3fBEE553db12cB25C8cF8ADbdB6d74541\",\n      startBlock: 13458174,\n    },\n    ...(modeAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Mode,\n    transactionType: 0,\n  },\n  [Chain.XLayer]: {\n    wrappedNativeToken: \"OKB\",\n    address: \"0x5A77f1443D16ee5761d310e38b62f77f726bC71c\",\n    name: Chain.XLayer,\n    ...(xlayerAddresses as unknown as ContractAddresses),\n    chainId: ChainId.XLayer,\n    transactionType: 0,\n  },\n  [Chain.Telos]: {\n    wrappedNativeToken: \"TELOS\",\n    address: \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\",\n    name: Chain.Telos,\n    ...(telosAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Telos,\n    transactionType: 0,\n  },\n  [Chain.Taiko]: {\n    wrappedNativeToken: \"ETH\",\n    address: \"0xA0fB8cd450c8Fd3a11901876cD5f17eB47C6bc50\",\n    name: Chain.Taiko,\n    ...(taikoAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Taiko,\n    transactionType: 0,\n  },\n  [Chain.Rootstock]: {\n    wrappedNativeToken: \"RBTC\",\n    address: \"0x542fda317318ebf1d3deaf76e0b632741a7e677d\",\n    name: Chain.Rootstock,\n    ...(rootstockAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Rootstock,\n    transactionType: 0,\n  },\n  [Chain.Moonbeam]: {\n    wrappedNativeToken: \"WGLMR\",\n    address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n    name: Chain.Moonbeam,\n    PoolHelper: {\n      address: \"0xDA6BA21f39d33e922ecC43d41E7068988dc36C6A\",\n      startBlock: 9389000,\n    },\n    ...(moonbeamAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Moonbeam,\n    transactionType: 0,\n  },\n  [Chain.Thundercore]: {\n    wrappedNativeToken: \"WETH\",\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Thundercore,\n    ...(thundercoreAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Thundercore,\n    transactionType: 0,\n   \n  },\n  [Chain.OkxTestnet]: {\n    wrappedNativeToken: \"WETH\",\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.OkxTestnet,\n    ...(okxtestnetAddresses as unknown as ContractAddresses),\n    chainId: ChainId.OkxTestnet,\n    transactionType: 0,\n  },\n  [Chain.ZklinkNova]: {\n    wrappedNativeToken: \"ETH\",\n    address: \"0x8280a4e7D5B3B658ec4580d3Bc30f5e50454F169\",\n    name: Chain.ZklinkNova,\n    ...(zklinknovaAddresses as unknown as ContractAddresses),\n    chainId: ChainId.ZklinkNova,\n    transactionType: 0,\n  },\n  [Chain.Flare]: {\n    wrappedNativeToken: \"FLR\",\n    // https://flarescan.com/address/0x1d80c49bbbcd1c0911346656b529df9e5c2f783d\n    address: \"0x1d80c49bbbcd1c0911346656b529df9e5c2f783d\",\n    name: Chain.Flare,\n    isWrappingEnabled: true,\n    chainId: ChainId.Flare,\n    transactionType: 0,\n    ...(flareAddresses as unknown as ContractAddresses),\n  },\n  [Chain.BeraChainBartio]: {\n    wrappedNativeToken: \"BERA\",\n    address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n    name: Chain.BeraChainBartio,\n    chainId: ChainId.BeraChainBartio,\n    transactionType: 0,\n    ...(berachainbartioAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Filecoin]: {\n    wrappedNativeToken: \"WFIL\",\n    address: \"0x60e1773636cf5e4a227d9ac24f20feca034ee25a\",\n    name: Chain.Filecoin,\n    isWrappingEnabled: true,\n    chainId: ChainId.Filecoin,\n    transactionType: 0,\n    ...(filecoinAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Apechain]: {\n    wrappedNativeToken: \"APE\",\n    address: \"0x48b62137edfa95a428d35c09e44256a739f6b557\",\n    // https://apescan.io/address/0x48b62137edfa95a428d35c09e44256a739f6b557\n    name: Chain.Apechain,\n    isWrappingEnabled: true,\n    chainId: ChainId.Apechain,\n    transactionType: 0,\n    ...(apechainAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Zircuit]: {\n    chainId: 48900,\n    wrappedNativeToken: \"ETH\",\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Zircuit,\n    isWrappingEnabled: true,\n    transactionType: 0,\n    ...(zircuitAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Sei]: {\n    wrappedNativeToken: \"WSEI\",\n    // https://seitrace.com/address/0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7?chain=pacific-1\n    address: \"0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7\",\n    name: Chain.Sei,\n    isWrappingEnabled: true,\n    chainId: ChainId.Sei,\n    transactionType: 0,\n    ...(seiAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Sonic]: {\n    wrappedNativeToken: \"WS\",\n    address: \"0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38\",\n    name: Chain.Sonic,\n    isWrappingEnabled: true,\n    chainId: ChainId.Sonic,\n    transactionType: 0,\n    ...(sonicAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Zeta]: {\n    wrappedNativeToken: \"WZETA\",\n    isWrappingEnabled: true,\n    name: Chain.Zeta,\n    // https://zetachain.blockscout.com/address/0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf\n    address: \"0x5f0b1a82749cb4e2278ec87f8bf6b618dc71a8bf\",\n    chainId: ChainId.Zeta,\n    transactionType: 0,\n    ...(zetaAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Soneium]: {\n    wrappedNativeToken: \"ETH\",\n    address: \"0x7507c1dc16935B82698e4C63f2746A2fCf994dF8\",\n    chainId: ChainId.Soneium,\n    transactionType: 0,\n    ...(soneiumAddresses as unknown as ContractAddresses),\n    name: Chain.Soneium,\n  },\n  [Chain.Mainnet]: {\n    chainId: ChainId.Mainnet,\n    transactionType: 0,\n    ...(ethAddresses as unknown as ContractAddresses),\n    \n    address: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n    name: Chain.Mainnet,\n  },\n  [Chain.Bera]: {\n    chainId: ChainId.Bera,\n    wrappedNativeToken: \"WBERA\",\n    address: \"0x6969696969696969696969696969696969696969\",\n    name: Chain.Bera,\n    isWrappingEnabled: true,\n    transactionType: 0,\n    ...(beraAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Unichain]: {\n    chainId: ChainId.Unichain,\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Unichain,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: true,\n    transactionType: 0,\n    ...(uniAddresses as unknown as ContractAddresses),\n    \n  },\n  [Chain.TataraTestnet]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.TataraTestnet,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: true,\n    chainId: ChainId.TataraTestnet,\n    transactionType: 0,\n    ...(tataratestnetAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Hemi]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Hemi,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: true,\n    ...(hemiAddresses as unknown as ContractAddresses),\n    chainId: ChainId.Hemi,\n    transactionType: 0,\n  },\n  [Chain.Core]: {\n    address: \"0x191E94fa59739e188dcE837F7f6978d84727AD01\",\n    name: Chain.Core,\n    wrappedNativeToken: \"Core\",\n    isWrappingEnabled: true,\n    chainId: ChainId.Core,\n    transactionType: 0,\n    ...(coreAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Peaq]: {\n    address: \"0x3cd66d2e1fac1751b0a20bebf6ca4c9699bb12d7\",\n    name: Chain.Peaq,\n    wrappedNativeToken: \"WPEAQ\",\n    isWrappingEnabled: false,\n    chainId: ChainId.Peaq,\n    transactionType: 0,\n    ...(peaqAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Katana]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Katana,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: true,\n    chainId: ChainId.Katana,\n    transactionType: 0,\n    ...(katanaAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Ronin]: {\n    address: \"0xe514d9deb7966c8be0ca922de8a064264ea6bcd4\",\n    name: Chain.Ronin,\n    wrappedNativeToken: \"WRON\",\n    isWrappingEnabled: true,\n    chainId: ChainId.Ronin,\n    transactionType: 0,\n    ...(roninAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Saga]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Saga,\n    wrappedNativeToken: \"WGAS\",\n    isWrappingEnabled: false,\n    chainId: ChainId.Saga,\n    transactionType: 0,\n    ...(sagaAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Nibiru]: {\n    address: \"0x4200000000000000000000000000000000000006\",\n    name: Chain.Nibiru,\n    wrappedNativeToken: \"NIBI\",\n    isWrappingEnabled: false,\n    chainId: ChainId.Nibiru,\n    transactionType: 0,\n    ...(nibiruAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Hyperevm]: {\n    address: \"0x5555555555555555555555555555555555555555\",\n    name: Chain.Hyperevm,\n    wrappedNativeToken: \"WHYPE\",\n    isWrappingEnabled: false,\n    chainId: ChainId.Hyperevm,\n    transactionType: 0,\n    ...(hyperevmAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Bittensor]: {\n    address: \"0x134f59E8B8637FD70ae12f263492B1dc73A25D1e\",\n    name: Chain.Bittensor,\n    wrappedNativeToken: \"WTAO\",\n    isWrappingEnabled: true,\n    chainId: ChainId.Bittensor,\n    transactionType: 0,\n    ...(bittensorAddresses as unknown as ContractAddresses),\n  },\n  [Chain.Robinhood]: {\n    address: \"0x0bd7d308f8e1639fab988df18a8011f41eacad73\",\n    name: Chain.Robinhood,\n    wrappedNativeToken: \"WETH\",\n    isWrappingEnabled: false,\n    chainId: ChainId.Robinhood,\n    transactionType: 0,\n    ...(robinhoodAddresses as unknown as ContractAddresses),\n  }\n};\n\nfor (const network of Object.values(networks) as NetworkConfig[]) {\n  const feeManagerDeployment = feeManagerContractsByChainId[network.chainId];\n  if (feeManagerDeployment) {\n    network.FeeManager = feeManagerDeployment;\n  }\n}\n\n\n/**\n * Retrieves a contract address for a specific chain ID and contract name.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param contractName - The name of the contract to look up\n * @returns The contract address if found, undefined otherwise\n * @example\n * ```typescript\n * const address = getContractAddressByChainIdAndContractName(1, 'KeeperRegistry');\n * ```\n */\nexport function getContractAddressByChainIdAndContractName(\n  chainId: number,\n  contractName: ContractName\n): string | undefined {\n  const network = Object.values(networks).find(\n    (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n  );\n  if (network && contractName in network) {\n    const contract = network[contractName];\n    return contract?.address;\n  }\n  return undefined;\n}\n\n\nexport function getNetworkByChainId(chainId: number): NetworkConfig | undefined {\n  return Object.values(networks).find(\n    (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n  );\n}\n\n\n/**\n * Retrieves the Pool Helper contract information for a specific chain ID.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The Pool Helper contract information if found, undefined otherwise\n * @example\n * ```typescript\n * const poolHelper = getPoolHelperByChainId(1);\n * ```\n */\nexport function getPoolHelperByChainId(chainId: number): Contract | undefined {\n  const contractName = \"PoolHelper\" as const;\n  const network = Object.values(networks).find(\n    (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n  );\n  if (network && contractName in network) {\n    return network[contractName];\n  }\n  return undefined;\n}\n\n/**\n * Converts a chain ID to its corresponding chain name.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The chain name if found, undefined otherwise\n * @example\n * ```typescript\n * const chainName = chainIdToName(137); // Returns \"Polygon\"\n * const chainName = chainIdToName(1); // Returns \"Mainnet\"\n * ```\n */\nexport function chainIdToName(chainId: number): Chain | undefined {\n  const network = Object.values(networks).find(\n    (net): net is NetworkConfig => (net as NetworkConfig).chainId === chainId\n  );\n  return network?.name;\n}\n\n/**\n * Converts a chain name to its corresponding chain ID.\n * \n * @param chainName - The chain name to look up\n * @returns The chain ID if found, undefined otherwise\n * @example\n * ```typescript\n * const chainId = chainNameToId(Chain.Polygon); // Returns 137\n * const chainId = chainNameToId(Chain.Mainnet); // Returns 1\n * ```\n */\nexport function chainNameToId(chainName: Chain): number | undefined {\n  const network = networks[chainName];\n  return network?.chainId;\n}\n\n\nexport function isSingleAssetDepositSupported(chainId: number) {\n  const supportedChains = [ChainId.Polygon, ChainId.Hyperevm, ChainId.Peaq, ChainId.Arbitrum, ChainId.Katana, ChainId.Base, ChainId.Saga, ChainId.Mainnet, ChainId.Nibiru];\n\n  return supportedChains.indexOf(chainId) > -1;\n}\n","import type { Address } from 'viem';\nimport { SwapWithSlippageResponse } from './simulateSwap.js';\nimport { Protocol } from '../../../const/index.js';\n\n/**\n * AMM Types supported by single-asset deposits\n */\nexport enum AMMType {\n  UniswapV3 = 0,\n  Algebra = 1,\n  AlgebraDirectional = 2,\n  AlgebraVE33 = 3,\n  AlgebraIntegral = 4,\n  Aerodrome = 5\n  \n}\n\n/**\n * Parameters for single-asset deposit\n */\nexport interface SingleAssetDepositParams {\n  /** Amount of input token provided by the user */\n  assets: bigint;\n  /** Address to receive LP tokens */\n  receiver: Address;\n  /** Address of the vault to deposit into */\n  vault: Address;\n  /** true if input token is token0, false if token1 */\n  isToken0: boolean;\n  /** Maximum allowed slippage during deposit (in %) */\n  depositSlippagePercent: bigint;\n  /** Slippage tolerance for internal swap (in basis points) */\n  swapSlippageBP: number;\n  /** Type of AMM */\n  ammType: AMMType;\n  /** Address of the single-asset deposit contract */\n  singleAssetDepositContract?: Address;\n}\n\n/**\n * Parameters for calculating swap amount\n */\nexport interface CalculateSwapAmountParams {\n  /** Amount of tokens being deposited */\n  depositAmount: bigint;\n  /** true if depositing token0, false if token1 */\n  isToken0: boolean;\n  /** Address of the vault */\n  vault: Address;\n  /** Address of the pool */\n  pool: Address;\n  /** Type of AMM */\n  ammType: AMMType;\n  /** Address of the single-asset deposit contract */\n  singleAssetDepositContract: Address;\n}\n\n/**\n * Response from calculateSwapAmount\n */\nexport interface SwapAmountResponse {\n  /** Amount to be swapped from the input token */\n  swapAmount: bigint;\n  /** Current sqrt price (used for internal calculation) */\n  sqrtPrice: bigint;\n}\n\n/**\n * Parameters for calculating sqrt price limit\n */\nexport interface CalculateLimitPriceParams {\n  /** Address of the pool */\n  pool: Address;\n  /** Slippage tolerance in basis points */\n  slippageBP: number;\n  /** true if swapping token0 for token1, false otherwise */\n  zeroForOne: boolean;\n  /** Type of AMM */\n  ammType: AMMType;\n  /** Address of token0 */\n  token0: Address;\n  /** Address of token1 */\n  token1: Address;\n}\n\n/**\n * Parameters for simulating a swap\n */\nexport interface SimulateSwapParams {\n  /** Address of the pool */\n  pool: Address;\n  /** Address that will receive the swap output (or address(this) for simulation) */\n  recipient: Address;\n  /** true if swapping token0 → token1, else false */\n  zeroForOne: boolean;\n  /** Value from calculateSwapAmount */\n  amountSpecified: bigint;\n  /** Slippage-adjusted limit price */\n  sqrtPriceLimitX96: bigint;\n  /** AMM type */\n  ammType: AMMType;\n  /** Input token address (required for Quoter) */\n  tokenIn: Address;\n  /** Output token address (required for Quoter) */\n  tokenOut: Address;\n  /** Pool fee (required for Quoter) */\n  fee: number;\n  /** Quoter contract address (optional - will use default if not provided) */\n  quoterAddress?: Address;\n  /*** Tick spacing */\n  tickSpacing: number;\n\n  /** Protocol */\n  protocol?: Protocol | null;\n}\n\n/**\n * Response from swap simulation\n */\nexport interface SwapSimulationResponse {\n  /** Final token0 amount after swap */\n  amount0: bigint;\n  /** Final token1 amount after swap */\n  amount1: bigint;\n\n  sqrtPriceX96After: bigint\n}\n\n/**\n * Parameters for estimating LP tokens\n */\nexport interface EstimateLpTokensParams {\n  /** Address of the vault */\n  vault: Address;\n  /** Original deposit amount */\n  originalAssets: bigint;\n  /** Amount that was swapped internally */\n  swapAmount: bigint;\n  /** Tokens received from the swap (amount0 and amount1) */\n  swapResult: SwapSimulationResponse;\n  /** true if original deposit was token0, false if token1 */\n  isToken0: boolean;\n}\n\n/**\n * Response from LP token estimation\n */\nexport interface LpTokenEstimationResponse {\n  /** Estimated amount of LP tokens to be received */\n  lpTokens: bigint;\n  /** Final amount of token0 that will be deposited */\n  finalAmount0: bigint;\n  /** Final amount of token1 that will be deposited */\n  finalAmount1: bigint;\n}\n\n/**\n * Comprehensive single-asset deposit preview\n */\nexport interface SingleAssetDepositPreview {\n  /** Amount to be swapped internally */\n  swapAmount: bigint;\n  /** Current sqrt price */\n  currentSqrtPrice: bigint;\n  /** Slippage-adjusted limit price for swap */\n  sqrtPriceLimitX96: bigint;\n  /** Simulated swap result */\n  swapSimulation: SwapWithSlippageResponse;\n  /** LP token estimation */\n  lpEstimation: LpTokenEstimationResponse;\n  /** Whether the swap direction is token0 → token1 */\n  zeroForOne: boolean;\n}\n\n/**\n * Pool slot0 data structure for UniswapV3\n */\nexport interface PoolSlot0 {\n  sqrtPriceX96: bigint;\n  tick: number;\n  observationIndex: number;\n  observationCardinality: number;\n  observationCardinalityNext: number;\n  feeProtocol: number;\n  unlocked: boolean;\n} ","import { AMMType } from '../base/vault/single-asset/types.js';\nimport { SupportedProtocol } from '../types.js';\nimport { Protocol } from './chain.js';\n\n/**\n * Enum representing supported staking protocols\n */\nexport enum StakingProtocol {\n  Forge = 'Forge',\n  Kinetix = 'Kinetix',\n  Uniswap = 'Uniswap',\n  SushiSwap = 'SushiSwap',\n  QuickSwapV3 = 'QuickSwapV3',\n  ArthSwap = 'ArthSwap',\n  arthswap = 'arthswap',\n  Swapsicle = 'Swapsicle',\n  Spark = 'Spark',\n  Spark32 = 'Spark32',\n}\n\n/**\n * Checks if a given string is a valid StakingProtocol enum value.\n *\n * @param protocol - The protocol string to validate\n * @returns True if the protocol is a valid StakingProtocol, false otherwise\n * @example\n * ```typescript\n * if (isValidStakingProtocol('Uniswap')) {\n *   // Handle valid protocol\n * }\n * ```\n */\nexport function isValidStakingProtocol(protocol: string | null | undefined): protocol is StakingProtocol {\n  if (!protocol || typeof protocol !== 'string') {\n    return false;\n  }\n\n  const normalizedProtocol = Object.values(StakingProtocol).find(\n    (value) => value.toLowerCase() === protocol.toLowerCase(),\n  );\n  return Boolean(normalizedProtocol);\n}\n\n/**\n * Normalizes a protocol string to its corresponding StakingProtocol enum value.\n *\n * @param protocol - The protocol string to normalize\n * @returns The normalized StakingProtocol enum value\n * @throws Error if the protocol string is invalid\n * @example\n * ```typescript\n * const protocol = normalizeProtocol('uniswap');\n * // Returns: StakingProtocol.Uniswap\n * ```\n */\nexport function normalizeProtocol(protocol: string): StakingProtocol {\n  const normalizedProtocol = Object.values(StakingProtocol).find(\n    (value) => value.toLowerCase() === protocol.toLowerCase(),\n  );\n  if (!normalizedProtocol || !isValidStakingProtocol(normalizedProtocol)) {\n    throw new Error(`Invalid protocol: ${protocol}`);\n  }\n  return normalizedProtocol;\n}\n\n/**\n * List of protocols that implement the Algebra interface\n */\n\n\nexport const ALGEBRA_PROTOCOLS = [\n  Protocol.QuickSwap,\n  Protocol.Wasabee,\n  Protocol.Beam,\n  Protocol.QuickSwapIntegral,\n  Protocol.SilverSwap,\n  Protocol.Ocelex,\n  Protocol.Henjin,\n  Protocol.Camelot,\n  Protocol.Ocelex,\n  Protocol.Lynex,\n  Protocol.Thena,\n  Protocol.Hercules,\n  Protocol.QuickSwapAlgebra,\n  Protocol.Kim,\n  Protocol.Swapsicle,\n  Protocol.Fenix,\n  Protocol.StellaSwap,\n  Protocol.Glyph,\n  Protocol.KatanaIntegral,\n  Protocol.Blackhole,\n  Protocol.Nest,\n  Protocol.Cypher,\n  Protocol.SparkIntegral,\n  Protocol.Hydrex,\n];\n\nexport const SHADOW_PROTOCOLS = [Protocol.Shadow, Protocol.MachineX];\n\n/**\n * List of protocols that implement directional Algebra interface\n */\nexport const DIRECTIONAL_ALGEBRA_PROTOCOLS = [Protocol.Camelot, Protocol.Hercules];\n\n/**\n * List of protocols that implement the PoolShark interface\n */\nexport const POOLSHARK_PROTOCOLS = [Protocol.PoolShark];\n\n/**\n * List of protocols that implement the Algebra Integral interface\n */\nexport const ALGEBRA_INTEGRAL_PROTOCOLS = [\n  Protocol.Kim,\n  Protocol.Wasabee,\n  Protocol.Swapsicle,\n  Protocol.QuickSwapIntegral,\n  Protocol.Fenix,\n  Protocol.Henjin,\n  Protocol.SilverSwap,\n  Protocol.Beam,\n  Protocol.Glyph,\n  Protocol.KatanaIntegral,\n  Protocol.Blackhole,\n  Protocol.Nest,\n  Protocol.Cypher,\n  Protocol.SparkIntegral,\n  Protocol.Hydrex,\n];\n\nexport const AERODROME_PROTOCOLS = [Protocol.Aerodrome, Protocol.AerodromeV2, Protocol.Cypher, Protocol.AerodromeV3];\n\nexport const ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS = [\n  Protocol.QuickSwapIntegral,\n  Protocol.Wasabee,\n  Protocol.KatanaIntegral,\n  Protocol.Blackhole,\n  Protocol.Cypher,\n  Protocol.SparkIntegral,\n  Protocol.Hydrex,\n]\n\n\n/**\n * List of protocols that implement the Thick interface\n */\nconst THICK_PROTOCOLS = [Protocol.ThickV2];\n\n/**\n * Checks if a protocol implements the Algebra interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra, false otherwise\n */\nexport const isAlgebraProtocol = (protocol: SupportedProtocol) => {\n  return ALGEBRA_PROTOCOLS.includes(protocol);\n};\n\n\n/**\n * Checks if a protocol implements the Shadow interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Shadow, false otherwise\n */\nexport const isShadowProtocol = (protocol: SupportedProtocol) => {\n  return SHADOW_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the ThickV2 interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements ThickV2, false otherwise\n */\nexport const isThickV2Protocol = (protocol: SupportedProtocol) => {\n  return THICK_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the Algebra Direction interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra Direction, false otherwise\n */\nexport const isAlgebraDirectionProtocol = (protocol: SupportedProtocol) => {\n  return DIRECTIONAL_ALGEBRA_PROTOCOLS.includes(protocol);\n};\n\n/**\n * Checks if a protocol implements the Algebra Integral interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements Algebra Integral, false otherwise\n */\nexport const isAlgebraIntegralProtocol = (protocol: SupportedProtocol) => {\n  return ALGEBRA_INTEGRAL_PROTOCOLS.includes(protocol);\n};\n\n\n/**\n * Checks if a protocol implements the PoolShark interface.\n *\n * @param protocol - The protocol to check\n * @returns True if the protocol implements PoolShark, false otherwise\n */\nexport const isPoolSharkProtocol = (protocol: SupportedProtocol) => {\n  return POOLSHARK_PROTOCOLS.includes(protocol);\n};\n\n\nexport const isAerodromeVault = (protocol: SupportedProtocol): boolean => {\n    return AERODROME_PROTOCOLS.includes(protocol);\n}\n\nexport const isAlgebraIntegralV2Protocol = (protocol: SupportedProtocol): boolean => {\n  return ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS.includes(protocol);\n}\n\n\n\nexport const getProtcolTypeByAmmType = (ammType: AMMType): Protocol => {\n\n  if (ammType === AMMType.Algebra) {\n    return Protocol.QuickSwap\n  }\n\n  if (ammType === AMMType.AlgebraDirectional) {\n    return Protocol.Camelot\n  }\n\n  if (ammType === AMMType.AlgebraIntegral) {\n    return Protocol.QuickSwapIntegral\n  }\n\n  if (ammType === AMMType.UniswapV3) {\n    return Protocol.Uniswap\n  }\n\n  if (ammType === AMMType.Aerodrome) {\n    return Protocol.Aerodrome\n  }\n\n  throw Error('Protocol type not found')\n} \n","import { SteerSupportedChains } from \"../types.js\";\nimport { Chain, ChainId } from \"./chain.js\";\n\n\n\n/**\n * Interface representing network-specific data and configuration\n */\nexport interface NetworkData {\n  /** Chain ID of the network */\n  chainId: number;\n  /** Symbol of the wrapped native token */\n  wrappedNativeToken: string;\n  /** Address of the network's native token wrapper contract */\n  address: string;\n  /** Optional network name */\n  name?: string;\n}\n\n\n/**\n * URL for accessing deprecated bundle information\n */\nexport const deprecatedBundlesURL = \"https://api.steer.finance/deprecated-bundles\"\n\n  \n/**\n * Configuration mapping of supported chains to their respective subgraph endpoints.\n * Each chain has a dedicated subgraph URL for querying protocol data.\n * Updated each chains for ormi and thegraph\n*/\nconst offlineSubgraphBaseUrl =\n  \"https://subgraph-archive.steer.finance/graphql\";\n\nconst offlineSubgraphUrl = (chain: string): string => `${offlineSubgraphBaseUrl}/${chain}`;\n\nexport const steerSubgraphConfig: {\n  [protocol in SteerSupportedChains]: string\n} = {\n  [Chain.Polygon]:\n    \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-polygon/prod/gn\",\n  [Chain.BSC]:\n    \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-bsc-beta/prod/gn\",\n  [Chain.Optimism]:\n    \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GgW1EwNARL3dyo3acQ3VhraQQ66MHT7QnYuGcQc5geDG\",\n  [Chain.Arbitrum]:\n    \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/prod/gn\",\n  [Chain.Evmos]:\n    offlineSubgraphUrl(\"evmos\"),\n  [Chain.Thundercore]:\n    offlineSubgraphUrl(\"thundercore\"),\n  [Chain.Metis]:\n    offlineSubgraphUrl(\"metis\"),\n  [Chain.Base]:\n    \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-base/beta/gn\",\n  [Chain.Avalanche]:\n    \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GZotTj3rQJ8ZqVyodtK8TcnKcUxMgeF7mCJHGPYbu8dA\",\n  [Chain.PolygonzkEVM]:\n    offlineSubgraphUrl(\"zkevm\"),\n  [Chain.Celo]:\n    \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/BPaFHyfVrhv3pdjGodpQcWggAg1Bcrvc9SFc2t2BXeho\",\n  [Chain.Kava]:\n    offlineSubgraphUrl(\"kava\"),\n  [Chain.Linea]:\n    \"https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-linea/prod/gn\",\n  [Chain.Scroll]:\n    offlineSubgraphUrl(\"scroll\"),\n  [Chain.Manta]:\n    offlineSubgraphUrl(\"manta\"),\n  [Chain.Astar]:\n    offlineSubgraphUrl(\"astar\"),\n  [Chain.Fantom]:\n    offlineSubgraphUrl(\"fantom\"),\n  [Chain.OkxTestnet]:\n    \"https://subgraph.steer.finance/steer-x1-testnet/subgraphs/name/steerprotocol/steer-okxtestnet\",\n  [Chain.Mantle]:\n    offlineSubgraphUrl(\"mantle\"),\n  [Chain.AstarZkevm]:\n    offlineSubgraphUrl(\"astarzkevm\"),\n  [Chain.Blast]:\n    offlineSubgraphUrl(\"blast\"),\n  [Chain.Mode]:\n    offlineSubgraphUrl(\"mode\"),\n  [Chain.Telos]:\n    offlineSubgraphUrl(\"telos\"),\n  [Chain.XLayer]:\n    offlineSubgraphUrl(\"xlayer\"),\n  [Chain.Taiko]:\n    offlineSubgraphUrl(\"taiko\"),\n  [Chain.Rootstock]:\n    \"https://api.goldsky.com/api/public/project_cm2k9xbkz4qg901vs51bm5uau/subgraphs/steer-protocol-rootstock/prod/gn\",\n  [Chain.ZklinkNova]:\n    offlineSubgraphUrl(\"zklinknova\"),\n  [Chain.Flare]:\n    \"https://api.goldsky.com/api/public/project_cm2k9xbkz4qg901vs51bm5uau/subgraphs/steer-protocol-flare/prod/gn\",\n  [Chain.BeraChainBartio]:\n    offlineSubgraphUrl(\"berabarito\"),\n  [Chain.Filecoin]:\n    offlineSubgraphUrl(\"filecoin\"),\n  [Chain.Apechain]:\n    offlineSubgraphUrl(\"apechain\"),\n  [Chain.Zircuit]:\n    offlineSubgraphUrl(\"zircuit\"),\n  [Chain.Moonbeam]:\n    offlineSubgraphUrl(\"moonbeam\"),\n  [Chain.Sei]:\n    offlineSubgraphUrl(\"sei\"),\n  [Chain.Sonic]:\n    'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-sonic/prod/gn',\n  [Chain.Zeta]:\n    offlineSubgraphUrl(\"zeta\"),\n  [Chain.Mainnet]:\n    'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-mainnet/prod/gn',\n  [Chain.Soneium]:\n    offlineSubgraphUrl(\"soneium\"),\n  [Chain.Bera]:\n    'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-bera/prod/gn',\n  [Chain.Unichain]:\n    'https://api.goldsky.com/api/public/project_cmnrgd4exaie801sa45a1609h/subgraphs/steer-protocol-unichain/prod/gn',\n  [Chain.Hemi]:\n    offlineSubgraphUrl(\"hemi\"),\n  [Chain.TataraTestnet]:\n    offlineSubgraphUrl(\"tataratestnet\"),\n  [Chain.Core]:\n    offlineSubgraphUrl(\"core\"),\n  [Chain.Peaq]:\n    offlineSubgraphUrl(\"peaq\"),\n  [Chain.Katana]:\n    'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-katana/prod/gn',\n  [Chain.Ronin]:\n    offlineSubgraphUrl(\"ronin\"),\n  [Chain.Saga]:\n    offlineSubgraphUrl(\"saga\"),\n  [Chain.Nibiru]:\n    offlineSubgraphUrl(\"nibiru\"),\n  [Chain.Hyperevm]:\n    'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-hyperevm/prod/gn',\n  [Chain.Bittensor]:\n    'https://subgraph.35-247-158-26.sslip.io/subgraphs/name/steer-subgraph',\n  [Chain.Robinhood]:\n    'https://api.goldsky.com/api/public/project_cm2k9xbkz4qg901vs51bm5uau/subgraphs/steer-protocol-robinhood/prod/gn'\n}\n\n\n\n/**\n * Retrieves the subgraph URL for a given chain ID.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @returns The subgraph URL for the given chain ID, or undefined if not found\n * @example\n * ```typescript\n * const subgraphUrl = getSubgraphUrlByChainId(1);\n * // Returns the Ethereum mainnet subgraph URL\n * ```\n */\nexport function getSubgraphUrlByChainId(chainId: number): string | undefined {\n  // Convert chainId to Chain enum value using ChainId enum\n  const [chainName] = Object.entries(ChainId).find(([, id]) => Number(id) === chainId) || [];\n  if (!chainName) return undefined;\n  \n  // Get the Chain enum value\n  const chain = Chain[chainName as keyof typeof Chain];\n  if (!chain) return undefined;\n\n  // Return the subgraph URL from steerSubgraphConfig\n  return steerSubgraphConfig[chain];\n}\n","export const getTheGraphResolverUrl = (subgraphId: string, isDeploymentId: boolean, apiKey: string) => {\n    return `https://gateway-arbitrum.network.thegraph.com/api/${apiKey}/${isDeploymentId ? 'deployments' : 'subgraphs'}/id/${subgraphId}`;\n  };","/**\n * API URLs for different environments and versions\n */\nexport const API_URLS = {\n  v1: {\n    production: 'https://s55qpiwei1.execute-api.us-east-1.amazonaws.com',\n    development: 'https://s55qpiwei1.execute-api.us-east-1.amazonaws.com', // Currently same as production\n  },\n  // Add future versions here\n  // v2: {\n  //   production: 'https://v2-prod.api.steer.finance',\n  //   development: 'https://v2-dev.api.steer.finance',\n  // },\n} as const;\n\n/**\n * Get the API URL for a specific environment and version\n * @param environment - The environment to get the URL for\n * @param version - The API version to use (defaults to v1)\n * @returns The API URL for the specified environment and version\n */\nexport function getApiUrl(\n  environment: 'production' | 'development', \n  version: keyof typeof API_URLS = 'v1'\n): string {\n  return API_URLS[version][environment];\n} ","export const erc20Abi = [\n  {\n    inputs: [],\n    name: 'name',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'symbol',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'decimals',\n    outputs: [\n      {\n        internalType: 'uint8',\n        name: '',\n        type: 'uint8',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'totalSupply',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transfer',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'sender',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'recipient',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'transferFrom',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n    ],\n    name: 'approve',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'spender',\n        type: 'address',\n      },\n    ],\n    name: 'allowance',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Transfer',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'spender',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'Approval',\n    type: 'event',\n  },\n];\n","export const erc721Abi = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'approved',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'Approval',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'ApprovalForAll',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'Transfer',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'approve',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: 'totalSupply',\n    outputs: [\n      {\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    payable: false,\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: 'balance',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'getApproved',\n    outputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'isApprovedForAll',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'name',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'ownerOf',\n    outputs: [\n      {\n        internalType: 'address',\n        name: 'owner',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'safeTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'bool',\n        name: '_approved',\n        type: 'bool',\n      },\n    ],\n    name: 'setApprovalForAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'interfaceId',\n        type: 'bytes4',\n      },\n    ],\n    name: 'supportsInterface',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'symbol',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'tokenURI',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'tokenId',\n        type: 'uint256',\n      },\n    ],\n    name: 'transferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n];\n","export const erc1155Abi = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'ApprovalForAll',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'values',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'TransferBatch',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'value',\n        type: 'uint256',\n      },\n    ],\n    name: 'TransferSingle',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'string',\n        name: 'value',\n        type: 'string',\n      },\n      {\n        indexed: true,\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'URI',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'balanceOf',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'accounts',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'balanceOfBatch',\n    outputs: [\n      {\n        internalType: 'uint256[]',\n        name: '',\n        type: 'uint256[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'account',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n    ],\n    name: 'isApprovedForAll',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'ids',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'amounts',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeBatchTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'from',\n        type: 'address',\n      },\n      {\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount',\n        type: 'uint256',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'safeTransferFrom',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'operator',\n        type: 'address',\n      },\n      {\n        internalType: 'bool',\n        name: 'approved',\n        type: 'bool',\n      },\n    ],\n    name: 'setApprovalForAll',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'bytes4',\n        name: 'interfaceId',\n        type: 'bytes4',\n      },\n    ],\n    name: 'supportsInterface',\n    outputs: [\n      {\n        internalType: 'bool',\n        name: '',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'uint256',\n        name: 'id',\n        type: 'uint256',\n      },\n    ],\n    name: 'uri',\n    outputs: [\n      {\n        internalType: 'string',\n        name: '',\n        type: 'string',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n];\n","export const singleTokenDepositAbi = [\n    {\n        \"type\": \"constructor\",\n        \"inputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    },\n    {\n        \"type\": \"function\",\n        \"name\": \"BASIS_POINTS\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    },\n    {\n        \"type\": \"function\",\n        \"name\": \"DEFAULT_ADMIN_ROLE\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    },\n    {\n        \"type\": \"function\",\n        \"name\": \"HUNDRED\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"MAXIMUM_SLIPPAGE\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint16\",\n                \"internalType\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"MAXIMUM_SWAP_SLIPPAGE_BP\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint16\",\n                \"internalType\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"MAXIMUM_TICK_DEVIATION\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"int24\",\n                \"internalType\": \"int24\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"MAXIMUM_TWAP_INTERVAL\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint32\",\n                \"internalType\": \"uint32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"MINIMUM_TWAP_INTERVAL\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint32\",\n                \"internalType\": \"uint32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"OPERATOR_ROLE\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"PRECISION_18\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"PRECISION_36\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"Q192\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"Q96\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"algebraSwapCallback\",\n        \"inputs\": [\n            {\n                \"name\": \"amount0Wanted\",\n                \"type\": \"int256\",\n                \"internalType\": \"int256\"\n            }, {\n                \"name\": \"amount1Wanted\",\n                \"type\": \"int256\",\n                \"internalType\": \"int256\"\n            }, {\n                \"name\": \"\",\n                \"type\": \"bytes\",\n                \"internalType\": \"bytes\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"calculateSwapAmount\",\n        \"inputs\": [\n            {\n                \"name\": \"depositAmount\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            },\n            {\n                \"name\": \"isToken0\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            },\n            {\n                \"name\": \"vault\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            },\n            {\n                \"name\": \"pool\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"ammType\",\n                \"type\": \"uint8\",\n                \"internalType\": \"enum AMMType\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"\",\n                \"type\": \"uint160\",\n                \"internalType\": \"uint160\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"deposit\",\n        \"inputs\": [\n            {\n                \"name\": \"assets\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            },\n            {\n                \"name\": \"receiver\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            },\n            {\n                \"name\": \"vault\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            },\n            {\n                \"name\": \"isToken0\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }, {\n                \"name\": \"depositSlippagePercent\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"swapSlippageBP\",\n                \"type\": \"uint16\",\n                \"internalType\": \"uint16\"\n            }, {\n                \"name\": \"ammType\",\n                \"type\": \"uint8\",\n                \"internalType\": \"enum AMMType\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"emergencyWithdrawalEnabled\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"getCurrentVaultRatio\",\n        \"inputs\": [\n            {\n                \"name\": \"vault\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"sqrtPriceX96\",\n                \"type\": \"uint160\",\n                \"internalType\": \"uint160\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"getRoleAdmin\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"grantRole\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"hasRole\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"maxTickDeviation\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"int24\",\n                \"internalType\": \"int24\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"pause\",\n        \"inputs\": [],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"paused\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"recoverToken\",\n        \"inputs\": [\n            {\n                \"name\": \"token\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"amount\",\n                \"type\": \"uint256\",\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"recipient\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"renounceRole\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"callerConfirmation\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"revokeRole\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"setMaxTickDeviation\",\n        \"inputs\": [\n            {\n                \"name\": \"newMaxTickDeviation\",\n                \"type\": \"int24\",\n                \"internalType\": \"int24\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"setMaximumSlippageProtection\",\n        \"inputs\": [\n            {\n                \"name\": \"newSlippageProtection\",\n                \"type\": \"uint16\",\n                \"internalType\": \"uint16\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"setTwapInterval\",\n        \"inputs\": [\n            {\n                \"name\": \"newTwapInterval\",\n                \"type\": \"uint32\",\n                \"internalType\": \"uint32\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"supportsInterface\",\n        \"inputs\": [\n            {\n                \"name\": \"interfaceId\",\n                \"type\": \"bytes4\",\n                \"internalType\": \"bytes4\"\n            }\n        ],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"swapCallBackProtection\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"bool\",\n                \"internalType\": \"bool\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"twapInterval\",\n        \"inputs\": [],\n        \"outputs\": [\n            {\n                \"name\": \"\",\n                \"type\": \"uint32\",\n                \"internalType\": \"uint32\"\n            }\n        ],\n        \"stateMutability\": \"view\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"uniswapV3SwapCallback\",\n        \"inputs\": [\n            {\n                \"name\": \"amount0Wanted\",\n                \"type\": \"int256\",\n                \"internalType\": \"int256\"\n            }, {\n                \"name\": \"amount1Wanted\",\n                \"type\": \"int256\",\n                \"internalType\": \"int256\"\n            }, {\n                \"name\": \"\",\n                \"type\": \"bytes\",\n                \"internalType\": \"bytes\"\n            }\n        ],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"function\",\n        \"name\": \"unpause\",\n        \"inputs\": [],\n        \"outputs\": [],\n        \"stateMutability\": \"nonpayable\"\n    }, {\n        \"type\": \"event\",\n        \"name\": \"AssetsSwapped\",\n        \"inputs\": [\n            {\n                \"name\": \"from\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"to\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"MaxTickDeviationUpdated\",\n        \"inputs\": [\n            {\n                \"name\": \"oldMaxTickDeviation\",\n                \"type\": \"int24\",\n                \"indexed\": false,\n                \"internalType\": \"int24\"\n            }, {\n                \"name\": \"newMaxTickDeviation\",\n                \"type\": \"int24\",\n                \"indexed\": false,\n                \"internalType\": \"int24\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"MaximumSlippageProtectionUpdated\",\n        \"inputs\": [\n            {\n                \"name\": \"oldSlippageProtection\",\n                \"type\": \"uint16\",\n                \"indexed\": false,\n                \"internalType\": \"uint16\"\n            }, {\n                \"name\": \"newSlippageProtection\",\n                \"type\": \"uint16\",\n                \"indexed\": false,\n                \"internalType\": \"uint16\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"Paused\",\n        \"inputs\": [\n            {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"indexed\": false,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"RoleAdminChanged\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"indexed\": true,\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"previousAdminRole\",\n                \"type\": \"bytes32\",\n                \"indexed\": true,\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"newAdminRole\",\n                \"type\": \"bytes32\",\n                \"indexed\": true,\n                \"internalType\": \"bytes32\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"RoleGranted\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"indexed\": true,\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"sender\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"RoleRevoked\",\n        \"inputs\": [\n            {\n                \"name\": \"role\",\n                \"type\": \"bytes32\",\n                \"indexed\": true,\n                \"internalType\": \"bytes32\"\n            }, {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"sender\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"SteerDeposit\",\n        \"inputs\": [\n            {\n                \"name\": \"amount0\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"amount1\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"shares\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"currentRatio\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"SteerPeripheryUpdated\",\n        \"inputs\": [\n            {\n                \"name\": \"oldPeriphery\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"newPeriphery\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"SteerVaultUpdated\",\n        \"inputs\": [\n            {\n                \"name\": \"oldVault\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"newVault\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"SteerWithdraw\",\n        \"inputs\": [\n            {\n                \"name\": \"shares\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"amount0\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }, {\n                \"name\": \"amount1\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"TokenRecovered\",\n        \"inputs\": [\n            {\n                \"name\": \"token\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"recipient\",\n                \"type\": \"address\",\n                \"indexed\": true,\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"amount\",\n                \"type\": \"uint256\",\n                \"indexed\": false,\n                \"internalType\": \"uint256\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"TwapIntervalUpdated\",\n        \"inputs\": [\n            {\n                \"name\": \"oldTwapInterval\",\n                \"type\": \"uint32\",\n                \"indexed\": false,\n                \"internalType\": \"uint32\"\n            }, {\n                \"name\": \"newTwapInterval\",\n                \"type\": \"uint32\",\n                \"indexed\": false,\n                \"internalType\": \"uint32\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"event\",\n        \"name\": \"Unpaused\",\n        \"inputs\": [\n            {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"indexed\": false,\n                \"internalType\": \"address\"\n            }\n        ],\n        \"anonymous\": false\n    }, {\n        \"type\": \"error\",\n        \"name\": \"AccessControlBadConfirmation\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"AccessControlUnauthorizedAccount\",\n        \"inputs\": [\n            {\n                \"name\": \"account\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }, {\n                \"name\": \"neededRole\",\n                \"type\": \"bytes32\",\n                \"internalType\": \"bytes32\"\n            }\n        ]\n    }, {\n        \"type\": \"error\",\n        \"name\": \"AdjustedQuoteCalculationFailed\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"DeviationMustBePositive\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"DeviationTooHigh\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"EnforcedPause\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"ExpectedPause\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"IntervalTooLong\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"IntervalTooShort\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"PriceVolatilityTooHigh\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"ReentrancyGuardReentrantCall\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"SafeERC20FailedOperation\",\n        \"inputs\": [\n            {\n                \"name\": \"token\",\n                \"type\": \"address\",\n                \"internalType\": \"address\"\n            }\n        ]\n    }, {\n        \"type\": \"error\",\n        \"name\": \"SlippageProtectionTooHigh\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"SlippageTooHigh\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"SwapFailed\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"SwapSlippageTooHigh\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"UnauthorizedSwapCallback\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"VaultIsEmpty\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"VaultIsInOneToken\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"ZeroAddress\",\n        \"inputs\": []\n    }, {\n        \"type\": \"error\",\n        \"name\": \"ZeroAmount\",\n        \"inputs\": []\n    }\n]\n","export const UniswapV3PoolABI = [{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"Collect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"name\":\"CollectProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paid1\",\"type\":\"uint256\"}],\"name\":\"Flash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextOld\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"observationCardinalityNextNew\",\"type\":\"uint16\"}],\"name\":\"IncreaseObservationCardinalityNext\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":true,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1Old\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol0New\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"feeProtocol1New\",\"type\":\"uint8\"}],\"name\":\"SetFeeProtocol\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collect\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"amount0Requested\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1Requested\",\"type\":\"uint128\"}],\"name\":\"collectProtocol\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"amount1\",\"type\":\"uint128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fee\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal0X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeGrowthGlobal1X128\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"flash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidity\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLiquidityPerTick\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"observations\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"blockTimestamp\",\"type\":\"uint32\"},{\"internalType\":\"int56\",\"name\":\"tickCumulative\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityCumulativeX128\",\"type\":\"uint160\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"secondsAgos\",\"type\":\"uint32[]\"}],\"name\":\"observe\",\"outputs\":[{\"internalType\":\"int56[]\",\"name\":\"tickCumulatives\",\"type\":\"int56[]\"},{\"internalType\":\"uint160[]\",\"name\":\"secondsPerLiquidityCumulativeX128s\",\"type\":\"uint160[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"positions\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside0LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthInside1LastX128\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"tokensOwed1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFees\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"token0\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"token1\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"feeProtocol0\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol1\",\"type\":\"uint8\"}],\"name\":\"setFeeProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"snapshotCumulativesInside\",\"outputs\":[{\"internalType\":\"int56\",\"name\":\"tickCumulativeInside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityInsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsInside\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"amount0\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"amount1\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16\",\"name\":\"\",\"type\":\"int16\"}],\"name\":\"tickBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tickSpacing\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"\",\"type\":\"int24\"}],\"name\":\"ticks\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"liquidityGross\",\"type\":\"uint128\"},{\"internalType\":\"int128\",\"name\":\"liquidityNet\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside0X128\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeGrowthOutside1X128\",\"type\":\"uint256\"},{\"internalType\":\"int56\",\"name\":\"tickCumulativeOutside\",\"type\":\"int56\"},{\"internalType\":\"uint160\",\"name\":\"secondsPerLiquidityOutsideX128\",\"type\":\"uint160\"},{\"internalType\":\"uint32\",\"name\":\"secondsOutside\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]","export const UniswapV3QuoterABI = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_factory\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WETH9\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WETH9\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"factory\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"uint24\",\n                        \"name\": \"fee\",\n                        \"type\": \"uint24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"uint24\",\n                        \"name\": \"fee\",\n                        \"type\": \"uint24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"uniswapV3SwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }\n] as const;\n\nexport const QuickSwapQuoterV2 = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_factory\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WNativeToken\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_poolDeployer\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WNativeToken\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"algebraSwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"factory\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [],\n        \"name\": \"poolDeployer\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }\n]\n\nexport const QuoterV2Thick = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_factory\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WETH9\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WETH9\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"factory\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"int24\",\n                        \"name\": \"tickSpacing\",\n                        \"type\": \"int24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"uint24\",\n                        \"name\": \"fee\",\n                        \"type\": \"uint24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"uniswapV3SwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }\n]\n\nexport const QuoterV2AlgebgraIntegral = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_factory\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WNativeToken\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_poolDeployer\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WNativeToken\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"algebraSwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"factory\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [],\n        \"name\": \"poolDeployer\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountInRequired\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            },\n            {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16[]\",\n                \"name\": \"feeList\",\n                \"type\": \"uint16[]\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            },\n            {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16\",\n                \"name\": \"fee\",\n                \"type\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOutRequired\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            },\n            {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16[]\",\n                \"name\": \"feeList\",\n                \"type\": \"uint16[]\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    }, {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            },\n            {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16\",\n                \"name\": \"fee\",\n                \"type\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }\n]\n\nexport const QuoterV2AlgebgraIntegral21 = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_factory\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WNativeToken\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_poolDeployer\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WNativeToken\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"algebraSwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"factory\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [],\n        \"name\": \"poolDeployer\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountInRequired\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256[]\",\n                \"name\": \"amountOutList\",\n                \"type\": \"uint256[]\"\n            },\n            {\n                \"internalType\": \"uint256[]\",\n                \"name\": \"amountInList\",\n                \"type\": \"uint256[]\"\n            },\n            {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            },\n            {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16[]\",\n                \"name\": \"feeList\",\n                \"type\": \"uint16[]\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"deployer\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            },\n            {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16\",\n                \"name\": \"fee\",\n                \"type\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOutRequired\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256[]\",\n                \"name\": \"amountOutList\",\n                \"type\": \"uint256[]\"\n            },\n            {\n                \"internalType\": \"uint256[]\",\n                \"name\": \"amountInList\",\n                \"type\": \"uint256[]\"\n            },\n            {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            },\n            {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16[]\",\n                \"name\": \"feeList\",\n                \"type\": \"uint16[]\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"deployer\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"limitSqrtPrice\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            },\n            {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            },\n            {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint16\",\n                \"name\": \"fee\",\n                \"type\": \"uint16\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }\n]\nexport const QuoterV2Shadow = [\n    {\n        \"inputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"_deployer\",\n                \"type\": \"address\"\n            }, {\n                \"internalType\": \"address\",\n                \"name\": \"_WETH9\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"constructor\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"OutOfBounds\",\n        \"type\": \"error\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"Overflow\",\n        \"type\": \"error\"\n    },\n    {\n        \"inputs\": [],\n        \"name\": \"WETH9\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [],\n        \"name\": \"deployer\",\n        \"outputs\": [\n            {\n                \"internalType\": \"address\",\n                \"name\": \"\",\n                \"type\": \"address\"\n            }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactInput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amountIn\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"int24\",\n                        \"name\": \"tickSpacing\",\n                        \"type\": \"int24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactInputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactInputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountOut\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"name\": \"quoteExactOutput\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160[]\",\n                \"name\": \"sqrtPriceX96AfterList\",\n                \"type\": \"uint160[]\"\n            }, {\n                \"internalType\": \"uint32[]\",\n                \"name\": \"initializedTicksCrossedList\",\n                \"type\": \"uint32[]\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"components\": [\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenIn\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"address\",\n                        \"name\": \"tokenOut\",\n                        \"type\": \"address\"\n                    },\n                    {\n                        \"internalType\": \"uint256\",\n                        \"name\": \"amount\",\n                        \"type\": \"uint256\"\n                    },\n                    {\n                        \"internalType\": \"int24\",\n                        \"name\": \"tickSpacing\",\n                        \"type\": \"int24\"\n                    }, {\n                        \"internalType\": \"uint160\",\n                        \"name\": \"sqrtPriceLimitX96\",\n                        \"type\": \"uint160\"\n                    }\n                ],\n                \"internalType\": \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n                \"name\": \"params\",\n                \"type\": \"tuple\"\n            }\n        ],\n        \"name\": \"quoteExactOutputSingle\",\n        \"outputs\": [\n            {\n                \"internalType\": \"uint256\",\n                \"name\": \"amountIn\",\n                \"type\": \"uint256\"\n            }, {\n                \"internalType\": \"uint160\",\n                \"name\": \"sqrtPriceX96After\",\n                \"type\": \"uint160\"\n            }, {\n                \"internalType\": \"uint32\",\n                \"name\": \"initializedTicksCrossed\",\n                \"type\": \"uint32\"\n            }, {\n                \"internalType\": \"uint256\",\n                \"name\": \"gasEstimate\",\n                \"type\": \"uint256\"\n            }\n        ],\n        \"stateMutability\": \"nonpayable\",\n        \"type\": \"function\"\n    }, {\n        \"inputs\": [\n            {\n                \"internalType\": \"int256\",\n                \"name\": \"amount0Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"int256\",\n                \"name\": \"amount1Delta\",\n                \"type\": \"int256\"\n            }, {\n                \"internalType\": \"bytes\",\n                \"name\": \"path\",\n                \"type\": \"bytes\"\n            }\n        ],\n        \"name\": \"uniswapV3SwapCallback\",\n        \"outputs\": [],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n    }\n]\n\n","export const FEE_MANAGER_ABI = [\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'previousAdmin',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'newAdmin',\n        type: 'address',\n      },\n    ],\n    name: 'AdminChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'implementation',\n        type: 'address',\n      },\n    ],\n    name: 'Upgraded',\n    type: 'event',\n  },\n  {\n    stateMutability: 'payable',\n    type: 'fallback',\n  },\n  {\n    inputs: [],\n    name: 'admin',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'newAdmin',\n        type: 'address',\n      },\n    ],\n    name: 'changeAdmin',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'implementation',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'newImplementation',\n        type: 'address',\n      },\n    ],\n    name: 'upgradeTo',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'newImplementation',\n        type: 'address',\n      },\n      {\n        internalType: 'bytes',\n        name: 'data',\n        type: 'bytes',\n      },\n    ],\n    name: 'upgradeToAndCall',\n    outputs: [],\n    stateMutability: 'payable',\n    type: 'function',\n  },\n  {\n    stateMutability: 'payable',\n    type: 'receive',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'beacon',\n        type: 'address',\n      },\n    ],\n    name: 'BeaconUpgraded',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'string[]',\n        name: 'feeIdentifier',\n        type: 'string[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'feeValue',\n        type: 'uint256[]',\n      },\n      {\n        indexed: false,\n        internalType: 'address[]',\n        name: 'withdrawer',\n        type: 'address[]',\n      },\n    ],\n    name: 'FeeUpdated',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'caller',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'to',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'amount0',\n        type: 'uint256',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256',\n        name: 'amount1',\n        type: 'uint256',\n      },\n    ],\n    name: 'FeeWithdrawn',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'caller',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'string[]',\n        name: 'feeIdentifier',\n        type: 'string[]',\n      },\n      {\n        indexed: false,\n        internalType: 'address[]',\n        name: 'to',\n        type: 'address[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'amount0',\n        type: 'uint256[]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[]',\n        name: 'amount1',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'FeesWithdrawn',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'caller',\n        type: 'address',\n      },\n      {\n        indexed: false,\n        internalType: 'address[]',\n        name: 'vaults',\n        type: 'address[]',\n      },\n      {\n        indexed: false,\n        internalType: 'string[][]',\n        name: 'feeIdentifiers',\n        type: 'string[][]',\n      },\n      {\n        indexed: false,\n        internalType: 'address[][]',\n        name: 'to',\n        type: 'address[][]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[][]',\n        name: 'amount0',\n        type: 'uint256[][]',\n      },\n      {\n        indexed: false,\n        internalType: 'uint256[][]',\n        name: 'amount1',\n        type: 'uint256[][]',\n      },\n    ],\n    name: 'FeesWithdrawnFromMultipleVaults',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'previousOwner',\n        type: 'address',\n      },\n      {\n        indexed: true,\n        internalType: 'address',\n        name: 'newOwner',\n        type: 'address',\n      },\n    ],\n    name: 'OwnershipTransferred',\n    type: 'event',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'string[]',\n        name: 'stringArray',\n        type: 'string[]',\n      },\n    ],\n    name: 'areAllUnique',\n    outputs: [],\n    stateMutability: 'pure',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n      {\n        internalType: 'address',\n        name: 'newWithdrawer',\n        type: 'address',\n      },\n    ],\n    name: 'changeFeeWithdrawer',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n    ],\n    name: 'getFees',\n    outputs: [\n      {\n        components: [\n          {\n            internalType: 'string',\n            name: 'feeIdentifier',\n            type: 'string',\n          },\n          {\n            internalType: 'uint256',\n            name: 'feeValue',\n            type: 'uint256',\n          },\n        ],\n        internalType: 'struct FeeManager.Fee[]',\n        name: '',\n        type: 'tuple[]',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: '_vaultRegistry',\n        type: 'address',\n      },\n    ],\n    name: 'initialize',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'owner',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'renounceOwnership',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'totalVaultFees',\n        type: 'uint256',\n      },\n      {\n        internalType: 'string[]',\n        name: 'feeIdentifier',\n        type: 'string[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'feeValue',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'address[]',\n        name: 'withdrawer',\n        type: 'address[]',\n      },\n    ],\n    name: 'setDefaultFeeAndWithdrawalPermission',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'string[]',\n        name: 'feeIdentifier',\n        type: 'string[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'feeValue',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'address[]',\n        name: 'withdrawer',\n        type: 'address[]',\n      },\n    ],\n    name: 'setFeeAndWithdrawalPermission',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'setMigratedVaultFeeAndWithdrawalPermission',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'newTotalFees',\n        type: 'uint256',\n      },\n    ],\n    name: 'setTotalFees',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'newOwner',\n        type: 'address',\n      },\n    ],\n    name: 'transferOwnership',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'uint256',\n        name: 'index',\n        type: 'uint256',\n      },\n    ],\n    name: 'vaultFees',\n    outputs: [\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n      {\n        internalType: 'uint256',\n        name: 'feeValue',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'vaultRegistry',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n    ],\n    name: 'vaultTotalFees',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount0',\n        type: 'uint256',\n      },\n      {\n        internalType: 'uint256',\n        name: 'amount1',\n        type: 'uint256',\n      },\n    ],\n    name: 'withdrawFee',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address[]',\n        name: 'vaults',\n        type: 'address[]',\n      },\n      {\n        internalType: 'string[][]',\n        name: 'feeIdentifiers',\n        type: 'string[][]',\n      },\n      {\n        internalType: 'uint256[][]',\n        name: 'amount0',\n        type: 'uint256[][]',\n      },\n      {\n        internalType: 'uint256[][]',\n        name: 'amount1',\n        type: 'uint256[][]',\n      },\n    ],\n    name: 'withdrawFeesFromMultipleVaults',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'string[]',\n        name: 'feeIdentifiers',\n        type: 'string[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'amount0',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'amount1',\n        type: 'uint256[]',\n      },\n    ],\n    name: 'withdrawMultipleFees',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'address',\n        name: 'vault',\n        type: 'address',\n      },\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n    ],\n    name: 'withdrawalPermissions',\n    outputs: [\n      {\n        internalType: 'address',\n        name: '',\n        type: 'address',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n","export const VAULT_FEES_ABI = [\n  {\n    inputs: [\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n    ],\n    name: 'accruedFees0',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      {\n        internalType: 'string',\n        name: 'feeIdentifier',\n        type: 'string',\n      },\n    ],\n    name: 'accruedFees1',\n    outputs: [\n      {\n        internalType: 'uint256',\n        name: '',\n        type: 'uint256',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const arthswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionArthSwap,\n  subgraph: {\n    [Chain.Astar]:\n      \"https://squid.subsquid.io/arthswap-v3-astar-squid/v/v1/graphql\",\n    [Chain.AstarZkevm]:\n      \"https://squid.subsquid.io/arthswap-v3-zkevm-squid/v/v1/graphql\",\n  },\n  factoryAddress: {\n    [Chain.Astar]: \"0x69E92b56e4BF4C0FFa2cFB087c7EA47E846a7244\",\n    [Chain.AstarZkevm]: \"0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720\",\n  },\n  TickLensAddress: {\n    [Chain.Astar]: \"0xf369b9904050CD906CFB088A36b5FBA59CA1F698\",\n    [Chain.AstarZkevm]: \"0x28674A44198BCd674E21D76C16a948B97B0482a2\",\n  },\n}); ","import { ProtocolInfo } from '../../../../types.js';\nimport { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\n\nexport const baseSwapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBaseSwap,\n  subgraph: {\n    [Chain.Base]:\n      'https://api.goldsky.com/api/public/project_cltceeuudv1ij01x7ekxhfl46/subgraphs/v3-base/prod/gn',\n  },\n  factoryAddress: {\n    [Chain.Base]: '0x38015D05f4fEC8AFe15D7cc0386a126574e8077B',\n  },\n  TickLensAddress: {\n    [Chain.Base]: '0x49a3A5cf91DE1b78c43Dc1adD03E8A71f1Ea2e30',\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const basexConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBaseX,\n  subgraph: {\n    [Chain.Base]:\n      \"https://api.studio.thegraph.com/query/54040/basex/v0.0.39\",\n  },\n  factoryAddress: {\n    [Chain.Base]: \"0xdC323d16C451819890805737997F4Ede96b95e3e\",\n  },\n  swapRouterAddress: {\n    [Chain.Base]: \"0x30FF944EaEc54a433B7283dA42C6A9c65e20038F\",\n  },\n  TickLensAddress: {\n    [Chain.Base]: \"0x6f07aF1F970789B5CF29134B6f4506D9774ce935\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const camelotConfig = (): ProtocolInfo => ({\n    beaconContract: MultiPositionManagers.MultiPositionCamelot,\n    subgraph: {\n      [Chain.Arbitrum]: \"https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/3utanEBA9nqMjPnuQP1vMCCys6enSM3EawBpKTVwnUw2\",\n      // Goldsky-hosted Camelot AMM V3 subgraph for ApeChain.\n      [Chain.Apechain]: \"https://api.goldsky.com/api/public/project_cmhfvhwp1000mqkp2g91h5ej1/subgraphs/camelot-ammv3-apechain/v1.1.1/gn\"\n    },\n    factoryAddress: {\n      [Chain.Arbitrum]: \"0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B\",\n      [Chain.Apechain]: '0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B'\n    },\n    NFTManagerAddress: {\n      [Chain.Arbitrum]: \"0x00c7f3082833e796A5b3e4Bd59f6642FF44DCD15\",\n      [Chain.Apechain]: \"0x00c7f3082833e796A5b3e4Bd59f6642FF44DCD15\"\n    },\n    TickLensAddress: {\n      [Chain.Arbitrum]: \"0xe489df86999C0138A55Cecc096930f580d192Ab8\",\n      [Chain.Apechain]: \"0xe489df86999C0138A55Cecc096930f580d192Ab8\",\n    },\n    QuoterV2Address: {\n      [Chain.Arbitrum]: '0x2Ca933639900b88346EdB1D1dDF58A752314D566'\n    }\n  });\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const crustConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionCrust,\n  subgraph: {\n    [Chain.Mantle]: 'https://subgraph-api.mantle.xyz/subgraphs/name/crust-v3-subgraph',\n  },\n  factoryAddress: {\n    [Chain.Mantle]: '0xe67a97d7e55256F33fA0B1465d31E6CED36065d0',\n  },\n  TickLensAddress: {\n    [Chain.Mantle]: '0x05AD0a29c1CbDaA7416c1e46b45520e2748E9c3C',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const equilibreConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionEquilibre,\n  subgraph: {\n    [Chain.Scroll]:\n      \"https://api.studio.thegraph.com/query/21023/keller-cl-scroll/version/latest\",\n  },\n  factoryAddress: {\n    [Chain.Scroll]: \"0x952aC46B2586737df679e836d9B980E43E12B2d8\",\n  },\n  TickLensAddress: {\n    [Chain.Scroll]: \"0x9D8e06feae228E4F8D94522B4f09dDCaD1823A07\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const fenixConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionFenix,\n  subgraph: {\n    [Chain.Blast]:\n      \"https://api.goldsky.com/api/public/project_clxadvm41bujy01ui2qalezdn/subgraphs/fenix-v3-dex/latest/gn\",\n  },\n  factoryAddress: {\n    [Chain.Blast]: \"0x7a44CD060afC1B6F4c80A2B9b37f4473E74E25Df\",\n  },\n  TickLensAddress: {\n    [Chain.Blast]: \"0x098cB852107a0b4508664C09917c00dcb0745aa9\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const forgeConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionForge,\n  subgraph: {\n    [Chain.Evmos]: \"https://subgraph.evmos.org/subgraphs/name/forge-subgraph\",\n  },\n  factoryAddress: {\n    [Chain.Evmos]: \"0xf544365e7065966f190155F629cE0182fC68Eaa2\",\n  },\n  swapRouterAddress: {\n    [Chain.Evmos]: \"0x5b5e44da9718288244110e66a7cA6C537f36f948\",\n  },\n  NFTManagerAddress: {\n    [Chain.Evmos]: \"0x5fE5dAAa011673289847dA4f76d63246DDB2965d\",\n  },\n  TickLensAddress: {\n    [Chain.Evmos]: \"0x8Ae03dB96E16C5cEec346Aae78A8103365F5232B\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const fusionxConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionFusionX,\n  subgraph: {\n    [Chain.Mantle]:\n      \"https://subgraph-api.mantle.xyz/subgraphs/name/fusionx/exchange-v3\",\n  },\n  factoryAddress: {\n    [Chain.Mantle]: \"0x530d2766D1988CC1c000C8b7d00334c14B69AD71\",\n  },\n  TickLensAddress: {\n    [Chain.Mantle]: \"0xE80EE7e19Dd06365111471E1478bA671CAd024C0\",\n  },\n  initCodeHash: {\n    [Chain.Mantle]:\n      \"0x1bce652aaa6528355d7a339037433a20cd28410e3967635ba8d2ddb037440dbf\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const henjinConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionHenjin,\n  beaconAlgebraHook: MultiPositionManagers.MultiPositionHenjinAlgebraHook,\n  algebraHookSupportedChains: [Chain.Taiko],\n  subgraph: {\n    [Chain.Taiko]:\n      'https://api.goldsky.com/api/public/project_clvwe2yydw1n701uh6yple20i/subgraphs/henjin-info/1.0.5/gn',\n  },\n  factoryAddress: {\n    [Chain.Taiko]: '0x42B08e7a9211482d3643a126a7dF1895448d3509',\n  },\n  TickLensAddress: {\n    [Chain.Taiko]: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3',\n  },\n  EntryPointAddress: {\n    [Chain.Taiko]: '0x441013A52DDedc8D02eB9B90F7A555F6848188b5'\n  }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const herculesConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionHercules,\n  subgraph: {\n    [Chain.Metis]: \"https://metisapi.0xgraph.xyz/subgraphs/name/cryptoalgebra/analytics\",\n  },\n  factoryAddress: {\n    [Chain.Metis]: \"0xC5BfA92f27dF36d268422EE314a1387bB5ffB06A\",\n  },\n  TickLensAddress: {\n    [Chain.Metis]: \"0x3Ea6Eaa18C79a0c575596D44bfaBeE8F88781020\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const horizaConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionHoriza,\n  subgraph: {\n    [Chain.Arbitrum]:\n      'https://subgraph-prod.goerli.horiza.io/subgraphs/name/retro-arbitrum-one-uniswap-v3',\n  },\n  factoryAddress: {\n    [Chain.Arbitrum]: '0x5b1C257B88537d1Ce2AF55a1760336288CcD28B6',\n  },\n  swapRouterAddress: {\n    [Chain.Arbitrum]: '0xd73C4F7fa43A0aFd85a25Aa3aC79FCB6905Ef24',\n  },\n  NFTManagerAddress: {\n    [Chain.Arbitrum]: '0x39f16045432dc7cb6160269724821459b35938f9',\n  },\n  TickLensAddress: {\n    [Chain.Arbitrum]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kimConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionKim,\n  subgraph: {\n    [Chain.Mode]:\n      'https://api.goldsky.com/api/public/project_clmqdcfcs3f6d2ptj3yp05ndz/subgraphs/Algebra-Kim/0.0.4/gn',\n    [Chain.Base]:\n      'https://api.goldsky.com/api/public/project_clwz69zvvp7ix01w76khbha61/subgraphs/analytics/1.0.0/gn',\n  },\n  factoryAddress: {\n    [Chain.Mode]: '0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5',\n    [Chain.Base]: '0x2F0d41f94d5D1550b79A83D2fe85C82d68c5a3ca',\n  },\n  TickLensAddress: {\n    [Chain.Mode]: '0x086FaBA1D7e487B6D15568fF7E00Ae101334a7BD',\n    [Chain.Base]: '0x44a6d9741cDF9C955eE89C14C739FB1aeaD82d6B',\n  },\n  initCodeHash: {\n    [Chain.Mode]: '0xf96d2474815c32e070cd63233f06af5413efc5dcb430aee4ff18cc29007c562d',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const linehubConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionLineHub,\n  subgraph: {\n    [Chain.Linea]:\n      \"https://api.studio.thegraph.com/query/55804/linehub-v3/version/latest\",\n  },\n  factoryAddress: {\n    [Chain.Linea]: \"0x6c379d538F2F7cb642851e154A8E572D63238DF4\",\n  },\n  TickLensAddress: {\n    [Chain.Linea]: \"0x47E34401D5A741a1d601e312486963f4B9b98176\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const lynexConfig = (): ProtocolInfo => ({\n    beaconContract: MultiPositionManagers.MultiPositionLynex,\n    subgraph: {\n      [Chain.Linea]:\n        \"https://api.goldsky.com/api/public/project_cltyhthusbmxp01s95k9l8a1u/subgraphs/lynex-cl/v1.0.2/gn\",\n    },\n    factoryAddress: {\n      [Chain.Linea]: \"0x622b2c98123D303ae067DB4925CD6282B3A08D0F\",\n    },\n    NFTManagerAddress: {\n      [Chain.Linea]: \"0x5D3D9E20ad27dd61182505230D1bD075bd249E4B\",\n    },\n    TickLensAddress: {\n      [Chain.Linea]: \"0xDA6BA21f39d33e922ecC43d41E7068988dc36C6A\",\n    },\n    swapRouterAddress: {\n      [Chain.Linea]: \"0x3921e8cb45B17fC029A0a6dE958330ca4e583390\",\n    },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const maiaConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionMAIA,\n  subgraph: {\n    [Chain.Metis]: \"https://subgraph.steer.finance/maia-dao/subgraphs/name/maia-dao/uniswap-v3\",\n  },\n  factoryAddress: {\n    [Chain.Metis]: \"0xf5fd18Cd5325904cC7141cB9Daca1F2F964B9927\",\n  },\n  swapRouterAddress: {\n    [Chain.Metis]: \"0x2db8b665CE6928F9D1a7f83F4C6aCEA64Af6a6f6\",\n  },\n  NFTManagerAddress: {\n    [Chain.Metis]: \"0x1fc37a909cB3997f96cE395B3Ee9ac268C9bCcdb\",\n  },\n  TickLensAddress: {\n    [Chain.Metis]: \"0x7ddEecA94ce57264410d51E9F73a0f8983b2eAA7\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const metaVaultConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionMetaVault,\n  subgraph: {\n    [Chain.Linea]: 'https://api.studio.thegraph.com/query/55804/linea-v3/version/latest',\n    [Chain.Scroll]: 'https://api.studio.thegraph.com/query/55804/metavault-v3/version/latest',\n  },\n  factoryAddress: {\n    [Chain.Linea]: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n    [Chain.Scroll]: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n  },\n  NFTManagerAddress: {\n    [Chain.Linea]: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n    [Chain.Scroll]: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n  },\n  TickLensAddress: {\n    [Chain.Linea]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n    [Chain.Scroll]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const novaswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionNovaSwap,\n  subgraph: {\n    [Chain.ZklinkNova]: 'https://graph.zklink.io/subgraphs/name/novaswap',\n  },\n  factoryAddress: {\n    [Chain.ZklinkNova]: '0x9f94c91b178F5bc9fCcA3e5428b09A3d01CE5AC6',\n  },\n  TickLensAddress: {\n    [Chain.ZklinkNova]: '0xC0cc61e2B02CAE026Ee413Fd999012Cd29f32Bc9',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const pancakeSwapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionPancake,\n  subgraph: {\n    [Chain.BSC]: getTheGraphResolverUrl('ChmxqA9bX71cB2cQTRRULbWUBKoMRk7oh3JnpZShDQ2V', false, theGraphApiKey),\n    [Chain.Arbitrum]: getTheGraphResolverUrl('251MHFNN1rwjErXD2efWMpNS73SANZN8Ua192zw6iXve', false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.BSC]: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n    [Chain.Arbitrum]: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n  },\n  swapRouterAddress: {\n    [Chain.BSC]: '0x13f4EA83D0bd40E75C8222255bc855a974568Dd4',\n  },\n  NFTManagerAddress: {\n    [Chain.BSC]: '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364',\n    [Chain.Arbitrum]: '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364',\n  },\n  TickLensAddress: {\n    [Chain.BSC]: '0x9a489505a00cE272eAa5e07Dba6491314CaE3796',\n    [Chain.Arbitrum]: '0x9a489505a00cE272eAa5e07Dba6491314CaE3796',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const poolsharkConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionPoolShark,\n  subgraph: {\n    [Chain.Mode]:\n      'https://api.goldsky.com/api/public/project_clr6e38ix6mms01vddnnu2ydr/subgraphs/poolshark-limit-mode-season0-block2/0.3.0/gn',\n  },\n  factoryAddress: {\n    [Chain.Mode]: '0x3fa761492f411ebc64a81fcf3292fdc0b677c00f',\n  },\n  TickLensAddress: {\n    [Chain.Mode]: '0x414B73f989e7cA0653b5C98186749a348405E6D5',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionQuickSwap,\n  subgraph: {\n    [Chain.Polygon]: getTheGraphResolverUrl(`FqsRcH1XqSjqVx9GRTvEJe959aCbKrcyGgDWBrUkG24g`, false, theGraphApiKey),\n    [Chain.PolygonzkEVM]:\n      'https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7?source=quickswap',\n  },\n  factoryAddress: {\n    [Chain.Polygon]: '0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28',\n    [Chain.PolygonzkEVM]: '0x4B9f4d2435Ef65559567e5DbFC1BbB37abC43B57',\n  },\n  NFTManagerAddress: {\n    [Chain.Polygon]: '0x8eF88E4c7CfbbaC1C163f7eddd4B578792201de6',\n    [Chain.PolygonzkEVM]: '0xd8E1E7009802c914b0d39B31Fc1759A865b727B1',\n  },\n  TickLensAddress: {\n    [Chain.Polygon]: '0x25Ef108B328Cf752F0E0b0169D499Db164173763',\n    [Chain.PolygonzkEVM]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n  },\n  QuoterV2Address: {\n    [Chain.Polygon]: \"0xB10aB1a1C0E3E9697928F05dA842a292310b37f1\",\n    \n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapAlgebraConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionQuickswap19,\n  subgraph: {\n    [Chain.XLayer]:\n      \"https://api.studio.thegraph.com/query/44554/qs-xlayer-v3/version/latest\",\n  },\n  factoryAddress: {\n    [Chain.XLayer]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n  },\n  TickLensAddress: {\n    [Chain.XLayer]: \"0x6c28AeF8977c9B773996d0e8376d2EE379446F2f\",\n  },\n  QuoterV2Address: {\n    [Chain.XLayer]: '0xd5532a58E4ABB6485FF4e7BCf5bED278e32A516e'\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapIntegralConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionQuickSwapIntegral,\n  beaconAlgebraHook: MultiPositionManagers.AlgebraHook,\n  algebraHookSupportedChains: [ Chain.Base, Chain.Polygon ],\n  algebraHookBeaconsByChain: {\n    [Chain.Base]: [MultiPositionManagers.AlgebraHook],\n    [Chain.Polygon]: [MultiPositionManagers.TestQuickswapAlgebraIntegralHook],\n  },\n  subgraph: {\n    [Chain.Soneium]: getTheGraphResolverUrl('3GsT6AiuDiSzh2fXbFxUKtBxT8rBEGVdQCgHSsKMPHiu', false, theGraphApiKey),\n    [Chain.Base]: getTheGraphResolverUrl('U65NKb6BsDPGqugPAda58ebMLa1RqeMFT76fndB77oe', false, theGraphApiKey),\n    [Chain.Polygon]: getTheGraphResolverUrl('5JUgNJk47FJRjKRzhZ8JtBpWQA4GyRFzNQFCKNpxkvCM', false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Soneium]: '0x8Ff309F68F6Caf77a78E9C20d2Af7Ed4bE2D7093',\n    [Chain.Base]: '0xC5396866754799B9720125B104AE01d935Ab9C7b',\n    [Chain.Polygon]: '0x134c1dBE4860A9cAaf89002574fFe814772D9904'\n  },\n  TickLensAddress: {\n    [Chain.Soneium]: '0x9AfA76331a01b1b25289306fbD72A4e032FDFe06',\n    [Chain.Base]: '0xC73e303fb323DDFB446E2Cc8c0f1B8199e7930f4',\n    [Chain.Polygon]: '0x28aDcf283d392e3902F49A7E9A78E40D64348290'\n  },\n  QuoterV2Address: {\n    [Chain.Base]: '0x23E0583a3a000d567bB3848115065c1890D87fb5',\n    [Chain.Soneium]: '0x22e5195BcC9b0C87f330FbCE2755B263662578E2',\n    [Chain.Polygon]: '0xa062c2754864F67a259b346D0D7567b2ed406e6E'\n  },\n  EntryPointAddress: {\n    [Chain.Base]: '0xb9ce7698cE3dCf21cc88bf7dCc1fE20C85E4226E',\n    [Chain.Polygon]: '0xfcfE065bc131Fa8Bb31A227b2fF4F0EC47D3F1a2'\n  }\n}); \n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const quickSwapUniv3Config = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionQuickSwapUniv3,\n  subgraph: {\n    [Chain.Manta]: \"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn\",\n    [Chain.OkxTestnet]: \"https://subgraph.steer.finance/quickswap-x1-testnet/subgraphs/name/quickswap-univ3\",\n    [Chain.AstarZkevm]: \"https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest\",\n  },\n  factoryAddress: {\n    [Chain.Manta]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n    [Chain.OkxTestnet]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n    [Chain.AstarZkevm]: \"0x56c2162254b0E4417288786eE402c2B41d4e181e\",\n  },\n  NFTManagerAddress: {\n    [Chain.Manta]: \"0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff\",\n    [Chain.AstarZkevm]: \"0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd\",\n  },\n  TickLensAddress: {\n    [Chain.Manta]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n    [Chain.OkxTestnet]: \"0xd2480162Aa7F02Ead7BF4C127465446150D58452\",\n    [Chain.AstarZkevm]: \"0x6c28AeF8977c9B773996d0e8376d2EE379446F2f\",\n  },\n  QuoterV2Address: {\n    [Chain.Manta]: '0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd',\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const retroConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionRetro,\n  deprecated: true,\n  subgraph: {\n    [Chain.Polygon]: \"https://api.thegraph.com/subgraphs/name/ruvlol/univ3-test\",\n  },\n  factoryAddress: {\n    [Chain.Polygon]: \"0x91e1B99072f238352f59e58de875691e20Dc19c1\",\n  },\n  TickLensAddress: {\n    [Chain.Polygon]: \"0x9fdeA1412e50D78B25aCE4f96d35801647Fdf7dA\",\n  },\n  initCodeHash: {\n    [Chain.Polygon]: \"0x817e07951f93017a93327ac8cc31e946540203a19e1ecc37bc1761965c2d1090\",\n  },\n  QuoterV2Address: {\n    [Chain.Polygon]: '0xfe08BE075758935cb6cB9318d1fbb60920416d4e'\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sparkConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSpark,\n  subgraph: {\n    [Chain.Flare]:\n      'https://api.goldsky.com/api/public/project_cly4708cqpcj601tt7gzf1jdj/subgraphs/sparkdex-v3/latest/gn',\n  },\n  factoryAddress: {\n    [Chain.Flare]: '0xb3fB4f96175f6f9D716c17744e5A6d4BA9da8176',\n  },\n  TickLensAddress: {\n    [Chain.Flare]: '0x80BE099457DF46e7EA0C38A7B4bB8DAF74079957',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const spark32Config = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSpark32,\n  subgraph: {\n    [Chain.Flare]:\n      \"https://api.goldsky.com/api/public/project_cm1tgcbwdqg8b01un9jf4a64o/subgraphs/sparkdex-v3-2/latest/gn\",\n  },\n  factoryAddress: {\n    [Chain.Flare]: \"0x8A2578d23d4C532cC9A98FaD91C0523f5efDE652\",\n  },\n  TickLensAddress: {\n    [Chain.Flare]: \"0xdB5F2Ca65aAeB277E36be69553E0e7aA3585204d\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const supswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSupSwap,\n  subgraph: {\n    [Chain.Mode]:\n      \"https://api.goldsky.com/api/public/project_clrhmyxsvvuao01tu4aqj653e/subgraphs/supswap-exchange-v3/1.0.0/gn\",\n  },\n  factoryAddress: {\n    [Chain.Mode]: \"0xa0b018Fe0d00ed075fb9b0eEe26d25cf72e1F693\",\n  },\n  TickLensAddress: {\n    [Chain.Mode]: \"0x5E6AEbab1AD525f5336Bd12E6847b851531F72ba\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const swapmodeConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSwapMode,\n  subgraph: {\n    [Chain.Mode]:\n      \"https://api.goldsky.com/api/public/project_cltceeuudv1ij01x7ekxhfl46/subgraphs/swapmode-v3/prod/gn\",\n  },\n  factoryAddress: {\n    [Chain.Mode]: \"0x6E36FC34eA123044F278d3a9F3819027B21c9c32\",\n  },\n  TickLensAddress: {\n    [Chain.Mode]: \"0x62e879c8979694DbC3A4EF1dd324b08Ee3Ac3688\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const swapsicleConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSwasicle,\n  subgraph: {\n    [Chain.Telos]:\n      \"https://api.telos.0xgraph.xyz/api/public/f59149ee-c99a-41d0-afe4-1c86170a98b0/subgraphs/swapsicle/analytics/prod/gn\",\n  },\n  factoryAddress: {\n    [Chain.Telos]: \"0xA09BAbf9A48003ae9b9333966a8Bda94d820D0d9\",\n  },\n  TickLensAddress: {\n    [Chain.Telos]: \"0x9dE2dEA5c68898eb4cb2DeaFf357DFB26255a4aa\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\n\nexport const sushiConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSushi,\n  beaconContractSushiManaged: MultiPositionManagers.MultiPositionSushiManaged,\n  subgraph: {\n    [Chain.Arbitrum]: getTheGraphResolverUrl('96EYD64NqmnFxMELu2QLWB95gqCmA9N96ssYsZfFiYHg', false, theGraphApiKey),\n    [Chain.Avalanche]: getTheGraphResolverUrl('4BxsTB5ADnYdgJgdmzyddmnDGCauctDia28uxB1hgTBE', false, theGraphApiKey),\n    [Chain.BSC]: getTheGraphResolverUrl('FiJDXMFCBv88GP17g2TtPh8BcA8jZozn5WRW7hCN7cUT', false, theGraphApiKey),\n    [Chain.Base]: getTheGraphResolverUrl('Cz4Snpih41NNNPZcbj1gd3fYXPwFr5q92iWMoZjCarEb', false, theGraphApiKey),\n    [Chain.Optimism]: getTheGraphResolverUrl('Dr3FkshPgTMMDwxckz3oZdwLxaPcbzZuAbE92i6arYtJ', false, theGraphApiKey),\n    [Chain.Polygon]: getTheGraphResolverUrl('CqLnQY1d6DLcBYu7aZvGmt17LoNdTe4fDYnGbE2EgotR', false, theGraphApiKey),\n    [Chain.Thundercore]: 'https://graph-node.thundercore.com/subgraphs/name/sushi-v3/v3-thundercore',\n    [Chain.PolygonzkEVM]: getTheGraphResolverUrl('E2x2gmtYdm2HX3QXorUBY4KegfGu79Za6TEQYjVrx15c', false, theGraphApiKey),\n    [Chain.Linea]: getTheGraphResolverUrl('QmNZ9ePvxGRDHAEhb7cLsb3AvtCCPJ3qAwh1CDvDn39RMa', true, theGraphApiKey),\n    [Chain.Blast]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-blast/gn',\n    [Chain.Rootstock]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-rootstock/gn',\n    [Chain.Filecoin]: 'https://sushi.laconic.com/subgraphs/name/sushiswap/v3-filecoin',\n    [Chain.Hemi]: 'https://subgraph-proxy-server-xf2uthetka-as.a.run.app/gateway-arbitrum/GQU44ZBv8NpiBUxA6eLSDSdd7bs6TVop9dASKzrdirUv',\n    [Chain.Katana]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-katana/gn',\n    [Chain.Robinhood]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/v3-robinhood/gn',\n    [Chain.Mainnet]: getTheGraphResolverUrl('5nnoU1nUFeWqtXgbpC54L9PWdpgo7Y9HYinR3uTMsfzs', false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Polygon]: '0x917933899c6a5F8E37F31E19f92CdBFF7e8FF0e2',\n    [Chain.Arbitrum]: '0x1af415a1EbA07a4986a52B6f2e7dE7003D82231e',\n    [Chain.Optimism]: '0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0',\n    [Chain.BSC]: '0x126555dd55a39328F69400d6aE4F782Bd4C34ABb',\n    [Chain.Avalanche]: '0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715',\n    [Chain.Thundercore]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    [Chain.PolygonzkEVM]: '0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506',\n    [Chain.Base]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    [Chain.Linea]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    [Chain.Blast]: '0x7680D4B43f3d1d54d6cfEeB2169463bFa7a6cf0d',\n    [Chain.Rootstock]: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e',\n    [Chain.Filecoin]: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    [Chain.Hemi]: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959',\n    [Chain.Katana]: '0x203e8740894c8955cB8950759876d7E7E45E04c1',\n    [Chain.Robinhood]: '0xe51960f1b45f1c9fb6d166e6a884f866fc70433b',\n    [Chain.Mainnet]: '0xbaceb8ec6b9355dfc0269c18bac9d6e2bdc29c4f',\n  },\n  NFTManagerAddress: {\n    [Chain.Polygon]: '0xb7402ee99f0a008e461098ac3a27f4957df89a40',\n    [Chain.Arbitrum]: '0xf0cbce1942a68beb3d1b73f0dd86c8dcc363ef49',\n    [Chain.Optimism]: '0x1af415a1eba07a4986a52b6f2e7de7003d82231e',\n    [Chain.BSC]: '0xf70c086618dcf2b1a461311275e00d6b722ef914',\n    [Chain.Avalanche]: '0x18350b048ab366ed601ffdbc669110ecb36016f3',\n    [Chain.Thundercore]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    [Chain.PolygonzkEVM]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    [Chain.Base]: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',\n    [Chain.Linea]: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',\n    [Chain.Blast]: '0x51edb3e5bce8618b77b60215f84ad3db14709051',\n    [Chain.Rootstock]: '0x0389879e0156033202c44bf784ac18fc02edee4f',\n    [Chain.Filecoin]: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    [Chain.Hemi]: '0xe43ca1dee3f0fc1e2df73a0745674545f11a59f5',\n    [Chain.Katana]: '0x2659c6085d26144117d904c46b48b6d180393d27',\n    [Chain.Robinhood]: '0x51d0e5188afe12d502e29d982d20c190e7816107',\n    [Chain.Mainnet]: '0x2214a42d8e2a1d20635c2cb0664422c528b6a432',\n  },\n  TickLensAddress: {\n    [Chain.Polygon]: '0x9fdeA1412e50D78B25aCE4f96d35801647Fdf7dA',\n    [Chain.Arbitrum]: '0x8516944E89f296eb6473d79aED1Ba12088016c9e',\n    [Chain.Optimism]: '0x0367a647A68f304f2A6e453c25033a4249d7F2C6',\n    [Chain.BSC]: '0x10c19390E1Ac2Fd6D0c3643a2320b0abA38E5bAA',\n    [Chain.Avalanche]: '0xDdC1b5920723F774d2Ec2C3c9355251A20819776',\n    [Chain.Thundercore]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n    [Chain.PolygonzkEVM]: '0x0BE808376Ecb75a5CF9bB6D237d16cd37893d904',\n    [Chain.Base]: '0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3',\n    [Chain.Linea]: '0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3',\n    [Chain.Blast]: '0x039e87AB90205F9d87c5b40d4B28e2Be45dA4a20',\n    [Chain.Rootstock]: '0x33d91116e0370970444B0281AB117e161fEbFcdD',\n    [Chain.Filecoin]: '0x1be211D8DA40BC0ae8719c6663307Bfc987b1d6c',\n    [Chain.Hemi]: '0x1f2FCf1d036b375b384012e61D3AA33F8C256bbE',\n    [Chain.Katana]: '0x35DC3E13469E980c37b6F288BBb9822B1f9bD435',\n    [Chain.Robinhood]: '0x80126a8d806d029ac551ac6f30baf06b785175d1',\n    [Chain.Mainnet]: '0xfb70ad5a200d784e7901230e6875d91d5fa6b68c',\n  },\n  swapRouterAddress: {\n    [Chain.Thundercore]: '0xc14Ee6B248787847527e11b8d7Cf257b212f7a9F',\n    [Chain.Base]: '0xFB7eF66a7e61224DD6FcD0D7d9C3be5C8B049b9f',\n    [Chain.Linea]: '0xc14Ee6B248787847527e11b8d7Cf257b212f7a9F',\n  },\n  initCodeHash: {\n    [Chain.Polygon]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Arbitrum]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Optimism]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.BSC]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Avalanche]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Thundercore]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.PolygonzkEVM]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Base]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Linea]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Blast]: '0x8e13daee7f5a62e37e71bf852bcd44e7d16b90617ed2b17c24c2ee62411c5bae',\n    [Chain.Rootstock]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Filecoin]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Hemi]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Katana]: '0xe040f12c7cee3904b78f24f8fc395629c2e69525c2815da7a659f7483e378ecb',\n    [Chain.Robinhood]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n    [Chain.Mainnet]: '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54',\n  },\n  QuoterV2Address: {\n    [Chain.Polygon]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.Optimism]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.Arbitrum]: '0x0524E833cCD057e4d7A296e3aaAb9f7675964Ce1',\n    [Chain.BSC]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.Avalanche]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.PolygonzkEVM]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.Base]: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',\n    [Chain.Linea]: '0xFB7eF66a7e61224DD6FcD0D7d9C3be5C8B049b9f',\n    [Chain.Blast]:  '0xD93a91442Afd80243cF12f7110f48aB276fFf33F',\n    [Chain.Rootstock]:  '0xe43ca1Dee3F0fc1e2df73A0745674545F11A59F5',\n    [Chain.Filecoin]: '0x9B3fF703FA9C8B467F5886d7b61E61ba07a9b51c',\n    [Chain.Hemi]: '0x779EA16ebe59bdFa7230aa4F40D876446e387856',\n    [Chain.Katana]: '0x92dea23ED1C683940fF1a2f8fE23FE98C5d3041c',\n    [Chain.Robinhood]: '0x3e290e5e01818002a0b672148bdc7514d861c7b3',\n    [Chain.Mainnet]: '0x64e8802FE490fa7cc61d3463958199161Bb608A7',\n  }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thenaConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionThena,\n  subgraph: {\n    [Chain.BSC]: 'https://api.thegraph.com/subgraphs/name/thenaursa/thena-fusion',\n  },\n  factoryAddress: {\n    [Chain.BSC]: '0x306F06C147f064A010530292A1EB6737c3e378e4',\n  },\n  NFTManagerAddress: {\n    [Chain.BSC]: '0xa51ADb08Cbe6Ae398046A23bec013979816B77Ab',\n  },\n  TickLensAddress: {\n    [Chain.BSC]: '0x1b75ee357fb44Fc246B50641A4f9e9A44D042F22',\n  },\n  swapRouterAddress: {\n    [Chain.BSC]: '0x327Dd3208f0bCF590A66110aCB6e5e6941A4EfA0',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thickConfig = (\n  theGraphApiKey: string\n): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionThick,\n  subgraph: {\n    [Chain.Fantom]: getTheGraphResolverUrl(\"AFoJe2UaxGRRMNbUFXbV9yqmqadduuN23iJh4XmbUn1S\", false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Fantom]: \"0xE6dA85feb3B4E0d6AEd95c41a125fba859bB9d24\",\n  },\n  TickLensAddress: {\n    [Chain.Fantom]: \"0xb80a72281c76464CC0e1FbF2431A897393E0d757\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thrusterConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionThruster,\n  subgraph: {\n    [Chain.Blast]: 'https://graph.hyperlock.finance/subgraphs/name/hyperlock/v3-subgraph-mainnet',\n  },\n  factoryAddress: {\n    [Chain.Blast]: '0x71b08f13B3c3aF35aAdEb3949AFEb1ded1016127',\n  },\n  TickLensAddress: {\n    [Chain.Blast]: '0x796B39328b92472b2Bd950AEB20D950611e02EF6',\n  },\n  initCodeHash: {\n    [Chain.Blast]: '0xd0c3a51b16dbc778f000c620eaabeecd33b33a80bd145e1f7cbc0d4de335193d',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const uniswapConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionUniswapV3,\n  \n  subgraph: {\n    [Chain.Mainnet]: getTheGraphResolverUrl(`5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV`, false, theGraphApiKey),\n    [Chain.Polygon]: getTheGraphResolverUrl(`EsLGwxyeMMeJuhqWvuLmJEiDKXJ4Z6YsoJreUnyeozco`, false, theGraphApiKey),\n    [Chain.Optimism]: getTheGraphResolverUrl(`Cghf4LfVqPiFw6fp6Y5X5Ubc8UpmUhSfJL82zwiBFLaj`, false, theGraphApiKey),\n    [Chain.Arbitrum]: getTheGraphResolverUrl(`FbCGRftH4a3yZugY7TnbYgPJVEv2LvMT6oF1fxPe9aJM`, false, theGraphApiKey),\n    [Chain.BSC]: getTheGraphResolverUrl(`G5MUbSBM7Nsrm9tH2tGQUiAF4SZDGf2qeo1xPLYjKr7K`, false, theGraphApiKey),\n    [Chain.Celo]: getTheGraphResolverUrl(`ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4`, false, theGraphApiKey),\n    [Chain.Rootstock]:\n      'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/oku-rootstock/1.1.1/gn',\n    [Chain.Base]: getTheGraphResolverUrl(`43Hwfi3dJSoGpyas9VwNoDAv55yjgGrPpNSmbQZArzMG`, false, theGraphApiKey),\n    [Chain.Filecoin]: 'https://subgraph.laconic.com/subgraphs/name/steer/sushi-v3',\n    [Chain.Sonic]:\n      'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/uniswap-v3-sonic-oku/prod/gn',\n    [Chain.Unichain]: getTheGraphResolverUrl(`BCfy6Vw9No3weqVq9NhyGo4FkVCJep1ZN9RMJj5S32fX`, false, theGraphApiKey),\n    [Chain.Telos]: 'https://telos.api.ormilabs.com/api/public/39892398-bfdd-48ac-b776-77ad8a5b4b9e/subgraphs/uniswap-v3-telos-oku/prod/gn',\n    [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/uniswap-v3-saga-evm-oku/prod/gn',\n    [Chain.Nibiru]: 'https://app.sentio.xyz//api/v1/graphql/rakesh/steer-oku-nibiru',\n    [Chain.Robinhood]: getTheGraphResolverUrl(`ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4`, false, theGraphApiKey) // Subgraph for Robinhood is not available yet\n  },\n  factoryAddress: {\n    [Chain.Mainnet]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    [Chain.Polygon]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    [Chain.Optimism]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    [Chain.Arbitrum]: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    [Chain.BSC]: '0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7',\n    [Chain.Celo]: '0xAfE208a311B21f13EF87E33A90049fC17A7acDEc',\n    [Chain.Rootstock]: '0xaF37EC98A00FD63689CF3060BF3B6784E00caD82',\n    [Chain.Base]: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',\n    [Chain.Filecoin]: '0xB4C47eD546Fc31E26470a186eC2C5F19eF09BA41',\n    [Chain.Sonic]: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n    [Chain.Unichain]: '0x1f98400000000000000000000000000000000003',\n    [Chain.Telos]: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n    [Chain.Saga]: '0x454050C4c9190390981Ac4b8d5AFcd7aC65eEffa',\n    [Chain.Nibiru]: '0x346239972d1fa486FC4a521031BC81bFB7D6e8a4',\n    [Chain.Robinhood]: '0x1f7d7550b1b028f7571e69a784071f0205fd2efa'\n  },\n  NFTManagerAddress: {\n    [Chain.Mainnet]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    [Chain.Polygon]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    [Chain.Optimism]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    [Chain.Arbitrum]: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    [Chain.BSC]: '0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613',\n    [Chain.Celo]: '0x3d79EdAaBC0EaB6F08ED885C05Fc0B014290D95A',\n    [Chain.Rootstock]: '0x9d9386c042F194B460Ec424a1e57ACDE25f5C4b1',\n    [Chain.Base]: '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1',\n    [Chain.Filecoin]: '0x4cd986dD509fbB6A695aE971d5C56c8795f640ee',\n    [Chain.Sonic]: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n    [Chain.Unichain]: '0x943e6e07a7e8e791dafc44083e54041d743c46e9',\n    [Chain.Telos]: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n    [Chain.Saga]: '0xdD489C75be1039ec7d843A6aC2Fd658350B067Cf',\n    [Chain.Nibiru]: '0xEFdE184f4b5d79f7c3b7Efc0388d829ff9af0050',\n    [Chain.Robinhood]: '0x73991a25c818bf1f1128deaab1492d45638de0d3'\n  },\n  swapRouterAddress: {\n    [Chain.Polygon]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n    [Chain.Optimism]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n    [Chain.Arbitrum]: '0xE592427A0AEce92De3Edee1F18E0157C05861564',\n    [Chain.Celo]: '0x5615CDAb10dc425a742d643d949a7F474C01abc4',\n    [Chain.Filecoin]: '0xcAb04058e60020d65D18D4B3DFF2cA1445D7099f',\n    [Chain.Telos]: '0xaa52bB8110fE38D0d2d2AF0B85C3A3eE622CA455',\n  },\n  TickLensAddress: {\n    [Chain.Mainnet]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n    [Chain.Polygon]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n    [Chain.Optimism]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n    [Chain.Arbitrum]: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n    [Chain.BSC]: '0xD9270014D396281579760619CCf4c3af0501A47C',\n    [Chain.Celo]: '0x5f115D9113F88e0a0Db1b5033D90D4a9690AcD3D',\n    [Chain.Rootstock]: '0x55B9dF5bF68ADe972191a91980459f48ecA16afC',\n    [Chain.Base]: '0x0CdeE061c75D43c82520eD998C23ac2991c9ac6d',\n    [Chain.Filecoin]: '0x76c001ad9E527FEfA8Fa822a987Ad44ce720BAeD',\n    [Chain.Sonic]: '0xB3309C48F8407651D918ca3Da4C45DE40109E641',\n    [Chain.Unichain]: '0xd5d76fa166ab8d8ad4c9f61aaa81457b66cbe443',\n    [Chain.Telos]: '0xB3309C48F8407651D918ca3Da4C45DE40109E641',\n    [Chain.Saga]: '0x6Aa54a43d7eEF5b239a18eed3Af4877f46522BCA',\n    [Chain.Nibiru]: '0xA9d71E1dd7ca26F26e656E66d6AA81ed7f745bf0',\n    [Chain.Robinhood]: '0x7dfd4f31be6814d2906bde155c3e1b146eac1468'\n  },\n  QuoterV2Address: {\n    [Chain.Mainnet]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n    [Chain.Polygon]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n    [Chain.Optimism]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n    [Chain.Arbitrum]: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',\n    [Chain.BSC]: '0x78D78E420Da98ad378D7799bE8f4AF69033EB077',\n    [Chain.Rootstock]: '0xb51727c996C68E60F598A923a5006853cd2fEB31',\n    [Chain.Base]: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',\n    [Chain.Filecoin]: '0xE45C06922228A33fFf1ED54638A0db78f69F9780',\n    [Chain.Sonic]: '0x5911cB3633e764939edc2d92b7e1ad375Bb57649',\n    [Chain.Unichain]: '0x385a5cf5f83e99f7bb2852b6a19c3538b9fa7658',\n    [Chain.Telos]: '0x5911cB3633e764939edc2d92b7e1ad375Bb57649',\n    [Chain.Saga]: '0x9db70E29712Cc8Af10c2B597BaDA6784544FF407',\n    [Chain.Nibiru]: '0x864DDc9B50B9A0dF676d826c9B9EDe9F8913a160',\n    [Chain.Robinhood]: '0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7'\n  }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kinetixConfig = (): ProtocolInfo => {\n  return {\n    beaconContract: MultiPositionManagers.MultiPositionKinetix,\n    subgraph: {\n      [Chain.Kava]:\n        \"https://kava-graph-node.metavault.trade/subgraphs/name/kinetixfi/v3-subgraph\",\n      [Chain.Base]:\n        \"https://api.studio.thegraph.com/query/55804/kinetixfi-base-v3/version/latest\",\n    },\n    factoryAddress: {\n      [Chain.Kava]: \"0x2dBB6254231C5569B6A4313c6C1F5Fe1340b35C2\",\n      [Chain.Base]: \"0xdDF5a3259a88Ab79D5530eB3eB14c1C92CD97FCf\",\n    },\n    TickLensAddress: {\n      [Chain.Kava]: \"0xdc7A5276aB4C6cd25e16b6118B230109945D2426\",\n      [Chain.Base]: \"0xCbd2f2407538d046b34F4226585C710aa0F50574\",\n    },\n  };\n};","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const glyphConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionGlyph,\n  subgraph: {\n    [Chain.Core]: \"https://thegraph.coredao.org/subgraphs/name/glyph/algebra\",\n  },\n  factoryAddress: {\n    [Chain.Core]: \"0x74EfE55beA4988e7D92D03EFd8ddB8BF8b7bD597\",\n  },\n  NFTManagerAddress: {\n    [Chain.Core]: \"0x7b3794f728780A61e0eB709b5bB849F50aad1E7f\",\n  },\n  TickLensAddress: {\n    [Chain.Core]: \"0x433cef5888C701831360686e54668376330cED6D\",\n  },\n  swapRouterAddress: {\n    [Chain.Core]: \"0x832933BA44658C50ae6152039Cd30A6f4C2432b1\",\n  },\n}); ","import { Chain, MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const katanaConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionKatana,\n  subgraph: {\n    [Chain.TataraTestnet]: 'http://34.126.179.146/subgraphs/name/uniswap-v3-katana',\n  },\n  factoryAddress: {\n    [Chain.TataraTestnet]: '0x9B3336186a38E1b6c21955d112dbb0343Ee061eE',\n  },\n  TickLensAddress: {\n    [Chain.TataraTestnet]: '0xb46e319390De313B8cc95EA5aa30C7bBFD79Da94',\n  },\n});\n","import { Chain, StrykePositionManagers } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const shadowConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionShadow,\n  strykeBeaconContract: StrykePositionManagers.StrykeShadowManager,\n  subgraph: {\n    [Chain.Sonic]: getTheGraphResolverUrl(`HGyx7TCqgbWieay5enLiRjshWve9TjHwiug3m66pmLGR`, false, theGraphApiKey)\n  },\n  factoryAddress: {\n    [Chain.Sonic]: \"0xcD2d0637c94fe77C2896BbCBB174cefFb08DE6d7\"\n  },\n  TickLensAddress: {\n    [Chain.Sonic]: \"0x095bBC37f439EEf5dcF733205B51447d03202E14\"\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const nestVaultConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionNest,\n  subgraph: {\n    [Chain.Hyperevm]: 'https://api.goldsky.com/api/public/project_cmfl7yikdo9zw01x014ly6v6b/subgraphs/hypenet-algebra/1.0.0/gn',\n  },\n  factoryAddress: {\n    [Chain.Hyperevm]: '0xF77Bd082c627aA54591cF2f2EaA811fd1AB3b1F3',\n  },\n  TickLensAddress: {\n    [Chain.Hyperevm]: '0x606E4922b259fe28c10e6731e8317705AA1e253B',\n  },\n  QuoterV2Address: {\n    [Chain.Hyperevm]: '0xBea20609A4772311c5b81F814Cd4f9ECaEF5DFAd',\n  },\n});\n","import { Chain, MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const bittensorUniV3Config = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBittensorUniV3,\n  subgraph: {\n    [Chain.Bittensor]: 'https://subgraph.35-247-158-26.sslip.io/subgraphs/name/uniswap-v3-bittensor',\n  },\n  factoryAddress: {\n    [Chain.Bittensor]: '0xfB30AE7542a5E8A5BC134128c0c9dEb4646a2508',\n  },\n  NFTManagerAddress: {\n    [Chain.Bittensor]: '0x32aF22F550bB1E9dd1382BEaBb0E3e6bb12fA549',\n  },\n  swapRouterAddress: {\n    [Chain.Bittensor]: '0xa0a90ebB2A57083d06146D86d99a2eED3378359d',\n  },\n  TickLensAddress: {\n    [Chain.Bittensor]: '0x40b628AE57f51E482C90AF0DBF8e2F2E124E5fc4',\n  },\n  QuoterV2Address: {\n    [Chain.Bittensor]: '0xC52476b7e73789f45E8bDe1863653439f1170d01',\n  },\n});\n","import { ProtocolInfo } from '../../../../types.js';\nimport { Chain, MultiPositionManagers } from '../../../chain.js';\n\nexport const blackholeConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBlackhole,\n  subgraph: {\n    [Chain.Avalanche]: 'https://api.goldsky.com/api/public/project_cm8gyxv0x02qv01uphvy69ey6/subgraphs/poap-subgraph-core/avax-main/gn',\n   \n  },\n  factoryAddress: {\n    [Chain.Avalanche]: '0x512eb749541B7cf294be882D636218c84a5e9E5F',\n  },\n  NFTManagerAddress: {\n    [Chain.Avalanche]: '0x3fED017EC0f5517Cdf2E8a9a4156c64d74252146',\n  },\n  TickLensAddress: {\n    [Chain.Avalanche]: '0xE66aAe9CB5aB27eC6662C0EC9B9b28764D4a822E',\n  },\n  QuoterV2Address: {\n    [Chain.Avalanche]: \"0x3e182bcf14Be6142b9217847ec1112e3c39Eb689\",\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const beamConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBeam,\n  subgraph: {\n    [Chain.Zeta]: 'https://subgraph.satsuma-prod.com/7d07f1edcbfd/codemelt/zeta-analytics/api',\n  },\n  factoryAddress: {\n    [Chain.Zeta]: '0x28b5244B6CA7Cb07f2f7F40edE944c07C2395603',\n  },\n  TickLensAddress: {\n    [Chain.Zeta]: '0x4c1e7E543879473969590Bca21cbe2e21f8BeB66',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const beamswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionBeamSwap,\n  subgraph: {\n    [Chain.Moonbeam]:\n      \"https://graph.beamswap.io/subgraphs/name/beamswap/beamswap-amm-v3-temp\",\n  },\n  factoryAddress: {\n    [Chain.Moonbeam]: \"0xD118fa707147c54387B738F54838Ea5dD4196E71\",\n  },\n  TickLensAddress: {\n    [Chain.Moonbeam]: \"0x11EA6E92058c46B9248FEF73c8C9294e1cbf9Cc6\",\n  },\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const dodoConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionDodo,\n  subgraph: {\n    [Chain.Taiko]:\n      'https://api.dodoex.io/graph-node-taiko/subgraphs/name/amm-v3-taiko?apikey=graphqlunagi5gioYzjf',\n  },\n  factoryAddress: {\n    [Chain.Taiko]: '0x78172691DD3B8ADa7aEbd9bFfB487FB11D735DB2',\n  },\n  TickLensAddress: {\n    [Chain.Taiko]: '0x245194Ed39516431FF511A74c7B6Df4cb4b5F1F3',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const dragonswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionDragonSwap,\n  subgraph: {\n    [Chain.Sei]: \"https://api.goldsky.com/api/public/project_clu1fg6ajhsho01x7ajld3f5a/subgraphs/dragonswap-v3-prod/1.0.5/gn\"\n  },\n  factoryAddress: {\n    [Chain.Sei]: \"0x179D9a5592Bc77050796F7be28058c51cA575df4\"\n  },\n  TickLensAddress: {\n    [Chain.Sei]: \"0xD71AB34e3034Bb2A54243bb62Ab5986F6965aeB8\"\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const eddyConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionEddy,\n  subgraph: {\n    [Chain.Zeta]:\n      'https://api.goldsky.com/api/public/project_cm6rp87pnuwua01v4fpp6c300/subgraphs/UNIV3/v1/gn',\n  },\n  factoryAddress: {\n    [Chain.Zeta]: '0x67AA6B2b715937Edc1Eb4D3b7B5d5dCD1fd93E8C',\n  },\n  TickLensAddress: {\n    [Chain.Zeta]: '0x4c1e7E543879473969590Bca21cbe2e21f8BeB66',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const kodiakConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionKodiak,\n  subgraph: {\n    [Chain.BeraChainBartio]:\n      'https://api.goldsky.com/api/public/project_clpx84oel0al201r78jsl0r3i/subgraphs/kodiak-v3-berachain-bartio/latest/gn',\n    [Chain.Bera]:\n      'https://api.subgraph.ormilabs.com/api/public/d7eed6cc-ad4a-4862-8017-89893c4095d3/subgraphs/kodiak-v3/latest/gn',\n  },\n  factoryAddress: {\n    [Chain.BeraChainBartio]: '0x217Cd80795EfCa5025d47023da5c03a24fA95356',\n    [Chain.Bera]: '0xD84CBf0B02636E7f53dB9E5e45A616E05d710990',\n  },\n  TickLensAddress: {\n    [Chain.BeraChainBartio]: '0x612df7be5da2bacfd6bd5d20dab99cd3d5378e32',\n    [Chain.Bera]: '0xa73C6F1FeC76D5487dC30bdB8f11d1F390394b48',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const kyoConfig = (theGraphApiKey: string ): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionKyo,\n  subgraph: {\n    [Chain.Soneium]: getTheGraphResolverUrl('97pgogYWyJ1gFx4qYnANz7DMtPw4rU2WvhFRT3eZgC5M', false, theGraphApiKey),\n    // [Chain.Hyperevm]: 'https://oi3v7a5o4f.execute-api.us-east-1.amazonaws.com/dev/query-kyo-subgraph',\n  },\n  factoryAddress: {\n    [Chain.Soneium]: '0x137841043180BBA8EF52828F9030D1b7fE065F95',\n    // [Chain.Hyperevm]: '0xD883a0B7889475d362CEA8fDf588266a3da554A1',\n  },\n  TickLensAddress: {\n    [Chain.Soneium]: '0x27a7F9FD22035e9a63468A187dbbF9E4dD97F79A',\n    // [Chain.Hyperevm]: '0xB2B02b6cBbb4ca19C43c78233161ff848760Dc86',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const ocelexConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionOcelex,\n  subgraph: {\n    [Chain.Zircuit]:\n      'https://api.goldsky.com/api/public/project_cltyhthusbmxp01s95k9l8a1u/subgraphs/ocelex-cl/1.0.0/gn',\n  },\n  factoryAddress: {\n    [Chain.Zircuit]: '0x03057ae6294292b299a1863420edD65e0197AFEf',\n  },\n  TickLensAddress: {\n    [Chain.Zircuit]: '0xB2bE7FF7e5f825B69Ce9829500398f14182dBc00',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sailorConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSailor,\n  subgraph: {\n    [Chain.Sei]: 'https://subgraph.sailor.finance/subgraphs/name/sailor'\n  },\n  factoryAddress: {\n    [Chain.Sei]: \"0x137841043180BBA8EF52828F9030D1b7fE065F95\"\n  },\n  TickLensAddress: {\n    [Chain.Sei]: \"0xD71AB34e3034Bb2A54243bb62Ab5986F6965aeB8\"\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const silverswapConfig = (\n  theGraphApiKey: string\n): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSilverSwap,\n  subgraph: {\n    [Chain.Sonic]: getTheGraphResolverUrl('CCzukThD1ovSzoGwYZg3ZQaXVqetRjec97aiLcjf48PK', false, theGraphApiKey),\n    [Chain.Nibiru]: 'https://index-api.onfinality.io/sq/PolEpie/silverswap-liquidity-nibiru'\n  },\n  factoryAddress: {\n    [Chain.Sonic]: \"0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76\",\n    [Chain.Nibiru]: '0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76'\n  },\n  TickLensAddress: {\n    [Chain.Sonic]: \"0xE96C8F64237F6b4aF428a474E2741d60e2404DAe\",\n    [Chain.Nibiru]: '0xE96C8F64237F6b4aF428a474E2741d60e2404DAe'\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const spookyswapConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSpookySwap,\n  subgraph: {\n    [Chain.Sonic]: \"https://api.0xgraph.xyz/api/public/28820bd2-ad8b-4d40-a142-ce8d7c786f66/subgraphs/spookyswap/v3/v0.0.1/gn\"\n  },\n  factoryAddress: {\n    [Chain.Sonic]: \"0x3D91B700252e0E3eE7805d12e048a988Ab69C8ad\"\n  },\n  TickLensAddress: {\n    [Chain.Sonic]: \"0x7B97E8C53F1B4fE7F0C330583B89BD3038554449\"\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const stellaswapConfig = (\n  theGraphApiKey: string\n): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionStellaSwap,\n  subgraph: {\n    [Chain.Moonbeam]:\n    getTheGraphResolverUrl('9b4EniUevfNnq4hNkkpU11jAqgAC6k1mc5DpEiETXD27', false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Moonbeam]: \"0xabE1655110112D0E45EF91e94f8d757e4ddBA59C\",\n  },\n  TickLensAddress: {\n    [Chain.Moonbeam]: \"0x0e56599F3164F3a7e5aF7a87c4350dC32CcBa1b8\",\n  },\n  NFTManagerAddress: {\n    [Chain.Moonbeam]: \"0x1FF2ADAa387dD27c22b31086E658108588eDa03a\",\n  },\n}); ","import { Chain, StrykePositionManagers } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const thickv2Config = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionThickV2,\n  strykeBeaconContract: StrykePositionManagers.StrykeEqualizerManager,\n  subgraph: {\n    [Chain.Sonic]: \"https://equalizer-backend.duckdns.org/graphql\"\n  },\n  factoryAddress: {\n    [Chain.Sonic]: \"0x7Ca1dCCFB4f49564b8f13E18a67747fd428F1C40\"\n  },\n  TickLensAddress: {\n    [Chain.Sonic]: \"0x547DB6759B0aF9e050855106993e3CEFC16E937E\"\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const wasabeeConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionWasabee,\n  subgraph: {\n    [Chain.Bera]: 'https://api.goldsky.com/api/public/project_cm78242tjtmme01uvcbkaay27/subgraphs/hpot-algebra-core/2.4.0/gn'\n  },\n  factoryAddress: {\n    [Chain.Bera]: \"0x7d53327D78EFD0b463bd8d7dc938C52402323b95\"\n  },\n  TickLensAddress: {\n    [Chain.Bera]: \"0x6fB8eCB54B9b3e3e1668d12d3287439E37BBfD38\"\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const machinexConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionMachineX,\n  subgraph: {\n    [Chain.Peaq]: getTheGraphResolverUrl('EAVSLJ9r1mc18RmDXFHUxzH1QiQ83hDx1MY8LcPQ3nBB', false, theGraphApiKey)\n  },\n  factoryAddress: {\n    [Chain.Peaq]: \"0x2646DCbE025D21A2925fdaCeB639e998E17d6060\"\n  },\n  TickLensAddress: {\n    [Chain.Peaq]: \"0x918256d1f4521cBEE9312025D6e9549F0BdC3e51\"\n  },\n  QuoterV2Address: {\n    [Chain.Peaq]: \"0xA675327f7A18bA35860617b2dBD5a6feC786CdBa\"\n  }\n}); \n\n// https://thegraph.com/explorer/subgraphs/EAVSLJ9r1mc18RmDXFHUxzH1QiQ83hDx1MY8LcPQ3nBB?view=Query&chain=arbitrum-one","import { Chain, MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const katanaIntegralConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionKatanaIntegral,\n  subgraph: {\n    [Chain.Ronin]: 'https://api.studio.thegraph.com/query/78728/katana-v-4-analytics/version/latest',\n  },\n  factoryAddress: {\n    [Chain.Ronin]: '0x7ecaf729C6FFb04448aA89A722cA370724BF70De',\n  },\n  TickLensAddress: {\n    [Chain.Ronin]: '0xd727633B8434FACab9325aD611Ad9a3F4ac9cFfD',\n  },\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const aerodromeConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionAerodrome,\n  subgraph: {\n    [Chain.Base]:\n      getTheGraphResolverUrl(\"GENunSHWLBXm59mBSgPzQ8metBEp9YDfdqwFr91Av1UM\", false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Base]: \"0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A\",\n  },\n  TickLensAddress: {\n    [Chain.Base]: \"0x49a3A5cf91DE1b78c43Dc1adD03E8A71f1Ea2e30\",\n  },\n  QuoterV2Address: {\n    [Chain.Base]: \"0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0\",\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const aerodromeV2Config = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionAerodromeV2,\n  subgraph: {\n    [Chain.Base]:\n      getTheGraphResolverUrl(\"GENunSHWLBXm59mBSgPzQ8metBEp9YDfdqwFr91Av1UM\", false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Base]: \"0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a\",\n  },\n  TickLensAddress: {\n    [Chain.Base]: \"0x3d4C22254F86f64B7eC90ab8F7aeC1FBFD271c6C\",\n  },\n  QuoterV2Address: {\n    [Chain.Base]: \"0x3d4C22254F86f64B7eC90ab8F7aeC1FBFD271c6C\",\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const cypherConfig = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionCypher,\n  algebraHookSupportedChains: [Chain.Mainnet],\n  beaconAlgebraHook: MultiPositionManagers.TestCypherAlgebraIntegralHook,\n  algebraHookBeaconsByChain: {\n    [Chain.Mainnet]: [MultiPositionManagers.TestCypherAlgebraIntegralHook],\n  },\n  subgraph: {\n    [Chain.Mainnet]: getTheGraphResolverUrl('8knsFRJjoEtsRECVSdxhfbvidipCMdBjXx1hQmMRujHx', false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Mainnet]: '0xfb8Ed3485EfA29a0e4bed93351dD51B59fC4b0f0',\n  },\n  TickLensAddress: {\n    [Chain.Mainnet]: '0x4DA465E96E586B127ac0c8d02871Aa73F226cCC4',\n  },\n  Quoter: {\n    [Chain.Mainnet]: '0xeae871C4a8dD267146558C362c86805FB7e3Fd2F',\n  },\n  EntryPointAddress: {\n    [Chain.Mainnet]: '0x79616564DB0294ecBa5912f1cE985FD1c11eeF51',\n  }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const sparkIntegralConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionSparkIntegral,\n  subgraph: {\n    [Chain.Flare]: 'https://api.goldsky.com/api/public/project_cm1tgcbwdqg8b01un9jf4a64o/subgraphs/sparkdex-v4/latest/gn',\n  },\n  factoryAddress: {\n    [Chain.Flare]: '0x805488DaA81c1b9e7C5cE3f1DCeA28F21448EC6A',\n  },\n  TickLensAddress: {\n    [Chain.Flare]: '0x04ACde7811F23B69fB1759A3F2fc98bD18D60894',\n  },\n  QuoterV2Address: {\n    [Chain.Flare]: '0x6AD6A4f233F1E33613e996CCc17409B93fF8bf5f',\n  }\n}); ","import { Chain, MultiPositionManagers, UniswapV4Beacons } from '../../../chain.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\n\nexport const uniswapV4Config = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionUniswapV4ALM,\n  additionalBeaconContracts: UniswapV4Beacons.slice(1),\n  subgraph: {\n    [Chain.Unichain]: getTheGraphResolverUrl(`EoCvJ5tyMLMJcTnLQwWpjAtPdn74PcrZgzfcT5bYxNBH`, false, theGraphApiKey),\n    [Chain.BSC]: getTheGraphResolverUrl(`EAq1nJKgjnuKH6Gj4RFjCW7LcL7E2uipbncdwV7TTWkX`, false, theGraphApiKey),\n    [Chain.Base]: getTheGraphResolverUrl(`HNCFA9TyBqpo5qpe6QreQABAA1kV8g46mhkCcicu6v2R`, false, theGraphApiKey),\n    [Chain.Arbitrum]: getTheGraphResolverUrl(`G5TsTKNi8yhPSV7kycaE23oWbqv9zzNqR49FoEQjzq1r`, false, theGraphApiKey),\n    [Chain.Mainnet]: getTheGraphResolverUrl(`DiYPVdygkfjDWhbxGSqAQxwBKmfKnkWQojqeM2rkLb3G`, false, theGraphApiKey),\n    [Chain.Robinhood]: getTheGraphResolverUrl(`DiYPVdygkfjDWhbxGSqAQxwBKmfKnkWQojqeM2rkLb3G`, false, theGraphApiKey), // Subgraph for Robinhood is not available yet\n  },\n  PoolManager: {\n    [Chain.Unichain]: '0x1f98400000000000000000000000000000000004',\n    [Chain.BSC]: '0x28e2ea090877bf75740558f6bfb36a5ffee9e9df',\n    [Chain.Base]: '0x498581ff718922c3f8e6a244956af099b2652b2b',\n    [Chain.Arbitrum]: '0x360e68faccca8ca495c1b759fd9eee466db9fb32',\n    [Chain.Mainnet]: '0x000000000004444c5dc75cB358380D2e3dE08A90',\n    [Chain.Robinhood]: '0x8366a39cc670b4001a1121b8f6a443a643e40951',\n  },\n  PositionDescriptor: {\n    [Chain.Unichain]: '0x9fb28449a191cd8c03a1b7abfb0f5996ecf7f722',\n    [Chain.BSC]: '0xf0432f360703ec3d33931a8356a75a77d8d380e1',\n    [Chain.Base]: '0x25d093633990dc94bedeed76c8f3cdaa75f3e7d5',\n    [Chain.Arbitrum]: '0xe2023f3fa515cf070e07fd9d51c1d236e07843f4',\n    [Chain.Mainnet]: '0xd1428ba554f4c8450b763a0b2040a4935c63f06c',\n    [Chain.Robinhood]: '0x9639443158e8c5efa35bd45287bf2effd3d8dc06',\n  },\n  PositionManager: {\n    [Chain.Unichain]: '0x4529A01c7A0410167c5740C487A8DE60232617bf',\n    [Chain.BSC]: '0x7a4a5c919ae2541aed11041a1aeee68f1287f95b',\n    [Chain.Base]: '0x7c5f5a4bbd8fd63184577525326123b519429bdc',\n    [Chain.Arbitrum]: '0xd88f38f930b7952f2db2432cb002e7abbf3dd869',\n    [Chain.Mainnet]: '0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e',\n    [Chain.Robinhood]: '0x58daec3116aae6d93017baaea7749052e8a04fa7',\n  },\n  Quoter: {\n    [Chain.Unichain]: '0x333e3c607b141b18ff6de9f258db6e77fe7491e0',\n    [Chain.BSC]: '0x9f75dd27d6664c475b90e105573e550ff69437b0',\n    [Chain.Base]: '0x0d5e0f971ed27fbff6c2837bf31316121532048d',\n    [Chain.Arbitrum]: '0x3972c00f7ed4885e145823eb7c655375d275a1c5',\n    [Chain.Mainnet]: '0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203',\n    [Chain.Robinhood]: '0x8dc178efb8111bb0973dd9d722ebeff267c98f94',\n  },\n  StateView: {\n    [Chain.Unichain]: '0x86e8631a016f9068c3f085faf484ee3f5fdee8f2',\n    [Chain.BSC]: '0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4',\n    [Chain.Base]: '0xa3c0c9b65bad0b08107aa264b0f3db444b867a71',\n    [Chain.Arbitrum]: '0x76fd297e2d437cd7f76d50f01afe6160f86e9990',\n    [Chain.Mainnet]: '0x7ffe42c4a5deea5b0fec41c94c136cf115597227',\n    [Chain.Robinhood]: '0xf3334192d15450cdd385c8b70e03f9a6bd9e673b',\n  },\n  ReservesLens: {\n    [Chain.Robinhood]: '0x0000001b173C3bbF3984D417d8614E3eed34865B',\n  },\n  UniversalRouter: {\n    [Chain.Unichain]: '0xef740bf23acae26f6492b10de645d6b98dc8eaf3',\n    [Chain.BSC]: '0x8b844f885672f333bc0042cb669255f93a4c1e6b',\n    [Chain.Base]: '0xfdf682f51fe81aa4898f0ae2163d8a55c127fbc7',\n    [Chain.Arbitrum]: '0x8b844f885672f333bc0042cb669255f93a4c1e6b',\n    [Chain.Mainnet]: '0x4c82d1fbfe28c977cbb58d8c7ff8fcf9f70a2cca',\n    [Chain.Robinhood]: '0x8876789976decbfcbbbe364623c63652db8c0904',\n  },\n  Permit2: {\n    [Chain.Unichain]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n    [Chain.BSC]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n    [Chain.Base]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n    [Chain.Arbitrum]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n    [Chain.Mainnet]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n    [Chain.Robinhood]: '0x000000000022D473030F116dDEE9F6B43aC78BA3',\n  }\n});\n","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\n\nexport const hydrexConfig = (): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionHydrex,\n  beaconAlgebraHook: MultiPositionManagers.AlgebraHook,\n  algebraHookSupportedChains: [Chain.Base],\n  subgraph: {\n    [Chain.Base]: \"https://analytics-subgraph.hydrex.fi/\",\n  },\n  factoryAddress: {\n    [Chain.Base]: '0x36077D39cdC65E1e3FB65810430E5b2c4D5fA29E'\n  },\n  TickLensAddress: {\n    [Chain.Base]: '0x0044e9642381607Eee1CCF06bae2378C3cB9B863'\n  },\n  QuoterV2Address: {\n    [Chain.Base]: '0x08b46265643a5389529D6f6616FA4a0d66F13Fdb',\n  }\n}); ","import { Chain } from '../../../chain.js';\nimport { MultiPositionManagers } from '../../../chain.js';\nimport { ProtocolInfo } from '../../../../types.js';\nimport { getTheGraphResolverUrl } from '../../../thegraph.js';\n\nexport const aerodromeV3Config = (theGraphApiKey: string): ProtocolInfo => ({\n  beaconContract: MultiPositionManagers.MultiPositionAerodromeV3,\n  subgraph: {\n    [Chain.Base]:\n      getTheGraphResolverUrl(\"GENunSHWLBXm59mBSgPzQ8metBEp9YDfdqwFr91Av1UM\", false, theGraphApiKey),\n  },\n  factoryAddress: {\n    [Chain.Base]: \"0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef\",\n  },\n  TickLensAddress: {\n    [Chain.Base]: \"0x3d4C22254F86f64B7eC90ab8F7aeC1FBFD271c6C\",\n  },\n  QuoterV2Address: {\n    [Chain.Base]: \"0x514c8B5f54112481E28028F1166Bd78501089259\",\n  }\n}); ","import { AMMConfigType } from '../../../types.js';\nimport {\n  arthswapConfig,\n  baseSwapConfig,\n  basexConfig,\n  crustConfig,\n  equilibreConfig,\n  fenixConfig,\n  fusionxConfig,\n  glyphConfig,\n  henjinConfig,\n  herculesConfig,\n  horizaConfig,\n  kinetixConfig,\n  kimConfig,\n  linehubConfig,\n  lynexConfig,\n  maiaConfig,\n  metaVaultConfig,\n  novaswapConfig,\n  poolsharkConfig,\n  quickSwapAlgebraConfig,\n  quickSwapIntegralConfig,\n  quickSwapUniv3Config,\n  retroConfig,\n  spark32Config,\n  sparkConfig,\n  supswapConfig,\n  swapmodeConfig,\n  swapsicleConfig,\n  thrusterConfig,\n  shadowConfig,\n} from './protocols/index.js';\nimport { blackholeConfig } from './protocols/blackhole.js';\nimport { beamConfig } from './protocols/beam.js';\nimport { beamswapConfig } from './protocols/beamswap.js';\nimport { bittensorUniV3Config } from './protocols/bittensor-univ3.js';\nimport { camelotConfig } from './protocols/camelot.js';\nimport { dodoConfig } from './protocols/dodo.js';\nimport { dragonswapConfig } from './protocols/dragonswap.js';\nimport { eddyConfig } from './protocols/eddy.js';\nimport { forgeConfig } from './protocols/forge.js';\nimport { katanaConfig } from './protocols/katana.js';\nimport { kodiakConfig } from './protocols/kodiak.js';\nimport { kyoConfig } from './protocols/kyo.js';\nimport { ocelexConfig } from './protocols/ocelex.js';\nimport { pancakeSwapConfig } from './protocols/pancakeswap.js';\nimport { quickSwapConfig } from './protocols/quickswap.js';\nimport { sailorConfig } from './protocols/sailor.js';\nimport { silverswapConfig } from './protocols/silverswap.js';\nimport { spookyswapConfig } from './protocols/spookyswap.js';\nimport { stellaswapConfig } from './protocols/stellaswap.js';\nimport { sushiConfig } from './protocols/sushi.js';\nimport { thenaConfig } from './protocols/thena.js';\nimport { thickConfig } from './protocols/thick.js';\nimport { thickv2Config } from './protocols/thickv2.js';\nimport { uniswapConfig } from './protocols/uniswap.js';\nimport { wasabeeConfig } from './protocols/wasabee.js';\nimport { machinexConfig } from './protocols/machinex.js';\nimport { katanaIntegralConfig } from './protocols/katanaIntegral.js';\n// import { blackholeConfig } from './protocols/blackhole.js';\nimport { aerodromeConfig } from './protocols/aerodrome.js';\nimport { aerodromeV2Config } from './protocols/aerodrome-v2.js';\nimport { nestVaultConfig } from './protocols/nest.js';\nimport { cypherConfig } from './protocols/cypher.js';\nimport { sparkIntegralConfig } from './protocols/spark-integral.js';\nimport { uniswapV4Config } from './protocols/uniswapv4.js';\nimport { hydrexConfig } from './protocols/hydrex.js';\nimport { aerodromeV3Config } from './protocols/aerodrome-v3.js';\n\nexport const getAmmConfig = (theGraphApiKey: string): AMMConfigType => {\n  return {\n    QuickSwap: quickSwapConfig(theGraphApiKey),\n    Uniswap: uniswapConfig(theGraphApiKey),\n    Sushi: sushiConfig(theGraphApiKey),\n    PancakeSwap: pancakeSwapConfig(theGraphApiKey),\n    QuickSwapIntegral: quickSwapIntegralConfig(theGraphApiKey),\n    Forge: forgeConfig(),\n    BaseSwap: baseSwapConfig(),\n    QuickSwapUniv3: quickSwapUniv3Config(),\n    BaseX: basexConfig(),\n    Thick: thickConfig(theGraphApiKey),\n    ThickV2: thickv2Config(),\n    Crust: crustConfig(),\n    Thruster: thrusterConfig(),\n    FusionX: fusionxConfig(),\n    Kim: kimConfig(),\n    SupSwap: supswapConfig(),\n    SwapMode: swapmodeConfig(),\n    QuickSwapAlgebra: quickSwapAlgebraConfig(),\n    PoolShark: poolsharkConfig(),\n    Swapsicle: swapsicleConfig(),\n    Equilibre: equilibreConfig(),\n    Fenix: fenixConfig(),\n    LineHub: linehubConfig(),\n    Henjin: henjinConfig(),\n    NovaSwap: novaswapConfig(),\n    Spark32: spark32Config(),\n    Spark: sparkConfig(),\n    Thena: thenaConfig(),\n    Lynex: lynexConfig(),\n    Maia: maiaConfig(),\n    Retro: retroConfig(),\n    Horiza: horizaConfig(),\n    Kodiak: kodiakConfig(),\n    Ocelex: ocelexConfig(),\n    StellaSwap: stellaswapConfig(theGraphApiKey),\n    BeamSwap: beamswapConfig(),\n    DragonSwap: dragonswapConfig(),\n    SpookySwap: spookyswapConfig(),\n    SilverSwap: silverswapConfig(theGraphApiKey),\n    Beam: beamConfig(),\n    Kyo: kyoConfig(theGraphApiKey),\n    Sailor: sailorConfig(),\n    Wasabee: wasabeeConfig(),\n    Eddy: eddyConfig(),\n    Dodo: dodoConfig(),\n    Hercules: herculesConfig(),\n    Kinetix: kinetixConfig(),\n    MetaVault: metaVaultConfig(),\n    Camelot: camelotConfig(),\n    ArthSwap: arthswapConfig(),\n    Glyph: glyphConfig(),\n    Katana: katanaConfig(),\n    Shadow: shadowConfig(theGraphApiKey),\n    MachineX: machinexConfig(theGraphApiKey),\n    KatanaIntegral: katanaIntegralConfig(),\n    Blackhole: blackholeConfig(),\n    Aerodrome: aerodromeConfig(theGraphApiKey),\n    AerodromeV2: aerodromeV2Config(theGraphApiKey),\n    Nest: nestVaultConfig(),\n    Cypher: cypherConfig(theGraphApiKey),\n    SparkIntegral: sparkIntegralConfig(),\n    UniswapV4: uniswapV4Config(theGraphApiKey),\n    Hydrex: hydrexConfig(),\n    BittensorUniV3: bittensorUniV3Config(),\n    AerodromeV3: aerodromeV3Config(theGraphApiKey),\n  };\n};\n","import { SupportedProtocol } from '../../../types.js';\nimport {\n  Chain,\n  MultiPositionManagers,\n  Protocol,\n  StrykePositionManagers,\n  UniswapHookBeacons,\n  UniswapV4Beacons,\n} from '../../chain.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\nexport const TEST_UNISWAP_JIT_HOOK_BEACON = MultiPositionManagers.TestUniswapJITHook;\nexport const UNISWAP_V4_NO_ORACLE_BEACON = MultiPositionManagers.MultiPositionUniswapV4NoOracle;\n\nexport const UNISWAP_V4_HOOK_BEACON_NAMES = UniswapHookBeacons;\nexport const UNISWAP_V4_BEACON_NAMES = UniswapV4Beacons;\n\nconst includesBeacon = (beaconNames: readonly string[], beaconName?: string): boolean => {\n  if (!beaconName) return false;\n\n  const normalizedBeaconName = beaconName.toLowerCase();\n  return beaconNames.some(\n    (knownBeaconName) => knownBeaconName.toLowerCase() === normalizedBeaconName\n  );\n};\n\nexport const isUniswapV4Beacon = (beaconName?: string): boolean =>\n  includesBeacon(UNISWAP_V4_BEACON_NAMES, beaconName);\n\nexport const isUniswapV4HookBeacon = (beaconName?: string): boolean =>\n  includesBeacon(UNISWAP_V4_HOOK_BEACON_NAMES, beaconName);\n\nexport const shouldValidateUniswapV4VaultHook = (beaconName?: string): boolean =>\n  beaconName?.toLowerCase() !== UNISWAP_V4_NO_ORACLE_BEACON.toLowerCase();\n\nconst UNISWAP_V4_BEACON_SUPPORTED_CHAINS: Readonly<Record<string, readonly Chain[]>> = {\n  [TEST_UNISWAP_JIT_HOOK_BEACON.toLowerCase()]: [Chain.BSC],\n  [UNISWAP_V4_NO_ORACLE_BEACON.toLowerCase()]: [Chain.Robinhood],\n};\n\nexport const getUniswapV4BeaconSupportedChains = (\n  beaconName?: string\n): readonly Chain[] | undefined =>\n  beaconName ? UNISWAP_V4_BEACON_SUPPORTED_CHAINS[beaconName.toLowerCase()] : undefined;\n\nexport const isUniswapV4BeaconAvailableOnChain = (beaconName: string, chain: Chain): boolean => {\n  const supportedChains = getUniswapV4BeaconSupportedChains(beaconName);\n  return !supportedChains || supportedChains.includes(chain);\n};\n\nconst BEACON_TO_SUPPORTED_PROTOCOL_MAP: Record<string, SupportedProtocol> = {\n  retro: 'Retro' as SupportedProtocol,\n  forge: 'Forge' as SupportedProtocol,\n  maia: 'Maia' as SupportedProtocol,\n  sushi: 'Sushi' as SupportedProtocol,\n  uniswapv4: 'UniswapV4' as SupportedProtocol,\n  reservev4: 'ReserveV4' as SupportedProtocol,\n  bittensoruniv3: 'BittensorUniV3' as SupportedProtocol,\n  uniswap: 'Uniswap' as SupportedProtocol,\n  pancake: 'PancakeSwap' as SupportedProtocol,\n  quickswapuniv3: 'QuickSwapUniv3' as SupportedProtocol,\n  quickswap19: 'QuickSwapAlgebra' as SupportedProtocol,\n  quickswapintegral: 'QuickSwapIntegral' as SupportedProtocol,\n  quickswap: 'QuickSwap' as SupportedProtocol,\n  kinetix: 'Kinetix' as SupportedProtocol,\n  metavault: 'MetaVault' as SupportedProtocol,\n  camelot: 'Camelot' as SupportedProtocol,\n  lynex: 'Lynex' as SupportedProtocol,\n  thena: 'Thena' as SupportedProtocol,\n  horiza: 'Horiza' as SupportedProtocol,\n  basex: 'BaseX' as SupportedProtocol,\n  arthswap: 'ArthSwap' as SupportedProtocol,\n  hercules: 'Hercules' as SupportedProtocol,\n  thick: 'Thick' as SupportedProtocol,\n  crust: 'Crust' as SupportedProtocol,\n  thruster: 'Thruster' as SupportedProtocol,\n  fusionx: 'FusionX' as SupportedProtocol,\n  supswap: 'SupSwap' as SupportedProtocol,\n  swapmode: 'SwapMode' as SupportedProtocol,\n  baseswap: 'BaseSwap' as SupportedProtocol,\n  poolshark: 'PoolShark' as SupportedProtocol,\n  kim: 'Kim' as SupportedProtocol,\n  swapsicle: 'Swapsicle' as SupportedProtocol,\n  equilibre: 'Equilibre' as SupportedProtocol,\n  fenix: 'Fenix' as SupportedProtocol,\n  linehub: 'LineHub' as SupportedProtocol,\n  henjin: 'Henjin' as SupportedProtocol,\n  novaswap: 'NovaSwap' as SupportedProtocol,\n  spark32: 'Spark32' as SupportedProtocol,\n  spark: 'Spark' as SupportedProtocol,\n  kodiak: 'Kodiak' as SupportedProtocol,\n  ocelex: 'Ocelex' as SupportedProtocol,\n  stellaswap: 'StellaSwap' as SupportedProtocol,\n  beamswap: 'BeamSwap' as SupportedProtocol,\n  dragonswap: 'DragonSwap' as SupportedProtocol,\n  spookyswap: 'SpookySwap' as SupportedProtocol,\n  silver: 'SilverSwap' as SupportedProtocol,\n  thickv2: 'ThickV2' as SupportedProtocol,\n  beam: 'Beam' as SupportedProtocol,\n  kyo: 'Kyo' as SupportedProtocol,\n  sailor: 'Sailor' as SupportedProtocol,\n  wasabee: 'Wasabee' as SupportedProtocol,\n  eddy: 'Eddy' as SupportedProtocol,\n  dodo: 'Dodo' as SupportedProtocol,\n  glyph: 'Glyph' as SupportedProtocol,\n  shadow: 'Shadow' as SupportedProtocol,\n  machinex: 'MachineX' as SupportedProtocol,\n  katanaintegral: 'KatanaIntegral' as SupportedProtocol,\n  blackhole: 'Blackhole' as SupportedProtocol,\n  multiPositionAerodrome: 'Aerodrome' as SupportedProtocol,\n  aerodromeStakedPositionManager: 'AerodromeV2' as SupportedProtocol,\n  nest: 'Nest' as SupportedProtocol,\n  cypher: 'Cypher' as SupportedProtocol,\n  hydrex: 'Hydrex' as SupportedProtocol,\n  aerodromeV3: 'AerodromeV3' as SupportedProtocol,\n};\n\n\n\nconst BEACON_TO_PROTOCOL_MAP: Record<string, Protocol> = {\n  retro: Protocol.Retro,\n  forge: Protocol.Forge,\n  maia: Protocol.Maia,\n  sushi: Protocol.Sushi,\n  bittensoruniv3: Protocol.BittensorUniV3,\n  uniswap: Protocol.Uniswap,\n  pancake: Protocol.PancakeSwap,\n  quickswapuniv3: Protocol.QuickSwapUniv3,\n  quickswap19: Protocol.QuickSwapAlgebra,\n  quickswapintegral: Protocol.QuickSwapIntegral,\n  quickswap: Protocol.QuickSwap,\n  kinetix: Protocol.Kinetix,\n  metavault: Protocol.MetaVault,\n  camelot: Protocol.Camelot,\n  lynex: Protocol.Lynex,\n  horiza: Protocol.Horiza,\n  basex: Protocol.BaseX,\n  arthswap: Protocol.ArthSwap,\n  hercules: Protocol.Hercules,\n  crust: Protocol.Crust,\n  thruster: Protocol.Thruster,\n  fusionx: Protocol.FusionX,\n  poolshark: Protocol.PoolShark,\n  kim: Protocol.Kim,\n  swapsicle: Protocol.Swapsicle,\n  equilibre: Protocol.Equilibre,\n  fenix: Protocol.Fenix,\n  linehub: Protocol.LineHub,\n  henjin: Protocol.Henjin,\n  novaswap: Protocol.NovaSwap,\n  spark32: Protocol.Spark32,\n  spark: Protocol.Spark,\n  kodiak: Protocol.Kodiak,\n  ocelex: Protocol.Ocelex,\n  stellaswap: Protocol.StellaSwap,\n  beamswap: Protocol.BeamSwap,\n  dragonswap: Protocol.DragonSwap,\n  spookyswap: Protocol.SpookySwap,\n  silver: Protocol.SilverSwap,\n  thickv2: Protocol.ThickV2,\n  thick: Protocol.Thick,\n  beam: Protocol.Beam,\n  kyo: Protocol.Kyo,\n  sailor: Protocol.Sailor,\n  wasabee: Protocol.Wasabee,\n  eddy: Protocol.Eddy,\n  dodo: Protocol.Dodo,\n  glyph: Protocol.Glyph,\n  shadow: Protocol.Shadow,\n  machinex: Protocol.MachineX,\n  katanaintegral: Protocol.KatanaIntegral,\n  blackhole: Protocol.Blackhole,\n  multiPositionAerodrome: Protocol.Aerodrome,\n  aerodromeStakedPositionManager: Protocol.AerodromeV2,\n  nest: Protocol.Nest,\n  cypher: Protocol.Cypher,\n  sparkintegral: Protocol.SparkIntegral,\n  hydrex: Protocol.Hydrex,\n  aerodromeV3: Protocol.AerodromeV3,\n  reservev4: Protocol.UniswapV4,\n};\n\n\n\n\n// Create reverse mapping from the existing BEACON_TO_SUPPORTED_PROTOCOL_MAP\nconst PROTOCOL_TO_BEACON_MAP = Object.fromEntries(\n  Object.entries(BEACON_TO_SUPPORTED_PROTOCOL_MAP).map(([beacon, protocol]) => [protocol, beacon])\n);\n\n// Custom/special-case beacon to protocol mapping\nconst CUSTOM_BEACON_TO_PROTOCOL_MAP: Record<string, SupportedProtocol> = {\n  [StrykePositionManagers.StrykeEqualizerManager]: Protocol.ThickV2,\n  [StrykePositionManagers.StrykeShadowManager]: Protocol.Shadow,\n  [MultiPositionManagers.MultiPositionUniswapV4ALM]: Protocol.UniswapV4,\n  [MultiPositionManagers.MultiPositionAerodrome]: Protocol.Aerodrome,\n  [MultiPositionManagers.MultiPositionUniswapV4HookOld]: Protocol.UniswapV4,\n  [MultiPositionManagers.MultiPositionBlackholeOld]: Protocol.Blackhole,\n  [MultiPositionManagers.MultiPositionUniswapV4Hook]: Protocol.UniswapV4,\n  [MultiPositionManagers.AlgebraHook]: Protocol.QuickSwapIntegral,\n  [MultiPositionManagers.MultiPositionAerodromeV2]: Protocol.AerodromeV2,\n  [MultiPositionManagers.MultiPositionNest]: Protocol.Nest,\n  [MultiPositionManagers.MultiPositionCypher]: Protocol.Cypher,\n  [MultiPositionManagers.MultiPositionSushiManaged]: Protocol.Sushi,\n  [MultiPositionManagers.MultiPositionSparkIntegral]: Protocol.SparkIntegral,\n  [MultiPositionManagers.MultiPositionHenjinAlgebraHook]: Protocol.Henjin,\n  [MultiPositionManagers.MultiPositionBittensorUniV3]: Protocol.BittensorUniV3,\n  [MultiPositionManagers.MultiPositionAerodromeV3]: Protocol.AerodromeV3,\n  [MultiPositionManagers.MultiPositionReserveV4]: Protocol.UniswapV4,\n  [MultiPositionManagers.TestCypherAlgebraIntegralHook]: Protocol.Cypher,\n  [MultiPositionManagers.TestQuickswapAlgebraIntegralHook]: Protocol.QuickSwapIntegral,\n  [MultiPositionManagers.TestUniswapJITHook]: Protocol.UniswapV4,\n  [MultiPositionManagers.MultiPositionUniswapV4NoOracle]: Protocol.UniswapV4,\n};\n\nconst getCustomProtocolByBeacon = (beacon: string): SupportedProtocol | undefined =>\n  CUSTOM_BEACON_TO_PROTOCOL_MAP[beacon] ||\n  Object.entries(CUSTOM_BEACON_TO_PROTOCOL_MAP).find(\n    ([customBeacon]) => customBeacon.toLowerCase() === beacon.toLowerCase()\n  )?.[1];\n\n/**`\n * Retrieves the beacon name associated with a given protocol.\n *\n * @param protocol - The supported protocol to get the beacon name for\n * @returns The beacon name string for the protocol, or empty string if not found\n * @example\n * ```typescript\n * const beaconName = getBeaconNameByProtocol('Uniswap');\n * // Returns: 'uniswap'\n * ```\n */\nexport function getBeaconNameByProtocol(protocol: SupportedProtocol): string {\n  return PROTOCOL_TO_BEACON_MAP[protocol] || '';\n}\n\n/**\n * Gets the protocol configuration for a given beacon identifier.\n *\n * @param beacon - The beacon identifier string\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The protocol configuration object or null if not found\n * @example\n * ```typescript\n * const config = getProtocolConfigByBeacon('uniswap', 'api-key');\n * ```\n */\nexport const getProtocolConfigByBeacon = (beacon: string, theGraphApiKey: string) => {\n  if (!beacon) return null;\n\n  const protocolConfig = getAmmConfig(theGraphApiKey);\n  const customProtocol = getCustomProtocolByBeacon(beacon);\n  if (customProtocol) {\n    return protocolConfig[customProtocol];\n  }\n\n  const beaconLower = beacon.toLowerCase();\n  const matchedProtocol = Object.entries(BEACON_TO_PROTOCOL_MAP).find(([key]) =>\n    beaconLower.includes(key)\n  );\n\n  if (!matchedProtocol) return null;\n\n  return protocolConfig[matchedProtocol[1]];\n};\n\n/**\n * Determines the protocol type from a given beacon identifier.\n *\n * @param beacon - The beacon identifier string\n * @returns The supported protocol type or null if not found\n * @example\n * ```typescript\n * const protocolType = getProtocolTypeByBeacon('uniswap');\n * // Returns: 'Uniswap' as SupportedProtocol\n * ```\n */\nexport function getProtocolTypeByBeacon(beacon: string): SupportedProtocol | null {\n  if (!beacon) return null;\n\n  // Check custom/special-case mappings first\n  const customProtocol = getCustomProtocolByBeacon(beacon);\n  if (customProtocol) {\n    return customProtocol;\n  }\n\n  const beaconLower = beacon.toLowerCase();\n\n  // Sort keys by length descending to prioritize more specific matches\n  const sortedEntries = Object.entries(BEACON_TO_SUPPORTED_PROTOCOL_MAP).sort(\n    ([a], [b]) => b.length - a.length\n  );\n\n  const matchedProtocol = sortedEntries.find(([key]) => beaconLower.includes(key));\n\n  return matchedProtocol ? matchedProtocol[1] : null;\n}\n","import { SupportedProtocol } from '../../../types.js';\nimport { Chain } from '../../chain.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\n/**\n * Retrieves the swap router contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the router address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The swap router contract address or undefined if not found\n */\nexport function getSwapRouterAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.swapRouterAddress?.[chain];\n}\n\n/**\n * Gets the init code hash for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the init code hash for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The init code hash or undefined if not found\n */\nexport function getQuoterV2Address(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.QuoterV2Address?.[chain];\n}\n\n\n\nexport function getInitCodeHash(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.initCodeHash?.[chain];\n}\n\n\n/**\n * Retrieves the factory contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the factory address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The factory contract address or undefined if not found\n */\nexport function getFactoryAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.factoryAddress?.[chain];\n}\n\n/**\n * Gets the tick lens contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the tick lens address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The tick lens contract address or undefined if not found\n */\nexport function getTickLensAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.TickLensAddress?.[chain];\n}\n\n/**\n * Retrieves the NFT manager contract address for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the NFT manager address for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The NFT manager contract address or undefined if not found\n */\nexport function getNFTManagerAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.NFTManagerAddress?.[chain];\n}\n\n/**\n * Gets the subgraph URL for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the subgraph URL for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The subgraph URL string\n * @throws Error if subgraph URL is not found\n */\nexport function getProtocolSubgraphURL(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string {\n  const url = getAmmConfig(theGraphApiKey)[protocol]?.subgraph?.[chain];\n  if (url) {\n    return url;\n  }\n\n  throw new Error(`Subgraph URL not found for ${protocol} on ${chain}`);\n}\n\n/**\n * Interface representing all contract addresses for a protocol\n */\nexport type ProtocolContractAddresses = {\n  swapRouterAddress: string | undefined;\n  NFTManagerAddress: string | undefined;\n  UniswapV3Factory: string | undefined;\n  TickLensAddress: string | undefined;\n  initCodeHash: string | undefined;\n  quoterV2Address: string | undefined\n}\n\n/**\n * Retrieves all relevant contract addresses for a given protocol and chain.\n * \n * @param protocol - The supported protocol to get the contract addresses for\n * @param chain - The blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns An object containing all contract addresses\n * @example\n * ```typescript\n * const addresses = getProtocolContractAddresses('Uniswap', Chain.MAINNET, 'api-key');\n * ```\n */\nexport function getProtocolContractAddresses(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): ProtocolContractAddresses {\n  const swapRouterAddress = getSwapRouterAddress(protocol, chain, theGraphApiKey);\n  const NFTManagerAddress = getNFTManagerAddress(protocol, chain, theGraphApiKey);\n  const UniswapV3Factory = getFactoryAddress(protocol, chain, theGraphApiKey);\n  const TickLensAddress = getTickLensAddress(protocol, chain, theGraphApiKey);\n  const initCodeHash = getInitCodeHash(protocol, chain, theGraphApiKey);\n  const quoterV2Address = getQuoterV2Address(protocol, chain, theGraphApiKey);\n\n  return {\n    swapRouterAddress,\n    NFTManagerAddress,\n    UniswapV3Factory,\n    TickLensAddress,\n    initCodeHash,\n    quoterV2Address\n  };\n} ","import { ProtocolInfo, SupportedProtocol } from '../../../types.js';\nimport { Chain, Protocol } from '../../chain.js';\nimport { chainIdToName } from '../../network.js';\nimport { ALGEBRA_PROTOCOLS } from '../../protocol.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\n/**\n` * Interface representing detailed protocol information including name and associated data\n */\nexport type ProtocolDetails = {\n  /** The protocol identifier */\n  name: SupportedProtocol;\n  /** Protocol-specific configuration and information */\n  data: ProtocolInfo;\n}\n\n/**\n * Retrieves detailed protocol information for a specific blockchain network.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Array of protocol details supported on the specified chain\n * @example\n * ```typescript\n * const protocols = getProtocolInfoByChainId(1, 'api-key');\n * // Returns array of protocol details for Ethereum mainnet\n * ```\n */\nexport const getProtocolInfoByChainId = (\n  chainId: number,\n  theGraphApiKey: string\n): ProtocolDetails[] => {\n  try {\n    const protocolConfig = getAmmConfig(theGraphApiKey);\n    const supportedProtocols: SupportedProtocol[] = Object.keys(\n      protocolConfig\n    ) as SupportedProtocol[];\n\n    const protocolsForChain: ProtocolDetails[] = [];\n    supportedProtocols.forEach((protocolName) => {\n      const protocolData = protocolConfig[protocolName];\n      const chainName = chainIdToName(chainId);\n\n      if (chainName && protocolData && protocolData.subgraph[chainName as Chain]) {\n        protocolsForChain.push({\n          name: protocolName,\n          data: protocolData,\n        });\n      }\n    });\n\n    return protocolsForChain;\n  } catch (error) {\n    console.error(\"Error fetching protocol info:\", error);\n    return [];\n  }\n}\n\n/**\n * Gets a list of supported protocols for a specific blockchain network.\n * \n * @param chainId - The numeric identifier of the blockchain network\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Array of protocol names supported on the specified chain\n * @example\n * ```typescript\n * const protocols = getProtocolsForChainId(1, 'api-key');\n * // Returns ['Uniswap', 'Sushi', ...] for Ethereum mainnet\n * ```\n */\nexport const getProtocolsForChainId = (\n  chainId: number,\n  theGraphApiKey: string\n): SupportedProtocol[] => {\n  try {\n    const protocolConfig = getAmmConfig(theGraphApiKey);\n    const supportedProtocols: SupportedProtocol[] = Object.keys(\n      protocolConfig\n    ) as SupportedProtocol[];\n\n    const protocolsForChain: ProtocolDetails[] = [];\n    supportedProtocols.forEach((protocolName) => {\n      const protocolData = protocolConfig[protocolName];\n      const chainName = chainIdToName(chainId);\n\n      if (chainName && protocolData && protocolData.subgraph[chainName as Chain]) {\n        protocolsForChain.push({\n          name: protocolName,\n          data: protocolData,\n        });\n      }\n    });\n\n    return protocolsForChain.map(({ name }) => name);\n  } catch (error) {\n    console.error(\"Error fetching protocol info:\", error);\n    return [];\n  }\n}\n\n/**\n * Retrieves protocol information for a specific protocol by its name.\n * \n * @param protocolName - The name of the protocol to get information for\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns Protocol configuration and information\n * @example\n * ```typescript\n * const info = getProtocolInfoByName('Uniswap', 'api-key');\n * ```\n */\nexport const getProtocolInfoByName = (\n  protocolName: Protocol,\n  theGraphApiKey: string\n): ProtocolInfo | undefined => {\n  return getAmmConfig(theGraphApiKey)[protocolName];\n}\n\n/**\n * Finds a protocol by its subgraph URL.\n * \n * @param subgraphUrl - The subgraph URL to search for\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns The protocol name if found, undefined otherwise\n * @example\n * ```typescript\n * const protocol = getProtocolBySubgraph('https://api.thegraph.com/...', 'api-key');\n * ```\n */\nexport const getProtocolBySubgraph = (\n  subgraphUrl: string,\n  theGraphApiKey: string\n): SupportedProtocol | undefined => {\n  try {\n    const protocolConfig = getAmmConfig(theGraphApiKey);\n    const supportedProtocols: SupportedProtocol[] = Object.keys(\n      protocolConfig\n    ) as SupportedProtocol[];\n\n    const protocol = supportedProtocols.find((protocolName) => {\n      const protocolData = protocolConfig[protocolName];\n      if (!protocolData) return false;\n      const subgraphs = Object.values(protocolData.subgraph);\n      return subgraphs.includes(subgraphUrl);\n    });\n\n    return protocol;\n  } catch (error) {\n    console.error(\"Error fetching protocol info:\", error);\n    return undefined;\n  }\n}\n\n/**\n * Checks if a protocol is an Algebra protocol based on its subgraph URL.\n * \n * @param subgraphUrl - The subgraph URL to check\n * @param theGraphApiKey - The Graph API key for accessing protocol data\n * @returns True if the protocol is an Algebra protocol, false otherwise\n * @example\n * ```typescript\n * const isAlgebra = isAlgebraProtocolBySubgraph('https://api.thegraph.com/...', 'api-key');\n * ```\n */\nexport function isAlgebraProtocolBySubgraph(subgraphUrl: string, theGraphApiKey: string): boolean {\n  const protocolConfig = getAmmConfig(theGraphApiKey);\n  const algebraSubgraphUrls = ALGEBRA_PROTOCOLS.flatMap((protocol: SupportedProtocol) =>\n    Object.values(protocolConfig[protocol]?.subgraph || {})\n  );\n  return algebraSubgraphUrls.includes(subgraphUrl);\n} \n","import { AMMConfigType, ProtocolInfo, SupportedProtocol } from '../../../types.js';\nimport { Chain } from '../../chain.js';\nimport { chainIdToName } from '../../network.js';\nimport { getAmmConfig } from '../configs/ammConfig.js';\n\nexport const getAmmConfigByChainId = (chainId: number, theGraphApiKey: string): AMMConfigType => {\n  const chainName = chainIdToName(chainId);\n  const config = getAmmConfig(theGraphApiKey);\n\n  if (!chainName) {\n    throw new Error(`Chain ${chainId} not supported`);\n  }\n\n  const chainEnum = Chain[chainName as keyof typeof Chain];\n\n  // Filter protocols that support the specified chain\n  const filteredConfig: Partial<AMMConfigType> = {};\n\n  for (const protocol in config) {\n    const protocolConfig = config[protocol as SupportedProtocol];\n    if (!protocolConfig) continue;\n\n    // Check if this protocol supports the specified chain in any of its configurations\n    const hasChainSupport = Object.values(protocolConfig).some((configSection) => {\n      if (typeof configSection === 'object' && configSection !== null) {\n        return chainEnum in configSection;\n      }\n      return false;\n    });\n\n    // If the protocol supports this chain, include it in the filtered config but only with the specified chain\n    if (hasChainSupport) {\n      // Create a new protocol config with only the specified chain\n      const filteredProtocolConfig: ProtocolInfo = {\n        subgraph: {},\n        factoryAddress: {},\n      };\n\n      // For each section in the protocol config (subgraph, factoryAddress, etc.)\n      for (const sectionKey in protocolConfig) {\n        const section = protocolConfig[sectionKey as keyof typeof protocolConfig];\n\n        // If this section is an object with chain mappings (arrays are passed through as-is below)\n        if (typeof section === 'object' && section !== null && !Array.isArray(section)) {\n          // Create a new section with only the specified chain\n          const filteredSection: Record<Chain, string> = {} as Record<Chain, string>;\n\n          // If this chain exists in this section, include only that chain\n          if (chainEnum in section) {\n            filteredSection[chainEnum] = section[chainEnum as keyof typeof section] as string;\n\n            // Add this filtered section to the filtered protocol config\n            (filteredProtocolConfig[sectionKey as keyof ProtocolInfo] as Record<Chain, string>) =\n              filteredSection;\n          }\n        } else if (section !== undefined) {\n          // For non-object sections (like beaconContract), include as is\n          (filteredProtocolConfig as Record<keyof ProtocolInfo, unknown>)[sectionKey as keyof ProtocolInfo] = section;\n        }\n      }\n\n      filteredConfig[protocol as SupportedProtocol] = filteredProtocolConfig;\n    }\n  }\n\n  return filteredConfig as AMMConfigType;\n};\n\n\nexport function getFactoryAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.factoryAddress?.[chain];\n}\n\nexport function getTickLensAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.TickLensAddress?.[chain];\n}\n\nexport function getNFTManagerAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.NFTManagerAddress?.[chain];\n}\n\nexport function getProtocolSubgraphURL(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string {\n  const url = getAmmConfig(theGraphApiKey)[protocol]?.subgraph?.[chain];\n  if (url) {\n    return url;\n  }\n\n  throw new Error(`Subgraph URL not found for ${protocol} on ${chain}`);\n}\n\nexport function getSwapRouterAddress(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.swapRouterAddress?.[chain];\n}\n\nexport function getInitCodeHash(\n  protocol: SupportedProtocol,\n  chain: Chain,\n  theGraphApiKey: string\n): string | undefined {\n  return getAmmConfig(theGraphApiKey)[protocol]?.initCodeHash?.[chain];\n}\n\n\nexport * from './beacon.js';\nexport * from './contracts.js';\nexport * from './protocol.js';\n\n","import { Chain, ChainId } from './chain.js';\nimport { getSubgraphUrlByChainId, steerSubgraphConfig } from './subgraph.js';\nimport { isSingleAssetDepositSupported, networks, type NetworkConfig } from './network.js';\nimport { getProtocolInfoByChainId, type ProtocolDetails } from './amm/utils/protocol.js';\n\nexport type SupportedChainsFeature =\n  | 'subgraph'\n  | 'deployments'\n  | 'protocols'\n  | 'singleAssetDeposit';\n\nexport type SupportedChainsInclude = {\n  subgraph?: boolean;\n  deployments?: boolean;\n  protocols?: boolean;\n  singleAssetDeposit?: boolean;\n};\n\nexport type GetSupportedChainsOptions = {\n  theGraphApiKey?: string;\n  include?: SupportedChainsInclude;\n  filter?: {\n    feature?: SupportedChainsFeature;\n  };\n};\n\nexport type SupportedChainFeatures = {\n  subgraph: boolean;\n  deployments: boolean;\n  protocols: boolean;\n  singleAssetDeposit: boolean;\n};\n\nexport type SupportedChain = {\n  schemaVersion: 1;\n  chain: Chain;\n  chainId: number;\n  features: SupportedChainFeatures;\n  subgraphUrl?: string;\n  deployments?: NetworkConfig;\n  protocols?: ProtocolDetails[];\n};\n\nfunction getChainId(chain: Chain): number {\n  return ChainId[chain];\n}\n\nfunction defaultInclude(include?: SupportedChainsInclude): Required<SupportedChainsInclude> {\n  return {\n    subgraph: include?.subgraph ?? true,\n    deployments: include?.deployments ?? false,\n    protocols: include?.protocols ?? false,\n    singleAssetDeposit: include?.singleAssetDeposit ?? false,\n  };\n}\n\nexport function getSupportedChains(options: GetSupportedChainsOptions = {}): SupportedChain[] {\n  const include = defaultInclude(options.include);\n\n  const chains: SupportedChain[] = Object.values(Chain)\n    .filter((chain) => Boolean(steerSubgraphConfig[chain]))\n    .map((chain) => {\n      const chainId = getChainId(chain);\n\n      const subgraphUrl = include.subgraph ? getSubgraphUrlByChainId(chainId) : undefined;\n      const deployments = include.deployments ? networks[chain] : undefined;\n\n      const protocols = include.protocols\n        ? getProtocolInfoByChainId(chainId, options.theGraphApiKey ?? '')\n        : undefined;\n\n      const singleAssetDeposit = include.singleAssetDeposit\n        ? isSingleAssetDepositSupported(chainId)\n        : false;\n\n      const features: SupportedChainFeatures = {\n        subgraph: Boolean(subgraphUrl),\n        deployments: Boolean(deployments),\n        protocols: Boolean(protocols && protocols.length > 0),\n        singleAssetDeposit,\n      };\n\n      const supportedChain: SupportedChain = {\n        schemaVersion: 1 as const,\n        chain,\n        chainId,\n        features,\n      };\n\n      if (include.subgraph) supportedChain.subgraphUrl = subgraphUrl;\n      if (include.deployments) supportedChain.deployments = deployments;\n      if (include.protocols) supportedChain.protocols = protocols;\n\n      return supportedChain;\n    });\n\n  const featureFilter = options.filter?.feature;\n  if (!featureFilter) return chains;\n\n  return chains.filter((c) => c.features[featureFilter]);\n}\n\nexport function getSupportedChainIds(options: GetSupportedChainsOptions = {}): number[] {\n  return getSupportedChains(options).map((c) => c.chainId);\n}\n\nexport function getSupportedChainByChainId(\n  chainId: number,\n  options: Omit<GetSupportedChainsOptions, 'filter'> = {}\n): SupportedChain | undefined {\n  const chainName = Object.values(Chain).find((chain) => getChainId(chain) === chainId);\n  if (!chainName) return undefined;\n\n  return getSupportedChains({ ...options }).find((c) => c.chainId === chainId);\n}\n","import type { Address, PublicClient } from 'viem';\nimport { getContract } from 'viem';\nimport { Protocol } from \"./chain.js\";\nimport { getProtocolTypeByBeacon } from \"./amm/utils/beacon.js\";\nimport { isAerodromeVault, isAlgebraProtocol, isAlgebraIntegralProtocol, isThickV2Protocol, isShadowProtocol } from \"./protocol.js\";\nimport { \n  UniswapV3QuoterABI, \n  QuickSwapQuoterV2, \n  QuoterV2Thick, \n  QuoterV2AlgebgraIntegral, \n  QuoterV2AlgebgraIntegral21, \n  QuoterV2Shadow \n} from \"./abis/quoter.js\";\nimport { NetworkConfig } from './network.js';\nimport { getProtocolContractAddresses } from './amm/index.js';\n\n/**\n * Base interface for quote parameters\n */\nexport interface BaseQuoteParams {\n  tokenIn: Address;\n  tokenOut: Address;\n  amountIn: bigint;\n}\n\n/**\n * Quote parameters for Uniswap V3 style quoters (fee-based)\n */\nexport interface UniswapQuoteParams extends BaseQuoteParams {\n  fee: number; // uint24\n  sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Algebra style quoters (limit price)\n */\nexport interface AlgebraQuoteParams extends BaseQuoteParams {\n  limitSqrtPrice?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Thick V2 quoters (tick spacing)\n */\nexport interface ThickQuoteParams extends BaseQuoteParams {\n  tickSpacing: number; // int24\n  sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Algebra Integral v2.1 quoters (with deployer)\n */\nexport interface AlgebraIntegral21QuoteParams extends BaseQuoteParams {\n  deployer: Address;\n  limitSqrtPrice?: bigint; // uint160\n}\n\n/**\n * Quote parameters for Shadow quoters (tick spacing)\n */\nexport interface ShadowQuoteParams extends BaseQuoteParams {\n  tickSpacing: number; // int24\n  sqrtPriceLimitX96?: bigint; // uint160\n}\n\n/**\n * Union type for all possible quote parameters\n */\nexport type QuoteParams = \n  | UniswapQuoteParams \n  | AlgebraQuoteParams \n  | ThickQuoteParams \n  | AlgebraIntegral21QuoteParams \n  | ShadowQuoteParams;\n\n/**\n * Union type for all possible QuoterV2 ABIs\n */\nexport type QuoterV2ABI = \n  | typeof UniswapV3QuoterABI\n  | typeof QuickSwapQuoterV2\n  | typeof QuoterV2Thick\n  | typeof QuoterV2AlgebgraIntegral\n  | typeof QuoterV2AlgebgraIntegral21\n  | typeof QuoterV2Shadow;\n\n/**\n * Union type for all possible quoter function arguments\n */\nexport type QuoterFunctionArgs = \n  | {\n      tokenIn: Address;\n      tokenOut: Address;\n      amountIn: bigint;\n      fee: number;\n      sqrtPriceLimitX96: bigint;\n    }\n  | {\n      tokenIn: Address;\n      tokenOut: Address;\n      amountIn: bigint;\n      limitSqrtPrice: bigint;\n    }\n  | {\n      tokenIn: Address;\n      tokenOut: Address;\n      amountIn: bigint;\n      tickSpacing: number;\n      sqrtPriceLimitX96: bigint;\n    }\n  | {\n      tokenIn: Address;\n      tokenOut: Address;\n      deployer: Address;\n      amountIn: bigint;\n      limitSqrtPrice: bigint;\n    };\n/**\n * Factory class for creating QuoterV2 contract instances with the appropriate ABI\n * based on the protocol type detected from beacon names.\n * \n * @example\n * ```typescript\n * import { createPublicClient, http, parseEther } from 'viem';\n * import { polygon } from 'viem/chains';\n * import { QuoterV2Factory } from './quoter.js';\n * \n * // Create a viem client\n * const client = createPublicClient({\n *   chain: polygon,\n *   transport: http()\n * });\n * \n * // Configure network with quoter addresses\n * const networkConfig = {\n *   quoterV2: {\n *     'QuickSwap': '0x...',\n *     'Uniswap': '0x...',\n *     'ThickV2': '0x...',\n *     'Shadow': '0x...',\n *     'KatanaIntegral': '0x...'\n *   }\n * };\n * \n * const factory = new QuoterV2Factory(networkConfig);\n * \n * // Example 1: Uniswap V3 style (fee-based)\n * const { quoter: uniQuoter, params: uniParams } = factory.createQuoterWithParams('uniswap', client, {\n *   tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n *   tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n *   amountIn: parseEther('1'),\n *   fee: 3000,\n *   sqrtPriceLimitX96: 0n\n * });\n * \n * // Example 2: QuickSwap (Algebra style)\n * const { quoter: quickQuoter, params: quickParams } = factory.createQuoterWithParams('quickswap', client, {\n *   tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n *   tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n *   amountIn: parseEther('1'),\n *   limitSqrtPrice: 0n\n * });\n * \n * // Example 3: Thick V2 (tick spacing)\n * const { quoter: thickQuoter, params: thickParams } = factory.createQuoterWithParams('thickv2', client, {\n *   tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n *   tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n *   amountIn: parseEther('1'),\n *   tickSpacing: 60,\n *   sqrtPriceLimitX96: 0n\n * });\n * \n * // Example 4: Katana Integral (with deployer)\n * const { quoter: katanaQuoter, params: katanaParams } = factory.createQuoterWithParams('katanaintegral', client, {\n *   tokenIn: '0xA0b86a33E6f73c7C6789b65f71C1ab8EbAbD3A01',\n *   tokenOut: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n *   amountIn: parseEther('1'),\n *   deployer: '0x...',\n *   limitSqrtPrice: 0n\n * });\n * \n * // Use the quoter contracts\n * const uniResult = await uniQuoter.read.quoteExactInputSingle([uniParams]);\n * const quickResult = await quickQuoter.read.quoteExactInputSingle([quickParams]);\n * const thickResult = await thickQuoter.read.quoteExactInputSingle([thickParams]);\n * const katanaResult = await katanaQuoter.read.quoteExactInputSingle([katanaParams]);\n * ```\n */\nexport class QuoterV2Factory {\n  private networkConfig: NetworkConfig;\n\n  constructor(networkConfig: NetworkConfig) {\n    this.networkConfig = networkConfig;\n  }\n\n  /**\n   * Creates quote parameters for the quoteExactInputSingle function based on the protocol type.\n   * \n   * @param beaconName - The beacon identifier to determine the protocol type\n   * @param params - The input parameters for the quote\n   * @returns Formatted parameters object for the specific protocol's quoteExactInputSingle function\n   * @throws Error if protocol type is not supported\n   * \n   * @example\n   * ```typescript\n   * const factory = new QuoterV2Factory(networkConfig);\n   * \n   * // For Uniswap V3\n   * const uniParams = factory.getQuoteParams('uniswap', {\n   *   tokenIn: '0x...',\n   *   tokenOut: '0x...',\n   *   amountIn: parseEther('1'),\n   *   fee: 3000,\n   *   sqrtPriceLimitX96: 0n\n   * });\n   * \n   * // For QuickSwap (Algebra)\n   * const quickParams = factory.getQuoteParams('quickswap', {\n   *   tokenIn: '0x...',\n   *   tokenOut: '0x...',\n   *   amountIn: parseEther('1'),\n   *   limitSqrtPrice: 0n\n   * });\n   * ```\n   */\n  getQuoteParams(protocol: Protocol, params: QuoteParams) {\n    // Validate parameters first\n    validateQuoteParams(protocol, params);\n    \n    if (!protocol) {\n      throw Error('Protocol not found');\n    }\n    // Check for Algebra Integral v2.1 vaults (newer version with deployer)\n    if (this.isAlgebraIntegral21Vault(protocol)) {\n      const p = params as AlgebraIntegral21QuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        deployer: p.deployer,\n        amountIn: p.amountIn,\n        limitSqrtPrice: p.limitSqrtPrice || 0n\n      };\n    }\n\n    // Check for Shadow protocol vaults\n    if (isShadowProtocol(protocol)) {\n      const p = params as ShadowQuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        amountIn: p.amountIn,\n        tickSpacing: p.tickSpacing,\n        sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n      };\n    }\n\n    // Check for Algebra Integral vaults (older version)\n    if (isAlgebraIntegralProtocol(protocol)) {\n      const p = params as AlgebraQuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        amountIn: p.amountIn,\n        limitSqrtPrice: p.limitSqrtPrice || 0n\n      };\n    }\n\n    // Check for Algebra-based protocols (QuickSwap, etc.)\n    if (protocol && isAlgebraProtocol(protocol)) {\n      const p = params as AlgebraQuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        amountIn: p.amountIn,\n        limitSqrtPrice: p.limitSqrtPrice || 0n\n      };\n    }\n\n    // Aerodrome Slipstream quoters identify pools by tick spacing, not fee.\n    if (isAerodromeVault(protocol)) {\n      const p = params as ThickQuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        amountIn: p.amountIn,\n        tickSpacing: p.tickSpacing,\n        sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n      };\n    }\n\n    // Check for Thick V2 protocols\n    if (isThickV2Protocol(protocol)) {\n      const p = params as ThickQuoteParams;\n      return {\n        tokenIn: p.tokenIn,\n        tokenOut: p.tokenOut,\n        amountIn: p.amountIn,\n        tickSpacing: p.tickSpacing,\n        sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n      };\n    }\n\n    // Default to Uniswap V3 style (fee-based)\n    const p = params as UniswapQuoteParams;\n    return {\n      tokenIn: p.tokenIn,\n      tokenOut: p.tokenOut,\n      amountIn: p.amountIn,\n      fee: p.fee,\n      sqrtPriceLimitX96: p.sqrtPriceLimitX96 || 0n\n    };\n  }\n\n  /**\n   * Creates a QuoterV2 contract instance with the appropriate ABI for the given beacon.\n   * \n   * @param beaconName - The beacon identifier to determine the protocol type\n   * @param client - The viem client for contract interactions\n   * @returns A viem contract instance with the appropriate ABI\n   * @throws Error if quoter address is not found for the protocol\n   */\n  createQuoterV2(protocol: Protocol, client: PublicClient) {\n    const quoterV2Address = this.getQuoterV2Address(protocol);\n\n    if (!quoterV2Address) {\n      throw new Error(`QuoterV2 address not found for protocol: ${protocol}`);\n    }\n\n    const abi = this.getQuoterAbi(protocol);\n    \n    return getContract({\n      address: quoterV2Address as Address,\n      abi,\n      client\n    });\n  }\n\n  /**\n   * Convenience function that creates both the quoter contract and properly formatted quote parameters.\n   * \n   * @param beaconName - The beacon identifier to determine the protocol type\n   * @param client - The viem client for contract interactions\n   * @param params - The input parameters for the quote\n   * @returns Object containing the quoter contract and formatted parameters\n   * @throws Error if quoter address is not found for the protocol\n   * \n   * @example\n   * ```typescript\n   * const factory = new QuoterV2Factory(networkConfig);\n   * \n   * const { quoter, params } = factory.createQuoterWithParams('quickswap', client, {\n   *   tokenIn: '0x...',\n   *   tokenOut: '0x...',\n   *   amountIn: parseEther('1'),\n   *   limitSqrtPrice: 0n\n   * });\n   * \n   * // Use directly\n   * const result = await quoter.read.quoteExactInputSingle([params]);\n   * ```\n   */\n  createQuoterWithParams(protocol: Protocol, client: PublicClient, params: QuoteParams) {\n    const quoter = this.createQuoterV2(protocol, client);\n    const formattedParams = this.getQuoteParams(protocol, params);\n    \n    return {\n      quoter,\n      params: formattedParams\n    };\n  }\n\n  /**\n   * Gets the appropriate QuoterV2 ABI based on the beacon name and protocol.\n   * \n   * @param protocol - The detected protocol type\n   * @returns The appropriate ABI array\n   */\n  public getQuoterAbi(protocol: Protocol | null): QuoterV2ABI {\n\n    if (!protocol) {\n      throw Error('Protocol not avaiable')\n    }\n    // Check for Algebra Integral v2.1 vaults (newer version)\n    if (this.isAlgebraIntegral21Vault(protocol)) {\n      return QuoterV2AlgebgraIntegral21;\n    }\n\n    // Check for Shadow protocol vaults\n    if (isShadowProtocol(protocol)) {\n      return QuoterV2Shadow;\n    }\n\n    // Check for Algebra Integral vaults (older version)\n    if (isAlgebraIntegralProtocol(protocol)) {\n      return QuoterV2AlgebgraIntegral;\n    }\n\n    // Check for Lynex protocol (special case)\n    if (protocol === Protocol.Lynex) {\n      // Note: Lynex currently uses the same ABI as QuickSwap in this implementation\n      // If Lynex has a different ABI, add it to the ABIs in quoter.ts as QuoterV2Lynex\n      // and import it at the top of this file\n      return QuickSwapQuoterV2;\n    }\n\n    // Check for Algebra-based protocols\n    if (protocol && isAlgebraProtocol(protocol)) {\n      return QuickSwapQuoterV2;\n    }\n\n    // Aerodrome Slipstream uses the same tick-spacing quoter shape as Thick V2.\n    if (isAerodromeVault(protocol)) {\n      return QuoterV2Thick;\n    }\n\n    // Check for Thick V2 protocols\n    if (isThickV2Protocol(protocol)) {\n      return QuoterV2Thick;\n    }\n\n    // Default to standard Uniswap V3 QuoterV2 ABI\n    return UniswapV3QuoterABI;\n  }\n\n  /**\n   * Gets the QuoterV2 address for the given protocol from the network configuration.\n   * \n   * @param protocol - The protocol type\n   * @returns The quoter address or undefined if not found\n   */\n  public getQuoterV2Address(protocol: Protocol | null): string | undefined {\n\n    if (!protocol) {\n      return undefined;\n    }\n    const contractAddresses = getProtocolContractAddresses(protocol, this.networkConfig.name, 'QuoterV2')\n\n    if (!protocol || !contractAddresses) {\n      return undefined;\n    }\n    return contractAddresses.quoterV2Address;\n  }\n\n  /**\n   * Checks if the beacon represents an Algebra Integral v2.1 vault.\n   * \n   * @param beaconName - The beacon identifier\n   * @returns True if it's an Algebra Integral v2.1 vault\n   */\n  private isAlgebraIntegral21Vault(protocol: Protocol): boolean {\n    return protocol === Protocol.KatanaIntegral;\n  }\n\n \n}\n\n/**\n * Helper function to get QuoterV2 address for a protocol from network config.\n * \n * @param protocol - The protocol to get the quoter address for\n * @param networkConfig - The network configuration object\n * @returns The quoter address or undefined if not found\n * \n * @example\n * ```typescript\n * const quoterAddress = getQuoterV2Address(Protocol.QuickSwap, networkConfig);\n * if (quoterAddress) {\n *   // Use the quoter address\n * }\n * ```\n */\n\n/**\n * Type guard to check if parameters are for Uniswap V3 style quoter\n */\nexport function isUniswapQuoteParams(params: QuoteParams): params is UniswapQuoteParams {\n  return 'fee' in params;\n}\n\n/**\n * Type guard to check if parameters are for Algebra style quoter\n */\nexport function isAlgebraQuoteParams(params: QuoteParams): params is AlgebraQuoteParams {\n  return 'limitSqrtPrice' in params ;\n}\n\n/**\n * Type guard to check if parameters are for Thick V2 style quoter\n */\nexport function isThickQuoteParams(params: QuoteParams): params is ThickQuoteParams {\n  return 'tickSpacing' in params && 'sqrtPriceLimitX96' in params;\n}\n\n/**\n * Type guard to check if parameters are for Algebra Integral v2.1 style quoter\n */\nexport function isAlgebraIntegral21QuoteParams(params: QuoteParams): params is AlgebraIntegral21QuoteParams {\n  return 'deployer' in params;\n}\n\n/**\n * Type guard to check if parameters are for Shadow style quoter\n */\nexport function isShadowQuoteParams(params: QuoteParams): params is ShadowQuoteParams {\n  return 'tickSpacing' in params && 'sqrtPriceLimitX96' in params;\n}\n\n/**\n * Validates quote parameters based on the protocol type detected from beacon name\n * \n * @param beaconName - The beacon identifier to determine the protocol type\n * @param params - The parameters to validate\n * @throws Error if parameters don't match the expected protocol type\n */\nexport function validateQuoteParams(protocol: Protocol, params: QuoteParams): void {\n  if (!protocol) {\n    throw Error('Protocol not found');\n  }\n  \n  // Validate required fields\n  if (!params.tokenIn || !params.tokenOut || !params.amountIn) {\n    throw new Error('Missing required parameters: tokenIn, tokenOut, and amountIn are required');\n  }\n\n  // Check for Algebra Integral v2.1 vaults (newer version with deployer)\n  if (protocol === Protocol.KatanaIntegral) {\n    if (!isAlgebraIntegral21QuoteParams(params)) {\n      throw new Error('AlgebraIntegral21QuoteParams required: must include deployer field');\n    }\n    return;\n  }\n\n  // Check for Shadow protocol vaults\n  if (protocol && isShadowProtocol(protocol)) {\n    if (!isShadowQuoteParams(params) && !isThickQuoteParams(params)) {\n      throw new Error('ShadowQuoteParams required: must include tickSpacing field');\n    }\n    return;\n  }\n\n  // Check for Thick V2 protocols\n  if (protocol && isThickV2Protocol(protocol)) {\n    if (!isThickQuoteParams(params)) {\n      throw new Error('ThickQuoteParams required: must include tickSpacing field');\n    }\n    return;\n  }\n\n  // Check for Algebra-based protocols\n  if (protocol && isAlgebraProtocol(protocol)) {\n    if (!isAlgebraQuoteParams(params)) {\n      throw new Error('AlgebraQuoteParams required: limitSqrtPrice field expected');\n    }\n    return;\n  }\n\n  // Check for Aerodrome Slipstream protocols\n  if (protocol && isAerodromeVault(protocol)) {\n    if (!isThickQuoteParams(params)) {\n      throw new Error('Aerodrome quote params required: must include tickSpacing field');\n    }\n    return;\n  }\n\n  // Default to Uniswap V3 style validation\n  if (!isUniswapQuoteParams(params)) {\n    throw new Error('UniswapQuoteParams required: must include fee field');\n  }\n}\n\n/**\n * Gets the expected parameter type for a given beacon name\n * \n * @param beaconName - The beacon identifier\n * @returns String describing the expected parameter type\n */\nexport function getExpectedParamType(beaconName: string): string {\n  const protocol = getProtocolTypeByBeacon(beaconName);\n  \n  if (beaconName.toLowerCase().includes('katanaintegral') || protocol === Protocol.KatanaIntegral) {\n    return 'AlgebraIntegral21QuoteParams (requires: tokenIn, tokenOut, amountIn, deployer, limitSqrtPrice?)';\n  }\n  \n  if (protocol && isShadowProtocol(protocol)) {\n    return 'ShadowQuoteParams (requires: tokenIn, tokenOut, amountIn, tickSpacing, sqrtPriceLimitX96?)';\n  }\n  \n  if (protocol && isThickV2Protocol(protocol)) {\n    return 'ThickQuoteParams (requires: tokenIn, tokenOut, amountIn, tickSpacing, sqrtPriceLimitX96?)';\n  }\n  \n  if (protocol && isAlgebraProtocol(protocol)) {\n    return 'AlgebraQuoteParams (requires: tokenIn, tokenOut, amountIn, limitSqrtPrice?)';\n  }\n\n  if (protocol && isAerodromeVault(protocol)) {\n    return 'Aerodrome quote params (requires: tokenIn, tokenOut, amountIn, tickSpacing, sqrtPriceLimitX96?)';\n  }\n  \n  return 'UniswapQuoteParams (requires: tokenIn, tokenOut, amountIn, fee, sqrtPriceLimitX96?)';\n} \n","import { Chain } from '../chain.js';\n\nexport interface StabilityVaultInfo {\n  beaconContract: string;\n  peripheryAddress: Partial<{ [chain in Chain]: string }>;\n  subgraphUrl: Partial<{ [chain in Chain]: string }>;\n  beaconContractSaga?: string;\n}\n\n\nexport const stabilityVaultsConfig: StabilityVaultInfo = {\n  beaconContract: 'TestStabilityVault',\n  beaconContractSaga: 'StabilityTest',\n  peripheryAddress: {\n    [Chain.Arbitrum]: '0xAc9d57AdaDC3593A8BB66729C7d2436dA8A13E7d',\n    [Chain.Saga]: '0x2292d6ad79e932ae80ee6e03607341301705742d',\n  },\n  subgraphUrl: {\n    [Chain.Arbitrum]: 'https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-arbitrum/preprod/gn',\n    [Chain.Saga]: 'https://api.goldsky.com/api/public/project_clohj3ta78ok12nzs5m8yag0b/subgraphs/steer-protocol-saga-evm-stability/prod/gn',\n  },\n};\n\n/**\n * Get the periphery address for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The periphery address for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsPeripheryAddress(chain: Chain): string | undefined {\n  return stabilityVaultsConfig.peripheryAddress[chain];\n}\n\n/**\n * Get the subgraph URL for a specific chain\n * @param chainId - The chain ID to lookup\n * @returns The subgraph URL for the chain, or undefined if not configured\n */\nexport function getStabilityVaultsSubgraphUrl(chain: Chain): string | undefined {\n  return stabilityVaultsConfig.subgraphUrl[chain];\n}\n\n","import { Address } from 'viem';\nimport { VaultEdge, VaultNode, VaultsConnection } from '../base/VaultClient.js';\nimport { getProtocolTypeByBeacon } from '../const/index.js';\nimport { Protocol } from '../const/chain.js';\nimport {\n  LpPriceResponse,\n  SubgraphResponse,\n  SubgraphVaultDetails,\n  SubgraphVaultDetailsWithLpData,\n  SubgraphVaultPosition,\n  VaultFetchOptions,\n} from './subgraph-types.js';\n\n/**\n * GraphQL queries for fetching vault data from Steer subgraphs\n */\nconst FIND_ALL_VAULTS = (batchSize: number = 1000, timestamp?: string) => {\n  if (timestamp) {\n    return `query {\n      vaults(first: ${batchSize}, where: { createdAt_lte: \"${timestamp}\" }, orderBy: createdAt, orderDirection: desc) {\n        id\n        name\n        token0\n        token1\n        pool\n        weeklyFeeAPR\n        token0Symbol\n        token0Decimals\n        token1Symbol\n        token1Decimals\n        totalValueLockedToken0\n        totalValueLockedToken1\n        token0Balance\n        token1Balance\n        totalLPTokensIssued\n        createdAt\n        feeTier\n        strategyToken {\n          id\n          name\n          creator {\n            id\n          }\n          admin\n          executionBundle\n        }\n        positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n          id\n          upperTick\n          lowerTick\n          relativeWeight\n        }\n        fees0\n        fees1\n        beaconName\n        payloadIpfs\n        deployer\n      }\n    }`;\n  }\n\n  return `query {\n    vaults(first: ${batchSize}, orderBy: createdAt, orderDirection: desc) {\n      id\n      name\n      token0\n      token1\n      pool\n      weeklyFeeAPR\n      token0Symbol\n      token0Decimals\n      token1Symbol\n      token1Decimals\n      totalValueLockedToken0\n      totalValueLockedToken1\n      token0Balance\n      token1Balance\n      totalLPTokensIssued\n      createdAt\n      feeTier\n      strategyToken {\n        id\n        name\n        creator {\n          id\n        }\n        admin\n        executionBundle\n      }\n      positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n        id\n        upperTick\n        lowerTick\n        relativeWeight\n      }\n      fees0\n      fees1\n      beaconName\n      payloadIpfs\n      deployer\n    }\n  }`;\n};\n\nconst FIND_ALL_VAULTS_BY_PROTOCOL = (\n  batchSize: number = 1000,\n  timestamp?: string,\n  beaconNames?: string[]\n) => {\n  if (!beaconNames || beaconNames.length === 0) {\n    throw new Error('At least one beacon name is required');\n  }\n\n  // Format beaconNames for GraphQL _in filter\n  const beaconNamesList = beaconNames.map((b) => `\"${b}\"`).join(', ');\n  const beaconNameFilter = `beaconName_in: [${beaconNamesList}]`;\n\n  if (timestamp) {\n    return `query {\n      vaults(first: ${batchSize}, where: { createdAt_lte: \"${timestamp}\", ${beaconNameFilter} }, orderBy: createdAt, orderDirection: desc) {\n        id\n        name\n        token0\n        token1\n        pool\n        weeklyFeeAPR\n        token0Symbol\n        token0Decimals\n        token1Symbol\n        token1Decimals\n        totalValueLockedToken0\n        totalValueLockedToken1\n        token0Balance\n        token1Balance\n        totalLPTokensIssued\n        createdAt\n        feeTier\n        positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n          id\n          upperTick\n          lowerTick\n          relativeWeight\n        }\n        fees0\n        fees1\n        strategyToken {\n          id\n          name\n          creator {\n            id\n          }\n          admin\n          executionBundle\n        }\n        beaconName\n        payloadIpfs\n        deployer\n      }\n    }`;\n  }\n\n  return `query {\n    vaults(first: ${batchSize}, where: { ${beaconNameFilter} }, orderBy: createdAt, orderDirection: desc) {\n      id\n      name\n      token0\n      token1\n      pool\n      weeklyFeeAPR\n      token0Symbol\n      token0Decimals\n      token1Symbol\n      token1Decimals\n      totalValueLockedToken0\n      totalValueLockedToken1\n      token0Balance\n      token1Balance\n      totalLPTokensIssued\n      createdAt\n      feeTier\n      strategyToken {\n        id\n        name\n        creator {\n          id\n        }\n        admin\n        executionBundle\n      }\n      positions(first: 1, orderBy: timestamp, orderDirection: desc) {\n        id\n        upperTick\n        lowerTick\n        relativeWeight\n      }\n      fees0\n      fees1\n      beaconName\n      payloadIpfs\n      deployer\n    }\n  }`;\n};\n\n/**\n * Utility class for fetching vault data from Steer subgraphs\n */\nexport class SubgraphVaultClient {\n  private readonly SENTIO_API_KEY =\n    typeof process !== 'undefined' ? process.env?.SENTIO_API_KEY : undefined;\n\n  /**\n   * Transform subgraph vault data to match VaultClient interface\n   */\n  private transformSubgraphVaultToVaultNode(\n    vault: SubgraphVaultDetailsWithLpData,\n    chainId: number,\n    aprMap: Map<string, number>\n  ): VaultNode {\n    const feeApr = aprMap.get(vault.id) ? aprMap.get(vault.id) : undefined;\n\n    const tickRange = this.computeTickRange(vault.positions ?? []);\n\n    return {\n      id: vault.id,\n      chainId,\n      vaultAddress: vault.id,\n      protocol: getProtocolTypeByBeacon(vault.beaconName) || Protocol.Uniswap,\n      beaconName: vault.beaconName,\n      protocolBaseType: this.getProtocolBaseType(vault.beaconName),\n      name: vault.name || '',\n      feeApr: feeApr ? parseFloat(feeApr.toString()) : undefined,\n      stakingApr: undefined,\n      merklApr: undefined,\n      positions: (vault.positions ?? []).map((p) => ({\n        id: p.id,\n        upperTick: parseInt(p.upperTick, 10),\n        lowerTick: parseInt(p.lowerTick, 10),\n        relativeWeight: p.relativeWeight,\n      })),\n      tickRange,\n      fees:\n        vault.fees0 !== undefined && vault.fees1 !== undefined\n          ? { fees0: vault.fees0, fees1: vault.fees1 }\n          : undefined,\n      pool: {\n        id: vault.pool,\n        poolAddress: vault.pool,\n        feeTier: vault.feeTier,\n        tick: undefined,\n        liquidity: undefined,\n        volumeUSD: undefined,\n        totalValueLockedUSD: vault.lpPriceData?.vault.usd.totalValue?.toString(),\n      },\n      token0: {\n        id: vault.token0,\n        symbol: vault.token0Symbol,\n        name: vault.token0Symbol,\n        decimals: parseInt(vault.token0Decimals),\n        address: vault.token0,\n        chainId,\n      },\n      token1: {\n        id: vault.token1,\n        symbol: vault.token1Symbol,\n        name: vault.token1Symbol,\n        decimals: parseInt(vault.token1Decimals),\n        address: vault.token1,\n        chainId,\n      },\n    };\n  }\n\n  /**\n   * Compute the tick range across all vault positions.\n   * Returns the minimum lowerTick and maximum upperTick, giving the full\n   * span of liquidity currently deployed by the vault strategy.\n   */\n  private computeTickRange(\n    positions: SubgraphVaultPosition[]\n  ): VaultNode['tickRange'] {\n    if (!positions.length) return undefined;\n\n    let minLowerTick = Infinity;\n    let maxUpperTick = -Infinity;\n\n    for (const pos of positions) {\n      const lower = parseInt(pos.lowerTick, 10);\n      const upper = parseInt(pos.upperTick, 10);\n      if (!isNaN(lower) && lower < minLowerTick) minLowerTick = lower;\n      if (!isNaN(upper) && upper > maxUpperTick) maxUpperTick = upper;\n    }\n\n    if (minLowerTick === Infinity || maxUpperTick === -Infinity) return undefined;\n\n    return { minLowerTick, maxUpperTick };\n  }\n\n  /**\n   * Get protocol base type from beacon name\n   */\n  private getProtocolBaseType(beaconName: string): string {\n    if (beaconName.includes('uniswap')) {\n      return 'UniswapV3';\n    }\n    const protocol = getProtocolTypeByBeacon(beaconName);\n    if (protocol) {\n      return protocol === Protocol.Blackhole ? 'Algebra Integral' : protocol;\n    }\n    if (beaconName.includes('Stryke')) {\n      return 'Stryke';\n    }\n    return 'UniswapV3'; // Default\n  }\n\n  /**\n   * Create a mock LP price response for vaults without LP data\n   */\n  private createMockLpPriceData(vault: SubgraphVaultDetails): LpPriceResponse {\n    return {\n      vault: {\n        address: vault.id as Address,\n        token0: vault.token0 as Address,\n        token1: vault.token1 as Address,\n        balances: {\n          token0: vault.token0Balance,\n          token1: vault.token1Balance,\n          totalSupply: vault.totalLPTokensIssued,\n          token0Formatted: vault.token0Balance,\n          token1Formatted: vault.token1Balance,\n          totalSupplyFormatted: vault.totalLPTokensIssued,\n        },\n        usd: {\n          lpValue: 0,\n          totalValue: 0,\n          token0Price: 0,\n          token0Value: 0,\n          token1Price: 0,\n          token1Value: 0,\n        },\n        token0Symbol: vault.token0Symbol,\n        token1Symbol: vault.token1Symbol,\n        token0Decimals: vault.token0Decimals,\n        token1Decimals: vault.token1Decimals,\n      },\n      routes: {\n        token0ToUsd: [],\n        token1ToUsd: [],\n      },\n    };\n  }\n\n  /**\n   * Fetch vault data from subgraph\n   */\n  public async getAllVaultsFromSubgraph(\n    options: VaultFetchOptions\n  ): Promise<SubgraphVaultDetailsWithLpData[]> {\n    const { subgraphUrl, showCurrentProtocol = false, beaconNames, batchSize = 1000 } = options;\n\n    const allVaults: SubgraphVaultDetailsWithLpData[] = [];\n\n    try {\n      // First get the latest vault to get the most recent timestamp\n      const latestVaultResponse = await fetch(subgraphUrl, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          ...(subgraphUrl.includes('sentio') && this.SENTIO_API_KEY\n            ? { 'api-key': this.SENTIO_API_KEY }\n            : {}),\n        },\n        body: JSON.stringify({\n          query: !showCurrentProtocol\n            ? FIND_ALL_VAULTS(1)\n            : FIND_ALL_VAULTS_BY_PROTOCOL(1, undefined, beaconNames),\n          variables: {},\n        }),\n      });\n\n      const latestVaultData: SubgraphResponse<SubgraphVaultDetails> =\n        await latestVaultResponse.json();\n      let lastTimestamp = latestVaultData?.data?.vaults?.[0]?.createdAt;\n\n      if (!lastTimestamp) {\n        return [];\n      }\n\n      let hasMoreData = true;\n      while (hasMoreData) {\n        const response = await fetch(subgraphUrl, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            ...(subgraphUrl.includes('sentio') && this.SENTIO_API_KEY\n              ? { 'api-key': this.SENTIO_API_KEY }\n              : {}),\n          },\n          body: JSON.stringify({\n            query: !showCurrentProtocol\n              ? FIND_ALL_VAULTS(batchSize, lastTimestamp)\n              : FIND_ALL_VAULTS_BY_PROTOCOL(batchSize, lastTimestamp, beaconNames),\n            variables: {},\n          }),\n        });\n\n        const responseData: SubgraphResponse<SubgraphVaultDetails> = await response.json();\n        const vaults = responseData?.data?.vaults || [];\n\n        if (!vaults.length) {\n          hasMoreData = false;\n          continue;\n        }\n\n        // Filter out duplicates based on vault ID\n        const newVaults = vaults.filter(\n          (vault: SubgraphVaultDetails) => !allVaults.some((existing) => existing.id === vault.id)\n        );\n\n        if (!newVaults.length) {\n          hasMoreData = false;\n          continue;\n        }\n\n        // For now, attach mock LP data to each vault\n        // In a real implementation, you would fetch LP price data here\n        const vaultsWithLpData: SubgraphVaultDetailsWithLpData[] = newVaults.map((vault) => ({\n          ...vault,\n          lpPriceData: this.createMockLpPriceData(vault),\n        }));\n\n        allVaults.push(...vaultsWithLpData);\n        const lastVaultTimestamp = vaults[vaults.length - 1]?.createdAt;\n        if (!lastVaultTimestamp) {\n          hasMoreData = false;\n          continue;\n        }\n        lastTimestamp = lastVaultTimestamp;\n      }\n\n      // Filter deprecated vaults if needed\n      // Note: In a real implementation, you would fetch deprecation data\n      // For now, we return all vaults\n      return allVaults;\n    } catch (error) {\n      console.error('Error fetching vaults from subgraph:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Transform subgraph vault data to VaultsConnection format\n   */\n  public transformToVaultsConnection(\n    vaults: SubgraphVaultDetailsWithLpData[],\n    chainId: number,\n    first: number = 50,\n    aprMap: Map<string, number>,\n    after?: string | null\n  ): VaultsConnection {\n    // Sort vaults by creation time (newest first)\n    const sortedVaults = vaults.sort((a, b) => parseInt(b.createdAt) - parseInt(a.createdAt));\n\n    // Apply pagination\n    let startIndex = 0;\n    if (after) {\n      const afterIndex = sortedVaults.findIndex((vault) => vault.id === after);\n      startIndex = afterIndex + 1;\n    }\n\n    const paginatedVaults = sortedVaults.slice(startIndex, startIndex + first);\n    const hasNextPage = startIndex + first < sortedVaults.length;\n    const endCursor =\n      paginatedVaults.length > 0 ? paginatedVaults[paginatedVaults.length - 1].id : null;\n\n    const edges: VaultEdge[] = paginatedVaults.map((vault) => ({\n      cursor: vault.id,\n      node: this.transformSubgraphVaultToVaultNode(vault, chainId, aprMap),\n    }));\n\n    return {\n      edges,\n      pageInfo: {\n        hasNextPage,\n        endCursor,\n      },\n      totalCount: sortedVaults.length,\n    };\n  }\n}\n","import { Campaign, createClient } from '@steerprotocol/api-sdk';\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { formatUnits } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { getSubgraphUrlByChainId } from '../const/subgraph.js';\n\n/**\n * Represents a node in the claim proof data structure\n * @property chainId - The ID of the chain where the claim exists\n * @property lastBlockUpdatedTo - The last block number this claim was updated to\n * @property user - The address of the user who can claim\n * @property campaignId - The ID of the campaign this claim belongs to\n * @property amount - The claimable amount as a string (may include decimals)\n * @property proof - The merkle proof array required for claiming\n */\nexport interface ClaimProofNode {\n  chainId: number;\n  lastBlockUpdatedTo: number;\n  user: string;\n  campaignId: number;\n  amount: string;\n  proof: readonly string[];\n}\n\nexport interface ClaimProofEdge {\n  node: ClaimProofNode;\n  cursor: string;\n}\n\n/**\n * Represents a historical claim reward record\n * @property id - Unique identifier for the claim\n * @property user - Address of the user who claimed\n * @property amount - Amount that was claimed (may include decimals)\n * @property campaign - Campaign identifier\n * @property chainId - Chain ID where the claim occurred\n * @property timestamp - Unix timestamp of when the claim occurred\n */\nexport interface ClaimRewardNode {\n  id: string;\n  user: string;\n  amount: string;\n  campaign: string;\n  chainId: number;\n  timestamp: number;\n}\n\nexport interface ClaimRewardEdge {\n  cursor: string;\n  node: ClaimRewardNode;\n}\n\n/**\n * Pagination information for paginated queries\n * @property hasNextPage - Whether there are more results available\n * @property endCursor - Cursor to use for fetching next page, if available\n */\nexport interface PageInfo {\n  hasNextPage: boolean;\n  endCursor: string | null | undefined;\n}\n\n/**\n * Connection type for claim rewards, following the Relay specification\n * @property edges - Array of claim reward records with cursors\n * @property pageInfo - Pagination information\n * @property totalCount - Total number of records available\n */\nexport interface ClaimRewardsConnection {\n  edges: readonly ClaimRewardEdge[];\n  pageInfo: PageInfo;\n  totalCount: number;\n}\n\nexport interface ClaimProofsPageInfo {\n  hasNextPage: boolean;\n  endCursor?: string;\n}\n\nexport interface ClaimProofsResponse {\n  totalCount: number;\n  edges: readonly ClaimProofEdge[];\n  pageInfo: ClaimProofsPageInfo;\n}\n\nexport interface SmartRewarderContract {\n  chainId: number;\n  address: string;\n}\n\n/**\n * Parameters required for claiming rewards\n * @property users - Array of user addresses who are claiming\n * @property campaignIds - Array of campaign IDs corresponding to each claim\n * @property amounts - Array of amounts to claim\n * @property proofs - Array of merkle proofs for verification\n * @property rewarderAddress - Address of the smart rewarder contract\n */\nexport interface ClaimRewardParams {\n  users: readonly Address[];\n  campaignIds: readonly bigint[];\n  amounts: readonly bigint[];\n  proofs: readonly (readonly `0x${string}`[])[];\n  rewarderAddress: Address;\n}\n\n/**\n * Represents a reward balance with both native and formatted values\n * @property formatted - Human-readable string format with proper decimals\n * @property native - Raw bigint value\n */\nexport interface RewardBalance {\n  formatted: string;\n  native: bigint;\n}\n\n/**\n * Comprehensive summary of a user's reward status\n * @property totalEarned - Total rewards earned (claimed + claimable)\n * @property totalClaimed - Total rewards already claimed\n * @property claimable - Rewards available to claim\n */\nexport interface RewardSummary {\n  totalEarned: RewardBalance;\n  totalClaimed: RewardBalance;\n  claimable: RewardBalance;\n}\n\nexport abstract class SmartRewards {\n  protected readonly client: ReturnType<typeof createClient>;\n  protected readonly publicClient: PublicClient;\n  protected readonly walletClient: WalletClient;\n\n  constructor(\n    client: ReturnType<typeof createClient>,\n    publicClient: PublicClient,\n    walletClient: WalletClient\n  ) {\n    this.client = client;\n    this.publicClient = publicClient;\n    this.walletClient = walletClient;\n  }\n\n  public async getCampaigns(chainId: number): Promise<SteerResponse<Campaign[]>> {\n    const campaigns = await this.client.campaigns({\n      filter: {\n        chainId,\n      },\n    });\n\n    return {\n      data: (campaigns.data?.campaigns.edges.map((edge) => ({\n        ...edge.node,\n        vaults: edge.node.vaults?.map(vault => ({\n          ...vault,\n          beaconName: vault.beaconName || '',\n          name: vault.name || '',\n          protocol: vault.protocol || '',\n          protocolBaseType: vault.protocolBaseType || '',\n          targetProtocol: vault.targetProtocol || ''\n        })) || []\n      })) || []) as Campaign[],\n      status: campaigns.status,\n      success: true,\n    };\n  }\n\n  /**\n   * Retrieves campaigns associated with a specific pool address\n   * @param poolAddress - The address of the pool to get campaigns for\n   * @param chainId - Chain ID where the pool exists\n   * @returns Promise resolving to an array of campaigns associated with the pool\n   * \n   * @example\n   * ```typescript\n   * // Get campaigns for a pool on a specific chain\n   * const campaigns = await smartRewards.campaignsByPool('0x...', 1);\n   * ```\n   */\n  public async campaignsByPool(\n    poolAddress: string,\n    chainId: number\n  ): Promise<SteerResponse<Campaign[]>> {\n    try {\n      const campaigns = await this.client.campaignsByPool({\n        pool: poolAddress,\n        chainId\n      });\n\n      return {\n        data: (campaigns.data?.campaignsByPool?.map(campaign => campaign ? {\n          ...campaign,\n          vaults: campaign.vaults?.map(vault => vault ? {\n            ...vault,\n            beaconName: vault.beaconName || '',\n            name: vault.name || '',\n            protocol: vault.protocol || '',\n            protocolBaseType: vault.protocolBaseType || '',\n            targetProtocol: vault.targetProtocol || ''\n          } : null).filter((v): v is NonNullable<typeof v> => v !== null) || []\n        } : null).filter((c): c is NonNullable<typeof c> => c !== null) || []) as Campaign[],\n        status: campaigns.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Retrieves claim proofs for a user that can be used to claim rewards\n   * @param user - Address of the user to get proofs for\n   * @param chainId - Chain ID where the claims exist\n   * @param campaignId - Optional campaign ID to filter claims\n   * @returns Promise resolving to claim proof data with pagination support\n   */\n  public async getClaimProofs(\n    user: Address,\n    chainId: number,\n    campaignId?: number\n  ): Promise<SteerResponse<ClaimProofsResponse>> {\n    try {\n      const normalizedUser = user.toLowerCase() as Address;\n      const response = await this.client.claimProofs({\n        user: normalizedUser,\n        filter: {\n          chainId,\n          campaignId\n        }\n      });\n\n      if (!response.data?.claimProofs) {\n        return {\n          data: null,\n          status: response.status,\n          success: true\n        };\n      }\n\n      const transformedResponse: ClaimProofsResponse = {\n        totalCount: response.data.claimProofs.totalCount,\n        pageInfo: {\n          hasNextPage: response.data.claimProofs.pageInfo.hasNextPage,\n          endCursor: response.data.claimProofs.pageInfo.endCursor || undefined\n        },\n        edges: response.data.claimProofs.edges.map(edge => ({\n          cursor: edge.cursor,\n          node: {\n            ...edge.node,\n            proof: edge.node.proof?.filter((p): p is string => p !== null) || []\n          }\n        }))\n      };\n\n      return {\n        data: transformedResponse,\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Retrieves historical claim data for a specific pool\n   * @param chainId - Chain ID where the pool exists\n   * @param pool - Address or identifier of the pool\n   * @param user - Optional user address to filter claims\n   * @returns Promise resolving to paginated claim history data\n   * \n   * @example\n   * ```typescript\n   * // Get all claims for a pool\n   * const allClaims = await smartRewards.getClaimRewardsByPool(1, poolAddress);\n   * \n   * // Get claims for a specific user in a pool\n   * const userClaims = await smartRewards.getClaimRewardsByPool(1, poolAddress, userAddress);\n   * ```\n   */\n  public async getClaimedRewardsByPool(\n    chainId: number,\n    pool: string,\n    user?: Address\n  ): Promise<SteerResponse<ClaimRewardsConnection>> {\n    try {\n      const normalizedPool = pool.toLowerCase();\n      const normalizedUser = user ? user.toLowerCase() as Address : undefined;\n      \n      const response = await this.client.claimRewards({\n        poolId: normalizedPool,\n        chainId,\n        filter: normalizedUser ? { user: normalizedUser } : undefined\n      });\n\n      if (!response.data?.claimRewards) {\n        return {\n          data: null,\n          status: response.status,\n          success: true\n        };\n      }\n\n      const transformedResponse: ClaimRewardsConnection = {\n        totalCount: response.data.claimRewards.totalCount,\n        pageInfo: {\n          hasNextPage: response.data.claimRewards.pageInfo.hasNextPage,\n          endCursor: response.data.claimRewards.pageInfo.endCursor\n        },\n        edges: response.data.claimRewards.edges.map(edge => ({\n          cursor: edge.cursor,\n          node: {\n            ...edge.node,\n            timestamp: Number(edge.node.timestamp)\n          }\n        }))\n      };\n\n      return {\n        data: transformedResponse,\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  \n\n  /**\n   * Gets a comprehensive summary of a user's reward status\n   * @param user - Address of the user\n   * @param chainId - Chain ID to check rewards on\n   * @param campaignId - Optional campaign ID to filter rewards\n   * @param decimals - Number of decimals for formatting (default: 18)\n   * @returns Promise resolving to reward summary with both native and formatted values\n   * \n   * @example\n   * ```typescript\n   * const summary = await smartRewards.getRewardSummary(userAddress, chainId);\n   * console.log('Total earned:', summary.data.totalEarned.formatted);\n   * console.log('Available to claim:', summary.data.claimable.formatted);\n   * ```\n   */\n  public async getRewardSummary(\n    user: Address,\n    poolAddress: string,\n    chainId: number,\n    campaignId: number,\n    decimals: number = 18\n  ): Promise<SteerResponse<RewardSummary>> {\n    try {\n      // Lowercase addresses\n      const normalizedUser = user.toLowerCase() as Address;\n      const normalizedPoolAddress = poolAddress.toLowerCase();\n\n      // Get claimable rewards\n      const claimProofs = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n\n      // Filter claim proofs by campaignId for additional safety\n      const filteredClaimProofs = claimProofs.data?.edges.filter(\n        edge => edge.node.campaignId === campaignId\n      ) || [];\n\n      const totalAmount = filteredClaimProofs.reduce(\n        (sum, edge) => sum + BigInt(edge.node.amount.split('.')[0]),\n        0n\n      ) || 0n;\n\n      // Get claimed rewards\n      const claimedRewards = await this.getClaimedRewardsByPool(chainId, normalizedPoolAddress, normalizedUser);\n\n      // Filter claimed rewards by campaign ID\n      const filteredClaimedRewards = claimedRewards.data?.edges.filter(\n        edge => Number(edge.node.campaign) === campaignId\n      ) || [];\n\n      const claimedAmount = filteredClaimedRewards.reduce(\n        (sum, edge) => sum + BigInt(edge.node.amount.split('.')[0]),\n        0n\n      ) || 0n;\n\n      // Calculate totals\n      const claimableAmount = totalAmount - claimedAmount;\n\n      const summary: RewardSummary = {\n        totalEarned: {\n          native: totalAmount,\n          formatted: formatUnits(totalAmount, decimals)\n        },\n        totalClaimed: {\n          native: claimedAmount,\n          formatted: formatUnits(claimedAmount, decimals)\n        },\n        claimable: {\n          native: claimableAmount,\n          formatted: formatUnits(claimableAmount, decimals)\n        }\n      };\n\n      return {\n        data: summary,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  public async getSmartRewarderContracts(): Promise<SteerResponse<readonly SmartRewarderContract[]>> {\n    try {\n      const response = await this.client.smartRewarderContracts();\n\n      return {\n        data: response.data?.smartRewarderContracts || [],\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Claims rewards from the smart rewarder contract\n   * @param params - Parameters required for claiming rewards\n   * @returns Promise resolving to transaction hash if successful\n   * \n   * @remarks\n   * This method handles the low-level interaction with the smart contract.\n   * For a higher-level interface, consider using {@link claimCampaignRewards} instead.\n   * \n   * @example\n   * ```typescript\n   * // Get claim proofs\n   * const claimProofs = await smartRewards.getClaimProofs(userAddress, chainId, campaignId);\n   * \n   * // Get smart rewarder contract\n   * const rewarders = await smartRewards.getSmartRewarderContracts();\n   * const rewarder = rewarders.data?.find(r => r.chainId === chainId);\n   * \n   * if (claimProofs.data && rewarder) {\n   *   // Prepare claim data\n   *   const claimData = smartRewards.prepareClaimData(claimProofs.data);\n   *   claimData.rewarderAddress = rewarder.address as Address;\n   *   \n   *   // Claim rewards\n   *   const tx = await smartRewards.claimReward(claimData);\n   * }\n   * ```\n   * \n   * @throws Will throw an error if no wallet account is found\n   * @throws Will throw an error if contract simulation fails\n   */\n  public async claimReward(params: ClaimRewardParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      // Normalize addresses\n      const normalizedParams = {\n        ...params,\n        users: params.users.map(user => user.toLowerCase() as Address),\n        rewarderAddress: params.rewarderAddress.toLowerCase() as Address\n      };\n\n      const { request } = await this.publicClient.simulateContract({\n        address: normalizedParams.rewarderAddress,\n        abi: [{\n          type: 'function',\n          inputs: [\n            { name: 'users', internalType: 'address[]', type: 'address[]' },\n            { name: 'campaignIds', internalType: 'uint256[]', type: 'uint256[]' },\n            { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n            { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }\n          ],\n          name: 'claim',\n          outputs: [],\n          stateMutability: 'nonpayable'\n        }],\n        functionName: 'claim',\n        args: [\n          normalizedParams.users,\n          normalizedParams.campaignIds,\n          normalizedParams.amounts,\n          normalizedParams.proofs\n        ],\n        account: account[0]\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Helper function to prepare claim data from claim proofs\n   * @param proofs - The claim proofs response from getClaimProofs\n   * @returns ClaimRewardParams object ready for use with claimReward\n   * \n   * @remarks\n   * This helper function transforms the claim proofs into the format required by the smart contract.\n   * Note that the returned object's rewarderAddress is empty and must be set before using with claimReward.\n   * \n   * @example\n   * ```typescript\n   * // Get claim proofs and rewarder contract\n   * const proofs = await smartRewards.getClaimProofs(userAddress, chainId);\n   * const rewarders = await smartRewards.getSmartRewarderContracts();\n   * const rewarder = rewarders.data?.find(r => r.chainId === chainId);\n   * \n   * if (proofs.data && rewarder) {\n   *   // Prepare the claim data\n   *   const claimData = smartRewards.prepareClaimData(proofs.data);\n   *   \n   *   // Set the rewarder address (required)\n   *   claimData.rewarderAddress = rewarder.address as Address;\n   *   \n   *   // Now the data is ready for claiming\n   *   const tx = await smartRewards.claimReward(claimData);\n   * }\n   * ```\n   */\n  public prepareClaimData(proofs: ClaimProofsResponse): ClaimRewardParams {\n    return {\n      users: proofs.edges.map(edge => edge.node.user.toLowerCase() as Address),\n      campaignIds: proofs.edges.map(edge => BigInt(edge.node.campaignId)),\n      amounts: proofs.edges.map(edge => BigInt(edge.node.amount.split('.')[0])),\n      proofs: proofs.edges.map(edge => edge.node.proof as readonly `0x${string}`[]),\n      rewarderAddress: '' as Address\n    };\n  }\n\n  /**\n   * Convenience function to handle the entire claim process\n   * @param userAddress The address of the user claiming rewards\n   * @param chainId The chain ID where the campaign exists\n   * @param campaignId Optional campaign ID to filter claims\n   * @returns Transaction hash if successful, or error details if failed\n   */\n  public async claimCampaignRewards(\n    userAddress: Address,\n    chainId: number,\n    campaignId?: number\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      const normalizedUser = userAddress.toLowerCase() as Address;\n      \n      // Get claim proofs\n      const claimProofsResponse = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n      if (!claimProofsResponse.data || claimProofsResponse.data.edges.length === 0) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'No claim proofs found'\n        };\n      }\n\n      // Filter claim proofs by campaignId if specified\n      let filteredClaimProofs = claimProofsResponse.data;\n      if (campaignId !== undefined) {\n        filteredClaimProofs = {\n          ...claimProofsResponse.data,\n          edges: claimProofsResponse.data.edges.filter(edge => edge.node.campaignId === campaignId)\n        };\n        \n        // If no matching campaign proofs found after filtering\n        if (filteredClaimProofs.edges.length === 0) {\n          return {\n            data: null,\n            status: 400,\n            success: false,\n            error: `No claim proofs found for campaign ID ${campaignId}`\n          };\n        }\n      }\n\n      // Get smart rewarder contract\n      const rewarderResponse = await this.getSmartRewarderContracts();\n      const rewarder = rewarderResponse.data?.find(r => r.chainId === chainId);\n      if (!rewarder) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: `No smart rewarder contract found for chain ${chainId}`\n        };\n      }\n\n      // Prepare claim data\n      const claimData = this.prepareClaimData(filteredClaimProofs);\n      claimData.rewarderAddress = rewarder.address as Address;\n\n      // Execute claim\n      return await this.claimReward(claimData);\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Prepares the claim rewards campaign object with all necessary data for contract interaction\n   * @param userAddress The address of the user claiming rewards\n   * @param chainId The chain ID where the campaign exists\n   * @param campaignId Optional campaign ID to filter claims\n   * @returns Promise resolving to an object containing all necessary data for claiming rewards\n   * \n   * @example\n   * ```typescript\n   * // Get the prepared claim data\n   * const claimData = await smartRewards.prepareClaimRewardsCampaign(userAddress, chainId, campaignId);\n   * \n   * if (claimData.success) {\n   *   // Use the data with your own contract interaction methods\n   *   const { address, abi, functionName, args } = claimData.data;\n   *   // Execute the contract call using your preferred method\n   * }\n   * ```\n   */\n  public async prepareClaimRewardsCampaign(\n    userAddress: Address,\n    chainId: number,\n    campaignId?: number\n  ): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [\n      readonly Address[],\n      readonly bigint[],\n      readonly bigint[],\n      readonly (readonly `0x${string}`[])[]\n    ];\n  }>> {\n    try {\n      const normalizedUser = userAddress.toLowerCase() as Address;\n      \n      // Get claim proofs\n      const claimProofsResponse = await this.getClaimProofs(normalizedUser, chainId, campaignId);\n      if (!claimProofsResponse.data || claimProofsResponse.data.edges.length === 0) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'No claim proofs found'\n        };\n      }\n\n      // Filter claim proofs by campaignId if specified\n      let filteredClaimProofs = claimProofsResponse.data;\n      if (campaignId !== undefined) {\n        filteredClaimProofs = {\n          ...claimProofsResponse.data,\n          edges: claimProofsResponse.data.edges.filter(edge => edge.node.campaignId === campaignId)\n        };\n        \n        // If no matching campaign proofs found after filtering\n        if (filteredClaimProofs.edges.length === 0) {\n          return {\n            data: null,\n            status: 400,\n            success: false,\n            error: `No claim proofs found for campaign ID ${campaignId}`\n          };\n        }\n      }\n\n      // Get smart rewarder contract\n      const rewarderResponse = await this.getSmartRewarderContracts();\n      const rewarder = rewarderResponse.data?.find(r => r.chainId === chainId);\n      if (!rewarder) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: `No smart rewarder contract found for chain ${chainId}`\n        };\n      }\n\n      // Prepare claim data\n      const claimData = this.prepareClaimData(filteredClaimProofs);\n\n      // Prepare the complete contract interaction data\n      return {\n        data: {\n          address: rewarder.address as Address,\n          abi: [{\n            type: 'function',\n            inputs: [\n              { name: 'users', internalType: 'address[]', type: 'address[]' },\n              { name: 'campaignIds', internalType: 'uint256[]', type: 'uint256[]' },\n              { name: 'amounts', internalType: 'uint256[]', type: 'uint256[]' },\n              { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }\n            ],\n            name: 'claim',\n            outputs: [],\n            stateMutability: 'nonpayable'\n          }],\n          functionName: 'claim',\n          args: [\n            claimData.users,\n            claimData.campaignIds,\n            claimData.amounts,\n            claimData.proofs\n          ] as const\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Checks if a chain is supported by checking if it has a subgraph URL\n   * @param chainId The chain ID to check\n   * @returns boolean indicating if the chain is supported\n   */\n  public supportsChain(chainId: number): boolean {\n    return getSubgraphUrlByChainId(chainId) !== undefined;\n  }\n} ","import type { Client } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { getSubgraphUrlByChainId } from '../const/index.js';\n\nexport abstract class SubgraphClient {\n  protected readonly client: Client;\n\n  constructor(client: Client) {\n    this.client = client;\n  }\n\n  /**\n   * Executes a GraphQL query against the subgraph\n   * @param query The GraphQL query string\n   * @param variables Optional variables for the query\n   * @returns Promise with the query result\n   */\n  protected async executeSubgraphQuery<T>(\n    query: string,\n    variables?: Record<string, unknown>\n  ): Promise<SteerResponse<T>> {\n    const chainId = await this.client.chain?.id;\n    \n    if (!chainId) {\n      throw new Error('No active chain found');\n    }\n\n    const subgraphUrl = this.getSubgraphUrl(chainId);\n    if (!subgraphUrl) {\n      throw new Error(`No subgraph URL found for chain ID ${chainId}`);\n    }\n\n    try {\n      const response = await fetch(subgraphUrl, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({\n          query,\n          variables,\n        }),\n      });\n\n      if (!response.ok) {\n        throw new Error(`HTTP error! status: ${response.status}`);\n      }\n\n      const result = await response.json();\n\n      if (result.errors) {\n        throw new Error(result.errors[0].message);\n      }\n\n      return {\n        data: result.data as T,\n        status: response.status,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null as T,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the subgraph URL for a given chain ID\n   * @param chainId The chain ID to get the subgraph URL for\n   * @returns The subgraph URL or undefined if not found\n   */\n  protected getSubgraphUrl(chainId: number): string | undefined {\n\n    const subgraphUrl = getSubgraphUrlByChainId(chainId);\n    if (!subgraphUrl) {\n      throw new Error(`No subgraph URL found for chain ID ${chainId}`);\n    }\n\n    return subgraphUrl;\n  }\n\n  /**\n   * Checks if a chain is supported by checking if it has a subgraph URL\n   * @param chainId The chain ID to check\n   * @returns boolean indicating if the chain is supported\n   */\n  public supportsChain(chainId: number): boolean {\n    return getSubgraphUrlByChainId(chainId) !== undefined;\n  }\n} ","import { Address, PublicClient } from 'viem';\nimport { PoolSharkGlobalState, Slot0, SteerResponse } from '../../types.js';\n\n/**\n * Parameters for getting pool state across different AMM types\n */\nexport interface PoolStateParams {\n  /** The pool address */\n  poolAddress: Address;\n  /** Whether the pool is an Aerodrome pool */\n  isAerodromePool?: boolean;\n  /** Whether the pool is an Algebra pool */\n  isAlgebraPool?: boolean;\n  /** Whether the pool is an Algebra directional pool */\n  isAlgebraDirectionPool?: boolean;\n  /** Whether the pool is a PoolShark pool */\n  isPoolSharkPool?: boolean;\n  /** Whether the pool is an Algebra Integral pool */\n  isAlgebraIntegralPool?: boolean;\n}\n\n// const SLOT0_ABI: any = [\n//   {\n//     inputs: [],\n//     name: 'slot0',\n//     outputs: [\n//       { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n//       { internalType: 'int24', name: 'tick', type: 'int24' },\n//       { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n//       { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n//       { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n//       { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },\n//       { internalType: 'bool', name: 'unlocked', type: 'bool' },\n//     ],\n//     stateMutability: 'view',\n//     type: 'function',\n//   },\n// ] as const;\n\nconst GLOBAL_STATE_ABI = [\n  {\n    inputs: [],\n    name: 'globalState',\n    outputs: [\n      { internalType: 'uint160', name: 'price', type: 'uint160' },\n      { internalType: 'int24', name: 'tick', type: 'int24' },\n      { internalType: 'int24', name: 'prevInitializedTick', type: 'int24' },\n      { internalType: 'uint16', name: 'fee', type: 'uint16' },\n      { internalType: 'uint16', name: 'timepointIndex', type: 'uint16' },\n      { internalType: 'uint8', name: 'communityFee', type: 'uint8' },\n      { internalType: 'bool', name: 'unlocked', type: 'bool' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n\nconst GLOBAL_STATE_ABI_INTEGRAL_V_1 = [\n  {\n    inputs: [],\n    name: 'globalState',\n    outputs: [\n      {\n        internalType: 'uint160',\n        name: 'price',\n        type: 'uint160',\n      },\n      {\n        internalType: 'int24',\n        name: 'tick',\n        type: 'int24',\n      },\n      {\n        internalType: 'uint16',\n        name: 'lastFee',\n        type: 'uint16',\n      },\n      {\n        internalType: 'uint8',\n        name: 'pluginConfig',\n        type: 'uint8',\n      },\n      {\n        internalType: 'uint16',\n        name: 'communityFee',\n        type: 'uint16',\n      },\n      {\n        internalType: 'bool',\n        name: 'unlocked',\n        type: 'bool',\n      },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n\nconst GLOBAL_STATE_DIRECTIONAL_ABI = [\n  {\n    inputs: [],\n    name: 'globalState',\n    outputs: [\n      { internalType: 'uint160', name: 'price', type: 'uint160' },\n      { internalType: 'int24', name: 'tick', type: 'int24' },\n      { internalType: 'uint16', name: 'feeZto', type: 'uint16' },\n      { internalType: 'uint16', name: 'feeOtz', type: 'uint16' },\n      { internalType: 'uint16', name: 'timepointIndex', type: 'uint16' },\n      { internalType: 'uint8', name: 'communityFeeToken0', type: 'uint8' },\n      { internalType: 'uint8', name: 'communityFeeToken1', type: 'uint8' },\n      { internalType: 'bool', name: 'unlocked', type: 'bool' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n\nconst POOLSHARK_GLOBAL_STATE_ABI = [\n  {\n    inputs: [],\n    name: 'globalState',\n    outputs: [\n      {\n        components: [\n          {\n            components: [\n              { internalType: 'uint16', name: 'index', type: 'uint16' },\n              { internalType: 'uint16', name: 'count', type: 'uint16' },\n              { internalType: 'uint16', name: 'countMax', type: 'uint16' },\n            ],\n            internalType: 'struct PoolsharkStructs.SampleState',\n            name: 'samples',\n            type: 'tuple',\n          },\n          { internalType: 'uint200', name: 'feeGrowthGlobal0', type: 'uint200' },\n          { internalType: 'uint200', name: 'feeGrowthGlobal1', type: 'uint200' },\n          { internalType: 'uint160', name: 'secondsPerLiquidityAccum', type: 'uint160' },\n          { internalType: 'uint160', name: 'price', type: 'uint160' },\n          { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n          { internalType: 'int56', name: 'tickSecondsAccum', type: 'int56' },\n          { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n          { internalType: 'uint16', name: 'protocolSwapFee0', type: 'uint16' },\n          { internalType: 'uint16', name: 'protocolSwapFee1', type: 'uint16' },\n        ],\n        internalType: 'struct PoolsharkStructs.RangePoolState',\n        name: 'pool',\n        type: 'tuple',\n      },\n      {\n        components: [\n          { internalType: 'uint160', name: 'price', type: 'uint160' },\n          { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n          { internalType: 'uint128', name: 'protocolFees', type: 'uint128' },\n          { internalType: 'uint16', name: 'protocolFillFee', type: 'uint16' },\n          { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n        ],\n        internalType: 'struct PoolsharkStructs.LimitPoolState',\n        name: 'pool0',\n        type: 'tuple',\n      },\n      {\n        components: [\n          { internalType: 'uint160', name: 'price', type: 'uint160' },\n          { internalType: 'uint128', name: 'liquidity', type: 'uint128' },\n          { internalType: 'uint128', name: 'protocolFees', type: 'uint128' },\n          { internalType: 'uint16', name: 'protocolFillFee', type: 'uint16' },\n          { internalType: 'int24', name: 'tickAtPrice', type: 'int24' },\n        ],\n        internalType: 'struct PoolsharkStructs.LimitPoolState',\n        name: 'pool1',\n        type: 'tuple',\n      },\n      { internalType: 'uint128', name: 'liquidityGlobal', type: 'uint128' },\n      { internalType: 'uint32', name: 'positionIdNext', type: 'uint32' },\n      { internalType: 'uint32', name: 'epoch', type: 'uint32' },\n      { internalType: 'uint8', name: 'unlocked', type: 'uint8' },\n    ],\n    stateMutability: 'view',\n    type: 'function',\n  },\n] as const;\n\n/**\n * Gets slot0 data from a standard Uniswap V3 pool\n * @param poolAddress The pool address\n */\nexport async function getSlot0(\n  publicClient: PublicClient,\n  poolAddress: Address\n): Promise<SteerResponse<Slot0>> {\n  try {\n    const slot0 = await publicClient.readContract({\n      address: poolAddress,\n      abi: [\n        {\n          inputs: [],\n          name: 'slot0',\n          outputs: [\n            { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n            { internalType: 'int24', name: 'tick', type: 'int24' },\n            { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n            { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n            { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n            { internalType: 'uint8', name: 'feeProtocol', type: 'uint8' },\n            { internalType: 'bool', name: 'unlocked', type: 'bool' },\n          ],\n          stateMutability: 'view',\n          type: 'function',\n        },\n      ],\n      functionName: 'slot0',\n    });\n\n    return {\n      data: {\n        sqrtPriceX96: slot0[0],\n        tick: Number(slot0[1]),\n        observationIndex: slot0[2],\n        observationCardinality: slot0[3],\n        observationCardinalityNext: slot0[4],\n        feeProtocol: slot0[5],\n        unlocked: slot0[6],\n      },\n      status: 200,\n      success: true,\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Unknown error occurred',\n    };\n  }\n}\n\n/**\n * Gets slot0 data from an Aerodrome V3 pool\n * @param poolAddress The pool address\n */\nexport async function getAerodromeSlot0(\n  publicClient: PublicClient,\n  poolAddress: Address\n): Promise<SteerResponse<Slot0>> {\n  try {\n    const slot0 = await publicClient.readContract({\n      address: poolAddress,\n      abi: [\n        {\n          inputs: [],\n          name: 'slot0',\n          outputs: [\n            { internalType: 'uint160', name: 'sqrtPriceX96', type: 'uint160' },\n            { internalType: 'int24', name: 'tick', type: 'int24' },\n            { internalType: 'uint16', name: 'observationIndex', type: 'uint16' },\n            { internalType: 'uint16', name: 'observationCardinality', type: 'uint16' },\n            { internalType: 'uint16', name: 'observationCardinalityNext', type: 'uint16' },\n            { internalType: 'bool', name: 'unlocked', type: 'bool' },\n          ],\n          stateMutability: 'view',\n          type: 'function',\n        },\n      ],\n      functionName: 'slot0',\n    });\n\n    return {\n      data: {\n        sqrtPriceX96: slot0[0],\n        tick: Number(slot0[1]),\n        observationIndex: slot0[2],\n        observationCardinality: slot0[3],\n        observationCardinalityNext: slot0[4],\n        feeProtocol: 0,\n        unlocked: slot0[5],\n      },\n      status: 200,\n      success: true,\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Unknown error occurred',\n    };\n  }\n}\n\n/**\n * Gets global state from an Algebra pool\n * @param poolAddress The pool address\n * @param isDirectional Whether the pool is directional\n */\nexport async function getGlobalState(\n  publicClient: PublicClient,\n  poolAddress: Address,\n  isDirectional = false\n): Promise<SteerResponse<Slot0>> {\n  try {\n    try {\n      const globalState = await publicClient.readContract({\n        address: poolAddress,\n        abi: isDirectional ? GLOBAL_STATE_DIRECTIONAL_ABI : GLOBAL_STATE_ABI,\n        functionName: 'globalState',\n      });\n\n      return {\n        data: {\n          price: globalState[0],\n          tick: Number(globalState[1]),\n          observationIndex: globalState[4], // timepointIndex\n          observationCardinality: 0, // Not available in Algebra\n          observationCardinalityNext: 0, // Not available in Algebra\n          feeProtocol: isDirectional ? Number(globalState[2]) : Number(globalState[3]), // fee or feeZto\n          unlocked: Boolean(globalState[isDirectional ? 7 : 6]),\n        },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      const globalState = await publicClient.readContract({\n        address: poolAddress,\n        abi: GLOBAL_STATE_ABI_INTEGRAL_V_1,\n        functionName: 'globalState',\n      });\n\n      return {\n        data: {\n          price: globalState[0],\n          tick: Number(globalState[1]),\n          observationIndex: 0,\n          observationCardinality: 0,\n          observationCardinalityNext: 0,\n          feeProtocol: 0,\n          unlocked: false,\n        },\n        status: 200,\n        success: true,\n      };\n    }\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Unknown error occurred',\n    };\n  }\n}\n\n/**\n * Gets global state from a PoolShark pool\n * @param poolAddress The pool address\n */\nexport async function getGlobalStatePoolShark(\n  publicClient: PublicClient,\n  poolAddress: Address\n): Promise<SteerResponse<PoolSharkGlobalState>> {\n  try {\n    const globalState = await publicClient.readContract({\n      address: poolAddress,\n      abi: POOLSHARK_GLOBAL_STATE_ABI,\n      functionName: 'globalState',\n    });\n\n    return {\n      data: {\n        pool: {\n          samples: {\n            index: globalState[0].samples.index,\n            count: globalState[0].samples.count,\n            countMax: globalState[0].samples.countMax,\n          },\n          feeGrowthGlobal0: globalState[0].feeGrowthGlobal0,\n          feeGrowthGlobal1: globalState[0].feeGrowthGlobal1,\n          secondsPerLiquidityAccum: globalState[0].secondsPerLiquidityAccum,\n          price: globalState[0].price,\n          liquidity: globalState[0].liquidity,\n          tickSecondsAccum: Number(globalState[0].tickSecondsAccum),\n          tickAtPrice: globalState[0].tickAtPrice,\n          protocolSwapFee0: globalState[0].protocolSwapFee0,\n          protocolSwapFee1: globalState[0].protocolSwapFee1,\n        },\n        pool0: {\n          price: globalState[1].price,\n          liquidity: globalState[1].liquidity,\n          protocolFees: globalState[1].protocolFees,\n          protocolFillFee: globalState[1].protocolFillFee,\n          tickAtPrice: globalState[1].tickAtPrice,\n        },\n        pool1: {\n          price: globalState[2].price,\n          liquidity: globalState[2].liquidity,\n          protocolFees: globalState[2].protocolFees,\n          protocolFillFee: globalState[2].protocolFillFee,\n          tickAtPrice: globalState[2].tickAtPrice,\n        },\n        liquidityGlobal: globalState[3],\n        positionIdNext: Number(globalState[4]),\n        epoch: Number(globalState[5]),\n        unlocked: Number(globalState[6]),\n      },\n      status: 200,\n      success: true,\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Unknown error occurred',\n    };\n  }\n}\n\n/**\n * Gets global state from an Algebra Integral pool\n * @param poolAddress The pool address\n * @param isDirectional Whether the pool is directional\n */\nexport async function getGlobalStateAlgebraIntegral(\n  publicClient: PublicClient,\n  poolAddress: Address,\n  isDirectional = false\n): Promise<SteerResponse<Slot0>> {\n  try {\n    try {\n      const globalState = await publicClient.readContract({\n        address: poolAddress,\n        abi: isDirectional ? GLOBAL_STATE_DIRECTIONAL_ABI : GLOBAL_STATE_ABI,\n        functionName: 'globalState',\n      });\n\n      return {\n        data: {\n          price: globalState[0],\n          tick: Number(globalState[1]),\n          observationIndex: globalState[4], // timepointIndex\n          observationCardinality: 0, // Not available in Algebra Integral\n          observationCardinalityNext: 0, // Not available in Algebra Integral\n          feeProtocol: isDirectional ? Number(globalState[2]) : Number(globalState[3]), // fee or feeZto\n          unlocked: Boolean(globalState[isDirectional ? 7 : 6]),\n        },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      const globalState = await publicClient.readContract({\n        address: poolAddress,\n        abi: GLOBAL_STATE_ABI_INTEGRAL_V_1,\n        functionName: 'globalState',\n      });\n\n      return {\n        data: {\n          price: globalState[0],\n          tick: Number(globalState[1]),\n          observationIndex: 0,\n          observationCardinality: 0,\n          observationCardinalityNext: 0,\n          feeProtocol: 0,\n          unlocked: false,\n        },\n        status: 200,\n        success: true,\n      };\n    }\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Unknown error occurred',\n    };\n  }\n}\n\n/**\n * Unified method to get pool state across different AMM types\n * Automatically calls the correct function based on pool type parameters\n *\n * @param publicClient - The public client for blockchain reads\n * @param params - Parameters specifying the pool and its type\n * @returns Promise resolving to standardized pool state data\n *\n * @example\n * ```typescript\n * // For Uniswap V3 pool\n * const uniV3State = await getPoolState(publicClient, {\n *   poolAddress: '0x...',\n * });\n *\n * // For Algebra pool\n * const algebraState = await getPoolState(publicClient, {\n *   poolAddress: '0x...',\n *   isAlgebraPool: true,\n *   isAlgebraDirectionPool: false\n * });\n *\n * // For PoolShark pool\n * const poolSharkState = await getPoolState(publicClient, {\n *   poolAddress: '0x...',\n *   isPoolSharkPool: true\n * });\n * ```\n */\nexport async function getPoolState(\n  publicClient: PublicClient,\n  params: PoolStateParams\n): Promise<SteerResponse<Slot0>> {\n  try {\n    let stateResponse: SteerResponse<Slot0 | PoolSharkGlobalState>;\n\n    // Handle different protocol types following the same logic as getPoolInstance\n    if (params.isAlgebraIntegralPool) {\n      // For Algebra Integral pools\n      stateResponse = await getGlobalStateAlgebraIntegral(\n        publicClient,\n        params.poolAddress,\n        params.isAlgebraDirectionPool || false\n      );\n    } else if (params.isPoolSharkPool) {\n      // For PoolShark pools - convert to standardized format\n      const poolSharkResponse = await getGlobalStatePoolShark(publicClient, params.poolAddress);\n      if (poolSharkResponse.success && poolSharkResponse.data) {\n        stateResponse = {\n          success: true,\n          status: 200,\n          data: {\n            sqrtPriceX96: poolSharkResponse.data.pool.price,\n            tick: poolSharkResponse.data.pool.tickAtPrice,\n            observationIndex: 0,\n            observationCardinality: 0,\n            observationCardinalityNext: 0,\n            feeProtocol: 0,\n            unlocked: poolSharkResponse.data.unlocked === 1,\n          },\n        };\n      } else {\n        stateResponse = {\n          data: null,\n          status: poolSharkResponse.status,\n          success: false,\n          error: poolSharkResponse.error,\n        };\n      }\n    } else if (params.isAlgebraPool) {\n      // For Algebra pools\n      stateResponse = await getGlobalState(\n        publicClient,\n        params.poolAddress,\n        params.isAlgebraDirectionPool || false\n      );\n    } else if (params.isAerodromePool) {\n      // For Aerodrome V3 pools\n      stateResponse = await getAerodromeSlot0(publicClient, params.poolAddress);\n    } else {\n      // For standard Uniswap V3 pools\n\n      stateResponse = await getSlot0(publicClient, params.poolAddress);\n    }\n\n    if (!stateResponse.success || !stateResponse.data) {\n      throw new Error(stateResponse.error || 'Failed to read pool state');\n    }\n\n    return {\n      data: stateResponse.data as Slot0,\n      status: 200,\n      success: true,\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to get pool state',\n    };\n  }\n}\n\n/**\n * Extracts the appropriate price value from pool state based on AMM type\n * Different AMM protocols store price information in different fields\n *\n * @param poolStateData - The pool state data returned from getPoolState\n * @param params - Pool type parameters to determine which price field to use\n * @returns The price as bigint, or null if price cannot be extracted\n *\n * @example\n * ```typescript\n * const stateResponse = await getPoolState(publicClient, {\n *   poolAddress: '0x...',\n *   isAlgebraPool: true\n * });\n *\n * if (stateResponse.success && stateResponse.data) {\n *   const price = getPoolPrice(stateResponse.data, {\n *     isAlgebraPool: true,\n *     isAlgebraDirectionPool: false\n *   });\n *   console.log('Pool price:', price);\n * }\n * ```\n */\nexport function getPoolPrice(\n  poolStateData: Slot0,\n  params: Pick<\n    PoolStateParams,\n    'isAerodromePool' | 'isAlgebraPool' | 'isAlgebraIntegralPool' | 'isPoolSharkPool'\n  >\n): bigint | null {\n  try {\n    let price: bigint | undefined;\n\n    // Extract price based on AMM type - following the same logic as getPoolInstance\n    if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {\n      // For Algebra pools (non-integral)\n      price = poolStateData?.price;\n    } else if (params.isAlgebraIntegralPool) {\n      // For Algebra Integral pools\n      price = poolStateData?.price;\n    } else if (params.isPoolSharkPool) {\n      // For PoolShark pools - price is stored in a nested structure\n      price = (poolStateData.tick as unknown as { price: bigint })?.price;\n    } else {\n      // For standard Uniswap V3 pools\n      price = poolStateData.sqrtPriceX96;\n    }\n\n    return price || null;\n  } catch (error) {\n    console.error('Error extracting pool price:', error);\n    return null;\n  }\n}\n\n/**\n * Combined method to get both pool state and extract price in one call\n * Convenience method that combines getPoolState and getPoolPrice\n *\n * @param publicClient - The public client for blockchain reads\n * @param params - Parameters specifying the pool and its type\n * @returns Promise resolving to object containing both state and price\n *\n * @example\n * ```typescript\n * const result = await getPoolStateWithPrice(publicClient, {\n *   poolAddress: '0x...',\n *   isAlgebraPool: true\n * });\n *\n * if (result.success && result.data) {\n *   console.log('Pool state:', result.data.state);\n *   console.log('Pool price:', result.data.price);\n * }\n * ```\n */\nexport async function getPoolStateWithPrice(\n  publicClient: PublicClient,\n  params: PoolStateParams\n): Promise<SteerResponse<{ state: Slot0; price: bigint | null }>> {\n  try {\n    const stateResponse = await getPoolState(publicClient, params);\n\n    if (!stateResponse.success || !stateResponse.data) {\n      return {\n        data: null,\n        status: stateResponse.status,\n        success: false,\n        error: stateResponse.error || 'Failed to get pool state',\n      };\n    }\n\n    const price = getPoolPrice(stateResponse.data, params);\n\n    return {\n      data: {\n        state: stateResponse.data,\n        price,\n      },\n      status: 200,\n      success: true,\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to get pool state with price',\n    };\n  }\n}\n","import { Rounding, Token } from '@uniswap/sdk-core';\nimport { Pool as PoolV3 } from '@uniswap/v3-sdk';\nimport { Decimal } from 'decimal.js';\nimport { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { UniswapV3PoolABI } from '../../../const/abis/UniswapPool.js';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport {\n  isAerodromeVault,\n  isAlgebraDirectionProtocol,\n  isAlgebraIntegralProtocol,\n  isAlgebraProtocol,\n  isPoolSharkProtocol,\n} from '../../../const/protocol.js';\nimport { AlgebraVaultDetails, PoolData, Slot0, SteerResponse, VaultDetails } from '../../../types.js';\nimport {\n  getAerodromeSlot0,\n  getGlobalState,\n  getGlobalStateAlgebraIntegral,\n  getGlobalStatePoolShark,\n  getSlot0,\n} from '../utils.js';\nimport { DepositRatioResponse, PoolInstanceParams, VaultDepositParams } from './types.js';\nimport { getProtocolTypeByBeacon } from \"../../../const/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\nexport class VaultDepositClient {\n  constructor(\n    protected readonly publicClient: PublicClient,\n    protected readonly walletClient: WalletClient\n  ) {}\n\n  /**\n   * Deposits tokens into a vault\n   * @param params The deposit parameters\n   */\n  public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      // Calculate min amounts based on slippage\n      const amount0Min =\n        (params.amount0Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n      const amount1Min =\n        (params.amount1Desired * BigInt(Math.floor((1 - params.slippage) * 1000))) / 1000n;\n\n      let hash: Hash;\n\n      // If using Steer Periphery\n      if (params.isSteerPeriphery) {\n        if (!params.chainId) {\n          throw new Error('chainId is required when using Steer Periphery');\n        }\n\n        const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n          params.chainId,\n          'SteerPeriphery'\n        );\n\n        if (!steerPeripheryAddress) {\n          throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n        }\n\n        const { request } = await this.publicClient.simulateContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'deposit',\n          args: [\n            params.vaultAddress,\n            params.amount0Desired,\n            params.amount1Desired,\n            amount0Min,\n            amount1Min,\n            params.to ?? account[0],\n          ],\n          account: account[0],\n        });\n        hash = await this.walletClient.writeContract(request);\n      } else {\n        // Regular vault deposit\n        const { request } = await this.publicClient.simulateContract({\n          address: params.vaultAddress,\n          abi: VAULT_ABI,\n          functionName: 'deposit',\n          args: [\n            params.amount0Desired,\n            params.amount1Desired,\n            amount0Min,\n            amount1Min,\n            params.to ?? account[0],\n          ],\n          account: account[0],\n        });\n        hash = await this.walletClient.writeContract(request);\n      }\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Prepares the transaction data for depositing tokens into a vault without executing it\n   * @param params The deposit parameters\n   */\n  public async prepareDepositTx(params: VaultDepositParams): Promise<\n    SteerResponse<{\n      address: Address;\n      abi: {\n        type: string;\n        inputs: {\n          name: string;\n          internalType: string;\n          type: string;\n        }[];\n        name: string;\n        outputs: {\n          internalType: string;\n          name: string;\n          type: string;\n        }[];\n        stateMutability: string;\n      }[];\n      functionName: string;\n      args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n    }>\n  > {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!params.to) {\n        if (!account[0]) throw new Error('No account found');\n      }\n\n      const amount0Min = 0n;\n      const amount1Min = 0n;\n\n      // If using Steer Periphery\n      if (params.isSteerPeriphery) {\n        if (!params.chainId) {\n          throw new Error('chainId is required when using Steer Periphery');\n        }\n\n        const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n          params.chainId,\n          'SteerPeriphery'\n        );\n\n        if (!steerPeripheryAddress) {\n          throw new Error(`SteerPeriphery address not found for chainId: ${params.chainId}`);\n        }\n\n        // Steer Periphery ABI and parameters\n        return {\n          data: {\n            address: steerPeripheryAddress as Address,\n            abi: [\n              {\n                type: 'function',\n                inputs: [\n                  { name: 'vaultAddress', internalType: 'address', type: 'address' },\n                  { name: 'amount0Desired', internalType: 'uint256', type: 'uint256' },\n                  { name: 'amount1Desired', internalType: 'uint256', type: 'uint256' },\n                  { name: 'amount0Min', internalType: 'uint256', type: 'uint256' },\n                  { name: 'amount1Min', internalType: 'uint256', type: 'uint256' },\n                  { name: 'to', internalType: 'address', type: 'address' },\n                ],\n                name: 'deposit',\n                outputs: [],\n                stateMutability: 'nonpayable',\n              },\n            ],\n            functionName: 'deposit',\n            args: [\n              params.vaultAddress,\n              params.amount0Desired,\n              params.amount1Desired,\n              amount0Min,\n              amount1Min,\n              params.to ?? account[0],\n            ] as const,\n          },\n          status: 200,\n          success: true,\n        };\n      }\n\n      // Regular vault deposit\n      return {\n        data: {\n          address: params.vaultAddress,\n          abi: [\n            {\n              inputs: [\n                {\n                  internalType: 'uint256',\n                  name: 'amount0Desired',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'uint256',\n                  name: 'amount1Desired',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'uint256',\n                  name: 'amount0Min',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'uint256',\n                  name: 'amount1Min',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'address',\n                  name: 'to',\n                  type: 'address',\n                },\n              ],\n              name: 'deposit',\n              outputs: [\n                {\n                  internalType: 'uint256',\n                  name: 'shares',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'uint256',\n                  name: 'amount0Used',\n                  type: 'uint256',\n                },\n                {\n                  internalType: 'uint256',\n                  name: 'amount1Used',\n                  type: 'uint256',\n                },\n              ],\n              stateMutability: 'nonpayable',\n              type: 'function',\n            },\n          ],\n          functionName: 'deposit',\n          args: [\n            params.amount0Desired,\n            params.amount1Desired,\n            amount0Min,\n            amount1Min,\n            params.to ?? account[0],\n          ] as const,\n        },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the deposit ratio for a vault\n   * @param vaultAddress The vault address\n   */\n  public async getDepositRatio(\n    vaultAddress: Address,\n    zeroForOne: boolean\n  ): Promise<SteerResponse<DepositRatioResponse>> {\n    try {\n      // Try to get vault details, first attempt with regular vault\n      let vaultDetails: VaultDetails | AlgebraVaultDetails;\n      let isAlgebraVault = false;\n\n      const chainId = await this.publicClient.getChainId();\n\n      const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n        chainId,\n        'SteerPeriphery'\n      );\n      if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n      try {\n        // First try regular vault\n        vaultDetails = (await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'vaultDetailsByAddress',\n          args: [vaultAddress],\n        })) as VaultDetails;\n      } catch (error) {\n        // If regular vault fails, try Algebra vault\n        vaultDetails = (await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'algebraVaultDetailsByAddress',\n          args: [vaultAddress],\n        })) as AlgebraVaultDetails;\n        isAlgebraVault = true;\n      }\n\n      const token0Balance = vaultDetails.token0Balance;\n      const token1Balance = vaultDetails.token1Balance;\n      const token0Decimals = vaultDetails.token0Decimals;\n      const token1Decimals = vaultDetails.token1Decimals;\n\n      let ratio: string;\n\n      // Case 1: No liquidity in the vault\n      if (token0Balance === 0n && token1Balance === 0n) {\n        // Get pool instance to calculate price\n        const chainId = await this.publicClient.getChainId();\n\n        // Get the pool address\n        const pool = await this.getPool(vaultAddress);\n        if (!pool.data) throw new Error('Failed to retrieve pool for ratio calculation');\n\n        // Determine the protocol\n        const protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n        if (!protocol) throw new Error('Unsupported protocol type');\n        console.log('Protocol detected:', protocol);\n\n        // Get pool instance with the correct protocol type\n        const poolInstanceResponse = await this.getPoolInstance({\n          vaultAddress,\n          chain: { id: chainId },\n          isAerodromePool: isAerodromeVault(protocol),\n          isAlgebraPool: isAlgebraProtocol(protocol),\n          isPoolSharkPool: isPoolSharkProtocol(protocol),\n          isAlgebraIntegralPool: isAlgebraIntegralProtocol(protocol),\n          isAlgebraDirectionPool: isAlgebraDirectionProtocol(protocol),\n        });\n\n        if (!poolInstanceResponse.success || !poolInstanceResponse.data) {\n          throw new Error('Failed to get pool instance for price calculation');\n        }\n\n        const poolInstance = poolInstanceResponse.data;\n        // Get price based on zeroForOne\n        const price = zeroForOne\n          ? poolInstance.priceOf(poolInstance.token0)\n          : poolInstance.priceOf(poolInstance.token0).invert();\n\n        // Convert price to string using Decimal for maximum precision\n        ratio = price.toSignificant(undefined, undefined, Rounding.ROUND_DOWN);\n      }\n      // Case 2: Vault has liquidity\n      else {\n        // Convert bigint values to Decimal instances for precise calculation\n        // Convert bigints to strings first to avoid type errors\n        const token0Bal = new Decimal(token0Balance.toString());\n        const token1Bal = new Decimal(token1Balance.toString());\n        const token0Dec = new Decimal(10).pow(Number(token0Decimals));\n        const token1Dec = new Decimal(10).pow(Number(token1Decimals));\n\n        // Calculate adjusted balances\n        const token0Adjusted = token0Bal.div(token0Dec);\n        const token1Adjusted = token1Bal.div(token1Dec);\n\n        // Calculate ratio based on token balances\n        // If zeroForOne is true: ratio = token1/token0\n        // If zeroForOne is false: ratio = token0/token1\n        ratio = zeroForOne\n          ? token1Adjusted.div(token0Adjusted).toString() // token1/token0 ratio\n          : token0Adjusted.div(token1Adjusted).toString(); // token0/token1 ratio\n      }\n\n      return {\n        data: {\n          ratio,\n          token0Balance,\n          token1Balance,\n          token0Decimals,\n          token1Decimals,\n          vaultDetails,\n          isAlgebraVault,\n        },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the pool address for a vault\n   * @param vaultAddress The vault address\n   */\n  private async getPool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n    try {\n      const pool = (await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'pool',\n      })) as Address;\n\n      return {\n        data: pool,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets a pool instance for a vault\n   * @param params The pool instance parameters\n   */\n  public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n    console.log('Fetching pool instance...');\n\n    try {\n      const poolData = await this.preparePoolData(params.vaultAddress);\n      console.log('Pool data fetched:', poolData);\n\n      if (!poolData.success || !poolData.data) {\n        throw new Error('Failed to fetch pool data');\n      }\n\n      let slot0Response: SteerResponse<Slot0>;\n\n      // Handle different protocol types\n      if (params.isAlgebraIntegralPool) {\n        // For Algebra Integral pools\n        slot0Response = await getGlobalStateAlgebraIntegral(\n          this.publicClient,\n          poolData.data.id,\n          params.isAlgebraDirectionPool\n        );\n      } else if (params.isPoolSharkPool) {\n        // For PoolShark pools\n        const poolSharkResponse = await getGlobalStatePoolShark(\n          this.publicClient,\n          poolData.data.id\n        );\n        if (poolSharkResponse.success && poolSharkResponse.data) {\n          slot0Response = {\n            success: true,\n            status: 200,\n            data: {\n              sqrtPriceX96: poolSharkResponse.data.pool.price,\n              tick: poolSharkResponse.data.pool.tickAtPrice,\n              observationIndex: 0,\n              observationCardinality: 0,\n              observationCardinalityNext: 0,\n              feeProtocol: 0,\n              unlocked: poolSharkResponse.data.unlocked === 1,\n            },\n          };\n        } else {\n          slot0Response = {\n            data: null,\n            status: poolSharkResponse.status,\n            success: false,\n            error: poolSharkResponse.error,\n          };\n        }\n      } else if (params.isAlgebraPool) {\n        // For Algebra pools\n        slot0Response = await getGlobalState(\n          this.publicClient,\n          poolData.data.id,\n          params.isAlgebraDirectionPool\n        );\n      } else if (params.isAerodromePool) {\n        // For Aerodrome V3 pools\n        slot0Response = await getAerodromeSlot0(this.publicClient, poolData.data.id);\n      } else {\n        // For standard Uniswap V3 pools\n        slot0Response = await getSlot0(this.publicClient, poolData.data.id);\n      }\n\n      if (!slot0Response.success || !slot0Response.data) {\n        throw new Error('Failed to read pool state');\n      }\n\n      const slot0 = slot0Response.data;\n\n      const token0 = new Token(\n        params.chain.id,\n        poolData.data.token0.id,\n        Number(poolData.data.token0.decimals),\n        poolData.data.token0.symbol,\n        poolData.data.token0.name\n      );\n\n      const token1 = new Token(\n        params.chain.id,\n        poolData.data.token1.id,\n        Number(poolData.data.token1.decimals),\n        poolData.data.token1.symbol,\n        poolData.data.token1.name\n      );\n\n      // Get liquidity\n      const liquidity = await this.getPoolLiquidity(poolData.data.id);\n      if (!liquidity.success || !liquidity.data) {\n        throw new Error('Failed to fetch pool liquidity');\n      }\n\n      let price: bigint | undefined;\n\n      if (params.isAlgebraPool && !params.isAlgebraIntegralPool) {\n        price = slot0Response?.data?.price;\n      } else if (params.isAlgebraIntegralPool) {\n        price = slot0Response?.data?.price;\n      } else if (params.isPoolSharkPool) {\n        price = (slot0Response?.data?.tick as unknown as { price: bigint })?.price;\n      } else {\n        price = slot0Response?.data?.sqrtPriceX96;\n      }\n\n      if (!price) {\n        throw new Error('Failed to get pool price');\n      }\n\n      return {\n        data: new PoolV3(\n          token0,\n          token1,\n          poolData.data.feeTier,\n          price.toString(),\n          liquidity.data.toString(),\n          slot0.tick\n        ),\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error('Error creating pool instance:', error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the pool liquidity\n   * @param poolAddress The pool address\n   */\n  private async getPoolLiquidity(poolAddress: Address): Promise<SteerResponse<bigint>> {\n    try {\n      const liquidity = (await this.publicClient.readContract({\n        address: poolAddress,\n        abi: UniswapV3PoolABI,\n        functionName: 'liquidity',\n      })) as bigint;\n\n      return {\n        data: liquidity,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the corresponding token amount based on the provided token amount and ratio\n   * @param vaultAddress The vault address\n   * @param amount The amount of token to calculate the corresponding amount for\n   * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n   */\n  public async getCorrespondingTokenAmount(\n    vaultAddress: Address,\n    amount: bigint,\n    zeroForOne: boolean\n  ): Promise<SteerResponse<bigint>> {\n    try {\n      // Get the deposit ratio for the vault\n      const ratioResponse = await this.getDepositRatio(vaultAddress, zeroForOne);\n      if (!ratioResponse.success || !ratioResponse.data) {\n        throw new Error('Failed to get deposit ratio');\n      }\n\n      const { ratio, token0Decimals, token1Decimals } = ratioResponse.data;\n\n      // Calculate the decimal adjustment based on token decimals\n      const decimalDiff = zeroForOne\n        ? token1Decimals - token0Decimals\n        : token0Decimals - token1Decimals;\n\n      // Convert all values to Decimal for precise calculation\n      const amountDecimal = new Decimal(amount.toString());\n      const ratioDecimal = new Decimal(ratio);\n      const adjustmentDecimal = new Decimal(10).pow(Number(decimalDiff));\n\n      // Perform calculation using Decimal.js\n      const result = amountDecimal.times(ratioDecimal).times(adjustmentDecimal);\n\n      // Convert result back to bigint, rounding down to nearest integer\n      // Use toFixed(0) to avoid scientific notation which BigInt cannot parse\n      const correspondingAmount = BigInt(result.floor().toFixed(0));\n\n      return {\n        data: correspondingAmount,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Prepares pool data from vault details\n   * @param vaultAddress The vault address\n   */\n  private async preparePoolData(vaultAddress: Address): Promise<SteerResponse<PoolData>> {\n    try {\n      // Try to get vault details, first attempt with regular vault\n      let vaultDetails: VaultDetails | AlgebraVaultDetails;\n\n      const chainId = await this.publicClient.getChainId();\n\n      const steerPeripheryAddress = getContractAddressByChainIdAndContractName(\n        chainId,\n        'SteerPeriphery'\n      );\n      if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n      try {\n        // First try regular vault\n        vaultDetails = (await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'vaultDetailsByAddress',\n          args: [vaultAddress],\n        })) as VaultDetails;\n      } catch (error) {\n        // If regular vault fails, try Algebra vault\n        vaultDetails = (await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'algebraVaultDetailsByAddress',\n          args: [vaultAddress],\n        })) as AlgebraVaultDetails;\n      }\n\n      // Get the pool contract to fetch tick spacing\n      const pool = await this.getPool(vaultAddress);\n      if (!pool.data) throw new Error('Failed to retrieve pool');\n\n      // Get tick spacing\n      const tickSpacing = (await this.publicClient.readContract({\n        address: pool.data,\n        abi: UniswapV3PoolABI,\n        functionName: 'tickSpacing',\n      })) as number;\n\n      const poolData: PoolData = {\n        id: pool.data,\n        token0: {\n          id: vaultDetails.token0,\n          decimals: vaultDetails.token0Decimals.toString(),\n          symbol: vaultDetails.token0Symbol,\n          name: vaultDetails.token0Symbol,\n        },\n        token1: {\n          id: vaultDetails.token1,\n          decimals: vaultDetails.token1Decimals.toString(),\n          symbol: vaultDetails.token1Symbol,\n          name: vaultDetails.token1Symbol,\n        },\n        chainId: await this.publicClient.getChainId(),\n        feeTier: 3000, // Fixed fee tier as specified\n        tickSpacing,\n      };\n\n      return {\n        data: poolData,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n}\n","import type { PublicClient } from 'viem';\nimport { singleTokenDepositAbi } from '../../../const/abis/singleTokenDeposit.js';\nimport { SteerResponse } from '../../../types.js';\nimport type { CalculateSwapAmountParams, SwapAmountResponse } from './types.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/index.js';\n\n/**\n * Calculates the amount that needs to be swapped for a single-asset deposit\n * This function calls the smart contract's calculateSwapAmount function\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap amount calculation\n * @returns Promise resolving to swap amount and current sqrt price\n * \n * @example\n * ```typescript\n * const result = await calculateSwapAmount(publicClient, {\n *   depositAmount: parseEther('100'),\n *   isToken0: true,\n *   vault: '0x...',\n *   pool: '0x...',\n *   ammType: AMMType.UniswapV3,\n *   singleAssetDepositContract: '0x...'\n * });\n * \n * if (result.success) {\n *   console.log('Swap amount:', result.data.swapAmount);\n *   console.log('Current sqrt price:', result.data.sqrtPrice);\n * }\n * ```\n */\nexport async function calculateSwapAmount(\n  publicClient: PublicClient,\n  params: CalculateSwapAmountParams\n): Promise<SteerResponse<SwapAmountResponse>> {\n  try {\n    // Call the smart contract's calculateSwapAmount function\n\n    const chainId = await publicClient.getChainId();\n    const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(chainId, 'SingleAssetDeposit')\n\n    const result = await publicClient.readContract({\n      address: singleAssentDeposit,\n      abi: singleTokenDepositAbi,\n      functionName: 'calculateSwapAmount',\n      args: [\n        params.depositAmount,\n        params.isToken0,\n        params.vault,\n        params.pool,\n        params.ammType\n      ]\n    });\n\n    // The contract returns [swapAmount, sqrtPrice]\n    const [swapAmount, sqrtPrice] = result as [bigint, bigint];\n\n    return {\n      data: {\n        swapAmount,\n        sqrtPrice\n      },\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to calculate swap amount'\n    };\n  }\n} ","import { Decimal } from 'decimal.js';\nimport type { PublicClient } from 'viem';\nimport { erc20Abi } from '../../../const/abis/erc20.js';\nimport { SteerResponse } from '../../../types.js';\nimport { getPoolPrice, getPoolState, getPoolStateWithPrice } from '../utils.js';\nimport type { CalculateLimitPriceParams, PoolSlot0 } from './types.js';\nimport { AMMType } from './types.js';\n\n/**\n * Configure Decimal.js for high precision calculations\n */\nDecimal.config({ \n  precision: 50, // High precision for financial calculations\n  rounding: Decimal.ROUND_DOWN // Conservative rounding for safety\n});\n\n/**\n * Constants matching the Solidity contract using Decimal.js\n */\nconst BASIS_POINTS = new Decimal(10000);\nconst Q96 = new Decimal(2).pow(96);\nconst Q192 = Q96.mul(Q96);\nconst Q128 = new Decimal(2).pow(128);\nconst Q64 = new Decimal(2).pow(64);\nconst UINT128_MAX = new Decimal(2).pow(128).sub(1);\n\n/**\n * High-precision multiplication and division using Decimal.js\n * Equivalent to Solidity's FullMath.mulDiv\n */\nfunction mulDiv(a: Decimal, b: Decimal, denominator: Decimal): Decimal {\n  return a.mul(b).div(denominator);\n}\n\n/**\n * High-precision square root using Decimal.js\n */\nfunction sqrt(value: Decimal): Decimal {\n  if (value.isZero()) return new Decimal(0);\n  return value.sqrt();\n}\n\n/**\n * Convert BigInt to Decimal for calculations\n */\nexport function bigintToDecimal(value: bigint): Decimal {\n  return new Decimal(value.toString());\n}\n\n/**\n * Convert Decimal back to BigInt for return values\n * Uses toFixed(0) to get full decimal representation without scientific notation\n */\nexport function decimalToBigint(value: Decimal): bigint {\n  // Use toFixed(0) to get full integer representation without scientific notation\n  const stringValue = value.floor().toFixed(0);\n  return BigInt(stringValue);\n}\n\n/**\n * Get quote from sqrtRatioX96 using high-precision Decimal arithmetic\n * Equivalent to Solidity's getQuoteFromSqrtRatioX96\n * @param sqrtRatioX96 The sqrt ratio for which to compute the quote\n * @param baseAmount Amount of base token\n * @param baseToken Address of base token\n * @param quoteToken Address of quote token\n * @returns The quote amount as Decimal\n */\nexport function getQuoteFromSqrtRatioX96(\n  sqrtRatioX96: Decimal,\n  baseAmount: Decimal,\n  baseToken: `0x${string}`,\n  quoteToken: `0x${string}`\n): Decimal {\n  // Calculate quoteAmount with better precision if it doesn't overflow when multiplied by itself\n  if (sqrtRatioX96.lte(UINT128_MAX)) {\n    const ratioX192 = sqrtRatioX96.mul(sqrtRatioX96);\n    return baseToken < quoteToken\n      ? mulDiv(ratioX192, baseAmount, Q192)\n      : mulDiv(Q192, baseAmount, ratioX192);\n  } else {\n    const ratioX128 = mulDiv(sqrtRatioX96, sqrtRatioX96, Q64);\n    return baseToken < quoteToken\n      ? mulDiv(ratioX128, baseAmount, Q128)\n      : mulDiv(Q128, baseAmount, ratioX128);\n  }\n}\n\n/**\n * Applies slippage protection to sqrtPriceX96 based on swap direction using high-precision arithmetic\n * Equivalent to Solidity's applySlippageProtection function\n * @param sqrtPriceX96 The current square root price\n * @param slippageBP Slippage protection in basis points (e.g., 300 = 3%)\n * @param zeroForOne True if swapping token0 for token1\n * @param token0 Address of token0\n * @param token1 Address of token1\n * @param publicClient Viem public client for reading token decimals\n * @returns The price limit with slippage protection as Decimal\n */\nasync function applySlippageProtection(\n  sqrtPriceX96: Decimal,\n  slippageBP: Decimal,\n  zeroForOne: boolean,\n  token0: `0x${string}`,\n  token1: `0x${string}`,\n  publicClient: PublicClient\n): Promise<Decimal> {\n  // Get current price: how much token1 per 1 unit of token0\n  const decimals0 = await publicClient.readContract({\n    address: token0,\n    abi: erc20Abi,\n    functionName: 'decimals'\n  }) as number;\n  \n  const baseAmount = new Decimal(10).pow(decimals0);\n  \n  const currentQuote = getQuoteFromSqrtRatioX96(\n    sqrtPriceX96,\n    baseAmount,\n    token0,\n    token1\n  );\n  \n  let adjustedQuote: Decimal;\n  \n  if (zeroForOne) {\n    // Swapping token0 for token1\n    // We want to ensure we don't get less than expected token1\n    // So we set a minimum acceptable rate (decrease the quote)\n    adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.sub(slippageBP), BASIS_POINTS);\n  } else {\n    // Swapping token1 for token0  \n    // We want to ensure we don't pay more than expected token1\n    // So we set a maximum acceptable rate (increase the quote)\n    adjustedQuote = mulDiv(currentQuote, BASIS_POINTS.add(slippageBP), BASIS_POINTS);\n  }\n  \n  if (adjustedQuote.isZero()) {\n    throw new Error('AdjustedQuoteCalculationFailed');\n  }\n  \n  // Convert adjusted quote back to sqrtPriceX96\n  // This is the reverse of getQuoteFromSqrtRatioX96\n  let adjustedRatioX192: Decimal;\n  if (token0 < token1) {\n    // ratioX192 = (adjustedQuote * 2^192) / baseAmount\n    adjustedRatioX192 = mulDiv(adjustedQuote, Q192, baseAmount);\n  } else {\n    // ratioX192 = (baseAmount * 2^192) / adjustedQuote  \n    adjustedRatioX192 = mulDiv(baseAmount, Q192, adjustedQuote);\n  }\n  \n  return sqrt(adjustedRatioX192);\n}\n\n/**\n * Calculates the sqrt price limit for slippage protection during swaps using high-precision arithmetic\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for limit price calculation\n * @returns Promise resolving to the calculated sqrt price limit\n * \n * @example\n * ```typescript\n * const result = await calculateLimitPrice(publicClient, {\n *   pool: '0x...',\n *   slippageBP: 500, // 5% slippage\n *   zeroForOne: true,\n *   ammType: AMMType.UniswapV3,\n *   token0: '0x...',\n *   token1: '0x...'\n * });\n * \n * if (result.success) {\n *   console.log('Sqrt price limit:', result.data);\n * }\n * ```\n */\nexport async function calculateLimitPrice(\n  publicClient: PublicClient,\n  params: CalculateLimitPriceParams\n): Promise<SteerResponse<bigint>> {\n  try {\n    // Get current pool state from slot0\n    const slot0Data = await getPoolState(\n      publicClient,\n      {\n        poolAddress: params.pool,\n        isAerodromePool: params.ammType === AMMType.Aerodrome,\n        isAlgebraPool: params.ammType === AMMType.Algebra,\n        isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n        isAlgebraDirectionPool: params.ammType === AMMType.AlgebraDirectional,\n        isPoolSharkPool: false // PoolShark not defined in AMMType enum\n      }\n    );\n\n    if (!slot0Data.success || !slot0Data.data) {\n      throw new Error(slot0Data.error || 'Failed to get pool state');\n    }\n\n    const sqrtPriceX96BigInt = getPoolPrice(slot0Data.data, {\n      isAerodromePool: params.ammType === AMMType.Aerodrome,\n      isAlgebraPool: params.ammType === AMMType.Algebra,\n      isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n      isPoolSharkPool: false // PoolShark not defined in AMMType enum\n    });\n\n    if (!sqrtPriceX96BigInt) {\n      throw new Error('Failed to extract pool price');\n    }\n    \n    // Convert to Decimal for high-precision calculations\n    const sqrtPriceX96 = bigintToDecimal(sqrtPriceX96BigInt);\n    const slippageBP = new Decimal(params.slippageBP);\n\n    // Apply slippage protection using high-precision arithmetic\n    const limitSqrtPriceX96Decimal = await applySlippageProtection(\n      sqrtPriceX96,\n      slippageBP,\n      params.zeroForOne,\n      params.token0,\n      params.token1,\n      publicClient\n    );\n\n    return {\n      data: decimalToBigint(limitSqrtPriceX96Decimal),\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to calculate limit price'\n    };\n  }\n}\n\n/**\n * Gets the current pool state from slot0\n * Currently supports UniswapV3 only\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param poolAddress - Address of the pool\n * @param ammType - Type of AMM\n * @returns Promise resolving to the pool slot0 data\n */\nexport async function getPoolSlot0(\n  publicClient: PublicClient,\n  poolAddress: `0x${string}`,\n  ammType: AMMType\n): Promise<SteerResponse<PoolSlot0>> {\n  try {\n    const poolState = await getPoolStateWithPrice(publicClient, {\n      poolAddress,\n      isAerodromePool: ammType === AMMType.Aerodrome,\n      isAlgebraPool: ammType === AMMType.Algebra,\n      isAlgebraIntegralPool: ammType === AMMType.AlgebraIntegral,\n      isAlgebraDirectionPool: ammType === AMMType.AlgebraDirectional,\n      isPoolSharkPool: false // PoolShark not defined in AMMType enum\n    });\n\n    if (!poolState.success || !poolState.data) {\n      throw new Error(poolState.error || 'Failed to get pool state');\n    }\n\n    return {\n      data: poolState.data.state as PoolSlot0,\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to get pool slot0 data'\n    };\n  }\n}\n","import { Decimal } from 'decimal.js';\nimport type { Address, PublicClient } from 'viem';\nimport { decodeFunctionResult, encodeFunctionData } from 'viem';\nimport { getNetworkByChainId, getProtcolTypeByAmmType, Protocol, isAlgebraIntegralProtocol } from '../../../const/index.js';\nimport { QuoterV2Factory } from '../../../const/quoter.js';\nimport { SteerResponse } from '../../../types.js';\nimport { getPoolPrice } from '../utils.js';\nimport { bigintToDecimal, decimalToBigint, getPoolSlot0, getQuoteFromSqrtRatioX96 } from './calculateLimitPrice.js';\nimport type { PoolSlot0, SimulateSwapParams, SwapSimulationResponse } from './types.js';\nimport { AMMType } from './types.js';\n\n/**\n * Simulates a swap to get the expected output amounts without executing the swap\n * Uses Uniswap V3 Quoter contract for accurate simulation\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap simulation\n * @param chainId - Chain ID to get the appropriate Quoter address\n * @returns Promise resolving to the simulated swap results\n * \n * @example\n * ```typescript\n * const result = await simulateSwap(publicClient, {\n *   pool: '0x...',\n *   recipient: '0x...',\n *   zeroForOne: true,\n *   amountSpecified: parseEther('10'),\n *   sqrtPriceLimitX96: limitPrice,\n *   ammType: AMMType.UniswapV3,\n *   tokenIn: '0x...',\n *   tokenOut: '0x...',\n *   fee: 3000\n * }, 137); // Polygon chain ID\n * \n * if (result.success) {\n *   console.log('Amount out:', result.data.amountOut);\n * }\n * ```\n */\nexport async function simulateSwap(\n  publicClient: PublicClient,\n  params: SimulateSwapParams,\n  chainId: number\n): Promise<SteerResponse<SwapSimulationResponse>> {\n  try {\n    // For now, only handle UniswapV3 - other AMMs can be added later\n\n    // Get the appropriate Quoter contract address\n\n    const networkConfig = getNetworkByChainId(chainId);\n\n    if (!networkConfig) {\n      throw Error('Network config not found')\n    }\n     \n    const protocol = params.protocol || getProtcolTypeByAmmType(params.ammType);\n\n    const quoterFactory = new QuoterV2Factory(networkConfig);\n\n    const quoterABI = quoterFactory.getQuoterAbi(protocol);\n\n    const quoteParams = quoterFactory.getQuoteParams(protocol, {\n      tokenIn: params.tokenIn,\n      tokenOut: params.tokenOut,\n      fee: params.fee,\n      tickSpacing: params.tickSpacing,\n      amountIn: params.amountSpecified,\n      sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n      limitSqrtPrice: params.sqrtPriceLimitX96,\n    })\n\n    const quoterAddress = quoterFactory.getQuoterV2Address(\n      protocol\n    )\n    // Use Quoter's quoteExactInputSingle for simulation\n    const result = await publicClient.call({\n      to: quoterAddress as Address,\n      data: encodeFunctionData({\n        abi: quoterABI,\n        functionName: 'quoteExactInputSingle',\n        //@ts-expect-error Parameters are dynamic in nature and very based on abi types\n        args: [{\n          ...quoteParams\n        }]\n      })\n    });\n\n    if (!result.data) {\n      throw new Error('No data returned from quoter simulation');\n    }\n\n    // Decode the result - Different quoters return different tuple structures:\n    // - Standard Uniswap/QuickSwap: [amountOut, sqrtPriceX96After, initializedTicksCrossed, gasEstimate]\n    // - AlgebraIntegral: [amountOut, amountIn, sqrtPriceX96After, initializedTicksCrossed, gasEstimate, fee]\n    const decodedResult = decodeFunctionResult({\n      abi: quoterABI,\n      functionName: 'quoteExactInputSingle',\n      data: result.data\n    });\n\n    // Extract values based on protocol type\n    let amountOut: bigint;\n    let sqrtPriceX96After: bigint;\n    \n    // Check if this is an AlgebraIntegral protocol (which has amountIn as second return value)\n    if (protocol && isAlgebraIntegralProtocol(protocol)) {\n      // AlgebraIntegral format: [amountOut, amountIn, sqrtPriceX96After, ...]\n      const [out, , priceAfter] = decodedResult as readonly [bigint, bigint, bigint, number, bigint, number];\n      amountOut = out;\n      sqrtPriceX96After = priceAfter;\n    } else {\n      // Standard format: [amountOut, sqrtPriceX96After, ...]\n      const [out, priceAfter] = decodedResult as readonly [bigint, bigint, number, bigint];\n      amountOut = out;\n      sqrtPriceX96After = priceAfter;\n    }\n\n    // Convert to the expected SwapSimulationResponse format\n    // For exact input swaps, we know the input amount and get the output amount\n    let amount0: bigint, amount1: bigint;\n    \n    if (params.zeroForOne) {\n      // Swapping token0 for token1\n      amount0 = -params.amountSpecified; // negative because we're giving token0\n      amount1 = amountOut; // positive because we're receiving token1\n    } else {\n      // Swapping token1 for token0\n      amount0 = amountOut; // positive because we're receiving token0\n      amount1 = -params.amountSpecified; // negative because we're giving token1\n    }\n\n    return {\n      data: {\n        amount0,\n        amount1,\n        sqrtPriceX96After\n      },\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to simulate swap'\n    };\n  }\n}\n\n/**\n * Determines the swap direction based on the token being deposited\n * \n * @param isToken0 - true if depositing token0, false if token1\n * @returns true if swapping token0 → token1, false otherwise\n */\nexport function determineSwapDirection(isToken0: boolean): boolean {\n  // If depositing token0, we need to swap some token0 to token1\n  // If depositing token1, we need to swap some token1 to token0\n  return isToken0;\n}\n\n/**\n * Validates swap simulation parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\nexport function validateSwapParams(params: SimulateSwapParams): void {\n  if (!params.pool || params.pool === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid pool address');\n  }\n  \n  if (!params.recipient || params.recipient === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid recipient address');\n  }\n  \n  if (params.amountSpecified <= 0n) {\n    throw new Error('Amount specified must be greater than 0');\n  }\n  \n  if (params.sqrtPriceLimitX96 <= 0n) {\n    throw new Error('Sqrt price limit must be greater than 0');\n  }\n\n  if (!params.tokenIn || params.tokenIn === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid tokenIn address');\n  }\n\n  if (!params.tokenOut || params.tokenOut === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid tokenOut address');\n  }\n\n  if (params.fee <= 0) {\n    throw new Error('Pool fee must be greater than 0');\n  }\n} \n\n/**\n * Parameters for swap with slippage analysis\n */\nexport interface SwapWithSlippageParams {\n  /** Address of the pool */\n  poolAddress: string;\n  /** Address that will receive the swap output (or address(this) for simulation) */\n  recipient: string;\n  /** true if swapping token0 → token1, else false */\n  zeroForOne: boolean;\n  /** Amount to swap */\n  amountSpecified: bigint;\n  /** Slippage-adjusted limit price */\n  sqrtPriceLimitX96: bigint;\n  /** AMM type */\n  ammType: AMMType;\n  /** Input token address (required for Quoter) */\n  tokenIn: string;\n  /** Output token address (required for Quoter) */\n  tokenOut: string;\n  /** Pool fee (required for Quoter) */\n  fee: number;\n  /** Quoter contract address (optional - will use default if not provided) */\n  quoterAddress?: string;\n  /** Protocol */\n  protocol?: Protocol | null;\n}\n\n/**\n * Response from swap simulation with slippage analysis\n */\nexport interface SwapWithSlippageResponse {\n  /** Current pool slot0 data */\n  currentSlot0: PoolSlot0;\n  /** Swap simulation results */\n  swapSimulation: SwapSimulationResponse;\n  /** Price slippage percentage (positive means price moved unfavorably) */\n  priceSlippagePercent: string;\n  /** Current price (derived from sqrtPriceX96) */\n  currentPrice: bigint;\n  /** Price after swap (derived from sqrtPriceX96After) */\n  priceAfter: bigint;\n}\n\n/**\n * Simulates a swap with slippage analysis by first getting current pool state,\n * then simulating the swap and calculating price impact\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for swap simulation with slippage analysis\n * @param chainId - Chain ID to get the appropriate Quoter address\n * @returns Promise resolving to swap results with slippage analysis\n * \n * @example\n * ```typescript\n * const result = await simulateSwapWithSlippage(publicClient, {\n *   poolAddress: '0x...',\n *   recipient: '0x...',\n *   zeroForOne: true,\n *   amountSpecified: parseEther('10'),\n *   sqrtPriceLimitX96: limitPrice,\n *   ammType: AMMType.UniswapV3,\n *   tokenIn: '0x...',\n *   tokenOut: '0x...',\n *   fee: 3000\n * }, 137); // Polygon chain ID\n * \n * if (result.success) {\n *   console.log('Price slippage:', result.data.priceSlippagePercent, '%');\n *   console.log('Current price:', result.data.currentPrice);\n *   console.log('Price after swap:', result.data.priceAfter);\n * }\n * ```\n */\nexport async function simulateSwapWithSlippage(\n  publicClient: PublicClient,\n  params: SwapWithSlippageParams,\n  chainId: number\n): Promise<SteerResponse<SwapWithSlippageResponse>> {\n  try {\n    // Validate params\n    validateSwapWithSlippageParams(params);\n\n    // Step 1: Get current pool state from slot0\n\n    const slot0Result = await getPoolSlot0(\n      publicClient,\n      params.poolAddress as `0x${string}`,\n      params.ammType\n    )\n\n    if (!slot0Result.data) {\n      throw new Error('Failed to get pool slot0 data');\n    }\n\n    // Decode slot0 result\n    const currentSlot0: PoolSlot0 = {\n      sqrtPriceX96: getPoolPrice(slot0Result.data, {\n        isAlgebraPool: params.ammType === AMMType.Algebra,\n        isAlgebraIntegralPool: params.ammType === AMMType.AlgebraIntegral,\n        isPoolSharkPool: false // PoolShark not defined in AMMType enum\n      }) || BigInt(0),\n      tick: slot0Result.data.tick,\n      observationIndex: slot0Result.data.observationIndex,\n      observationCardinality: slot0Result.data.observationCardinality,\n      observationCardinalityNext: slot0Result.data.observationCardinalityNext,\n      feeProtocol: slot0Result.data.feeProtocol,\n      unlocked: slot0Result.data.unlocked\n    };\n\n    const tickSpacing = await publicClient.readContract({\n      abi: [  {\n        \"inputs\": [],\n        \"name\": \"tickSpacing\",\n        \"outputs\": [\n          {\n            \"internalType\": \"int24\",\n            \"name\": \"\",\n            \"type\": \"int24\"\n          }\n        ],\n        \"stateMutability\": \"view\",\n        \"type\": \"function\"\n      },],\n      functionName: 'tickSpacing',\n      address: params.poolAddress as `0x${string}`,\n    })\n\n    // Step 2: Simulate the swap using existing function\n    const swapParams: SimulateSwapParams = {\n      pool: params.poolAddress as `0x${string}`,\n      recipient: params.recipient as `0x${string}`,\n      zeroForOne: params.zeroForOne,\n      amountSpecified: params.amountSpecified,\n      sqrtPriceLimitX96: params.sqrtPriceLimitX96,\n      ammType: params.ammType,\n      tokenIn: params.tokenIn as `0x${string}`,\n      tokenOut: params.tokenOut as `0x${string}`,\n      fee: params.fee,\n      tickSpacing: tickSpacing,\n      quoterAddress: params.quoterAddress as `0x${string}` | undefined,\n      protocol: params.protocol\n    };\n\n    const swapResult = await simulateSwap(publicClient, swapParams, chainId);\n\n    if (!swapResult.success || !swapResult.data) {\n      throw new Error(swapResult.error || 'Swap simulation failed');\n    }\n\n    // Step 3: Calculate price slippage\n    const currentPrice = getQuoteFromSqrtRatioX96(\n      bigintToDecimal(currentSlot0.sqrtPriceX96),\n      bigintToDecimal(10n**18n),\n      params.tokenIn as `0x${string}`,\n      params.tokenOut as `0x${string}`\n    );\n    const priceAfter = getQuoteFromSqrtRatioX96(\n      bigintToDecimal(swapResult.data.sqrtPriceX96After),\n      bigintToDecimal(10n**18n),\n      params.tokenIn as `0x${string}`,\n      params.tokenOut as `0x${string}`\n    );\n    \n    // Calculate slippage percentage\n    // Positive slippage means unfavorable price movement\n    const priceSlippagePercent = calculatePriceSlippage(\n      currentPrice,\n      priceAfter,\n      params.zeroForOne\n    );\n\n    return {\n      data: {\n        currentSlot0,\n        swapSimulation: swapResult.data,\n        priceSlippagePercent: priceSlippagePercent.toFixed(5),\n        currentPrice: decimalToBigint(currentPrice),\n        priceAfter: decimalToBigint(priceAfter)\n      },\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to simulate swap with slippage'\n    };\n  }\n}\n\n/**\n * Calculates price slippage percentage using Decimal.js\n * \n * @param priceBefore - Price before the swap (Decimal)\n * @param priceAfter - Price after the swap (Decimal)\n * @param zeroForOne - Swap direction (true if token0 → token1)\n * @returns Slippage percentage (positive means unfavorable movement)\n */\nfunction calculatePriceSlippage(\n  priceBefore: Decimal,\n  priceAfter: Decimal,\n  zeroForOne: boolean\n): Decimal {\n  if (priceBefore.isZero()) {\n    throw new Error('Price before cannot be zero');\n  }\n\n  const priceChange = priceAfter.minus(priceBefore).dividedBy(priceBefore).times(100);\n  \n  // For zeroForOne swaps (selling token0), favorable movement is price going down\n  // For oneForZero swaps (selling token1), favorable movement is price going up\n  // We return positive values for unfavorable movement (slippage)\n  return zeroForOne ? priceChange : priceChange.negated();\n}\n\n/**\n * Validates swap with slippage parameters\n * \n * @param params - Parameters to validate\n * @throws Error if parameters are invalid\n */\nfunction validateSwapWithSlippageParams(params: SwapWithSlippageParams): void {\n  if (!params.poolAddress || params.poolAddress === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid pool address');\n  }\n  \n  if (!params.recipient || params.recipient === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid recipient address');\n  }\n  \n  if (params.amountSpecified <= 0n) {\n    throw new Error('Amount specified must be greater than 0');\n  }\n  \n  if (params.sqrtPriceLimitX96 <= 0n) {\n    throw new Error('Sqrt price limit must be greater than 0');\n  }\n\n  if (!params.tokenIn || params.tokenIn === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid tokenIn address');\n  }\n\n  if (!params.tokenOut || params.tokenOut === '0x0000000000000000000000000000000000000000') {\n    throw new Error('Invalid tokenOut address');\n  }\n\n  if (params.fee <= 0) {\n    throw new Error('Pool fee must be greater than 0');\n  }\n} ","import type { Address, PublicClient } from 'viem';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { SteerResponse } from '../../../types.js';\nimport type { EstimateLpTokensParams, LpTokenEstimationResponse } from './types.js';\n\n// Use the vault ABI for reading vault state\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n/**\n * Estimates the amount of LP tokens that will be received based on the final token amounts\n * This calculation follows the Solidity getShares implementation from the vault contract\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param params - Parameters for LP token estimation\n * @returns Promise resolving to the estimated LP tokens and final amounts\n * \n * @example\n * ```typescript\n * const result = await estimateLpTokens(publicClient, {\n *   vault: '0x...',\n *   originalAssets: parseEther('100'),\n *   swapAmount: parseEther('50'),\n *   swapResult: { amount0: -parseEther('50'), amount1: parseEther('150') },\n *   isToken0: true\n * });\n * \n * if (result.success) {\n *   console.log('Estimated LP tokens:', result.data.lpTokens);\n *   console.log('Final amount0:', result.data.finalAmount0);\n *   console.log('Final amount1:', result.data.finalAmount1);\n * }\n * ```\n */\nexport async function estimateLpTokens(\n  publicClient: PublicClient,\n  params: EstimateLpTokensParams\n): Promise<SteerResponse<LpTokenEstimationResponse>> {\n  try {\n    // Calculate final amounts based on original deposit and swap results\n    const finalAmount0 = params.isToken0 \n      ? params.originalAssets - params.swapAmount + (params.swapResult.amount0 < 0n ? -params.swapResult.amount0 : params.swapResult.amount0)\n      : (params.swapResult.amount0 < 0n ? -params.swapResult.amount0 : params.swapResult.amount0);\n      \n    const finalAmount1 = params.isToken0\n      ? (params.swapResult.amount1 < 0n ? -params.swapResult.amount1 : params.swapResult.amount1)\n      : params.originalAssets - params.swapAmount + (params.swapResult.amount1 < 0n ? -params.swapResult.amount1 : params.swapResult.amount1);\n\n    // Get vault reserves and total supply\n    const [totalSupply, tokenBalances] = await Promise.all([\n      publicClient.readContract({\n        address: params.vault,\n        abi: [ {\n          \"inputs\": [],\n          \"name\": \"totalSupply\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },],\n        functionName: 'totalSupply'\n      }) as Promise<bigint>,\n      \n      // Get token0 address first, then balance\n      publicClient.readContract({\n        address: params.vault,\n        abi: [ {\n          \"inputs\": [],\n          \"name\": \"getTotalAmounts\",\n          \"outputs\": [\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"total0\",\n              \"type\": \"uint256\"\n            },\n            {\n              \"internalType\": \"uint256\",\n              \"name\": \"total1\",\n              \"type\": \"uint256\"\n            }\n          ],\n          \"stateMutability\": \"view\",\n          \"type\": \"function\"\n        },],\n        functionName: 'getTotalAmounts'\n      })\n    ])\n\n    const chainId = await  publicClient.getChainId();\n    const helper = getContractAddressByChainIdAndContractName(\n      chainId,\n      'Helper'\n    )\n\n    const [shares, amount0Used, amount1Used] = await publicClient.readContract({\n      address: helper as Address,\n      abi:  [{\n        \"inputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"_totalSupply\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"total0\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"total1\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount0Desired\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount1Desired\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount0Min\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount1Min\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"minShares\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"name\": \"getShares\",\n        \"outputs\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"shares\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount0Used\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount1Used\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"stateMutability\": \"pure\",\n        \"type\": \"function\"\n      }],\n      functionName: 'getShares',\n      args: [\n        totalSupply,\n        tokenBalances[0],\n        tokenBalances[1],\n        finalAmount0,\n        finalAmount1,\n        0n, // amount0Min = 0 as requested\n        0n, // amount1Min = 0 as requested\n        0n  // minShares = 0\n      ]\n    })\n\n\n    return {\n      data: {\n        lpTokens: shares,\n        finalAmount0: amount0Used,\n        finalAmount1: amount1Used\n      },\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to estimate LP tokens'\n    };\n  }\n}\n\n/**\n * Calculates shares (LP tokens) based on deposit amounts and vault reserves\n * This is a TypeScript implementation of the Solidity getShares function\n * \n * @param totalSupply - Current total supply of LP tokens\n * @param total0 - Current balance of token0 in vault\n * @param total1 - Current balance of token1 in vault\n * @param amount0Desired - Desired amount of token0 to deposit\n * @param amount1Desired - Desired amount of token1 to deposit\n * @param amount0Min - Minimum amount of token0 (set to 0n)\n * @param amount1Min - Minimum amount of token1 (set to 0n)\n * @param minShares - Minimum shares required (set to 0n)\n * @returns Object with shares, amount0Used, and amount1Used\n */\nexport function getShares(\n  totalSupply: bigint,\n  total0: bigint,\n  total1: bigint,\n  amount0Desired: bigint,\n  amount1Desired: bigint,\n  amount0Min: bigint,\n  amount1Min: bigint,\n  minShares: bigint\n): { shares: bigint; amount0Used: bigint; amount1Used: bigint } {\n  // If total supply > 0, vault can't be empty.\n  if (!(totalSupply === 0n || total0 > 0n || total1 > 0n)) {\n    throw new Error('Invalid vault state');\n  }\n\n  let shares: bigint;\n  let amount0Used: bigint = 0n;\n  let amount1Used: bigint = 0n;\n\n  if (totalSupply === 0n) {\n    // For first deposit, just use the amounts desired\n    amount0Used = amount0Desired;\n    amount1Used = amount1Desired;\n    shares = amount0Used > amount1Used ? amount0Used : amount1Used;\n    \n    if (shares < minShares) {\n      throw new Error('Insufficient shares for minimum requirement');\n    }\n  } else if (total0 === 0n) {\n    // Vault only has token1\n    shares = mulDiv(amount1Desired, totalSupply, total1);\n    amount1Used = mulDivRoundingUp(shares, total1, totalSupply);\n    amount0Used = 0n;\n  } else if (total1 === 0n) {\n    // Vault only has token0\n    shares = mulDiv(amount0Desired, totalSupply, total0);\n    amount0Used = mulDivRoundingUp(shares, total0, totalSupply);\n    amount1Used = 0n;\n  } else {\n    // Both tokens present - calculate cross product\n    const cross = min(amount0Desired * total1, amount1Desired * total0);\n\n    if (cross === 0n) {\n      throw new Error('Invalid deposit ratio - cross product is zero');\n    }\n\n    // Round up amounts\n    amount0Used = ((cross - 1n) / total1) + 1n;\n    amount1Used = ((cross - 1n) / total0) + 1n;\n\n    shares = mulDiv(cross, totalSupply, total0) / total1;\n  }\n\n  // Validate requirements\n  if (shares === 0n) {\n    throw new Error('Zero shares calculated');\n  }\n  if (amount0Used < amount0Min) {\n    throw new Error('Amount0 used less than minimum');\n  }\n  if (amount1Used < amount1Min) {\n    throw new Error('Amount1 used less than minimum');\n  }\n\n  return { shares, amount0Used, amount1Used };\n}\n\n/**\n * Multiplies two BigInt values and divides by a third (a * b / c)\n * Equivalent to Solidity's FullMath.mulDiv\n */\nfunction mulDiv(a: bigint, b: bigint, c: bigint): bigint {\n  if (c === 0n) {\n    throw new Error('Division by zero');\n  }\n  return (a * b) / c;\n}\n\n/**\n * Multiplies two BigInt values, divides by a third, and rounds up\n * Equivalent to Solidity's FullMath.mulDivRoundingUp\n */\nfunction mulDivRoundingUp(a: bigint, b: bigint, c: bigint): bigint {\n  if (c === 0n) {\n    throw new Error('Division by zero');\n  }\n  const result = (a * b) / c;\n  const remainder = (a * b) % c;\n  return remainder > 0n ? result + 1n : result;\n}\n\n/**\n * Returns the minimum of two BigInt values\n */\nfunction min(a: bigint, b: bigint): bigint {\n  return a < b ? a : b;\n}\n\n/**\n * Gets the current vault reserves for both tokens\n * \n * @param publicClient - Viem public client for blockchain reads\n * @param vaultAddress - Address of the vault\n * @returns Promise resolving to [token0Balance, token1Balance, totalSupply]\n */\nexport async function getVaultReserves(\n  publicClient: PublicClient,\n  vaultAddress: `0x${string}`\n): Promise<SteerResponse<{ token0Balance: bigint; token1Balance: bigint; totalSupply: bigint }>> {\n  try {\n    const [totalSupply, token0Address, token1Address] = await Promise.all([\n      publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'totalSupply'\n      }) as Promise<bigint>,\n      \n      publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'token0'\n      }) as Promise<`0x${string}`>,\n      \n      publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'token1'\n      }) as Promise<`0x${string}`>\n    ]);\n\n    const [token0Balance, token1Balance] = await Promise.all([\n      publicClient.readContract({\n        address: token0Address,\n        abi: [\n          {\n            type: 'function',\n            name: 'balanceOf',\n            inputs: [{ name: 'account', type: 'address', internalType: 'address' }],\n            outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n            stateMutability: 'view'\n          }\n        ],\n        functionName: 'balanceOf',\n        args: [vaultAddress]\n      }) as Promise<bigint>,\n      \n      publicClient.readContract({\n        address: token1Address,\n        abi: [\n          {\n            type: 'function',\n            name: 'balanceOf',\n            inputs: [{ name: 'account', type: 'address', internalType: 'address' }],\n            outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],\n            stateMutability: 'view'\n          }\n        ],\n        functionName: 'balanceOf',\n        args: [vaultAddress]\n      }) as Promise<bigint>\n    ]);\n\n    return {\n      data: {\n        token0Balance,\n        token1Balance,\n        totalSupply\n      },\n      status: 200,\n      success: true\n    };\n  } catch (error) {\n    return {\n      data: null,\n      status: 500,\n      success: false,\n      error: error instanceof Error ? error.message : 'Failed to get vault reserves'\n    };\n  }\n} \n\n","import type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { getContractAddressByChainIdAndContractName, getProtocolTypeByBeacon, Protocol } from '../../../const/index.js';\nimport { singleTokenDepositAbi } from '../../../const/abis/singleTokenDeposit.js';\nimport { UniswapV3PoolABI } from '../../../const/abis/UniswapPool.js';\nimport { AlgebraVaultDetails, SteerResponse, VaultDetails } from '../../../types.js';\nimport { calculateLimitPrice } from './calculateLimitPrice.js';\nimport { calculateSwapAmount } from './calculateSwapAmount.js';\nimport { estimateLpTokens } from './estimateLpTokens.js';\nimport { determineSwapDirection, simulateSwapWithSlippage, SwapWithSlippageParams } from './simulateSwap.js';\nimport type {\n  CalculateLimitPriceParams,\n  CalculateSwapAmountParams,\n  SingleAssetDepositParams,\n  SingleAssetDepositPreview\n} from './types.js';\nimport { AMMType } from './types.js';\nimport { abis } from '../../../const/deployments/abis.js';\n\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\n/**\n * Main single-asset deposit client that orchestrates all the steps\n */\nexport class SingleAssetDepositClient {\n  constructor(\n    private readonly publicClient: PublicClient,\n    private readonly walletClient: WalletClient\n  ) {}\n\n  /**\n   * Previews a single-asset deposit by running all simulation steps\n   * This allows users to see the expected outcome before executing the transaction\n   * \n   * @param params - Single-asset deposit parameters\n   * @param poolAddress - Address of the pool (must be provided separately)\n   * @returns Promise resolving to the complete deposit preview\n   * \n   * @example\n   * ```typescript\n   * const preview = await client.previewDeposit({\n   *   assets: parseEther('100'),\n   *   receiver: userAddress,\n   *   vault: vaultAddress,\n   *   isToken0: true,\n   *   depositSlippagePercent: 5n,\n   *   swapSlippageBP: 500,\n   *   ammType: AMMType.UniswapV3,\n   *   singleAssetDepositContract: contractAddress\n   * }, poolAddress);\n   * \n   * if (preview.success) {\n   *   console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n   *   console.log('Swap amount:', preview.data.swapAmount);\n   * }\n   * ```\n   */\n  public async previewDeposit(\n    params: SingleAssetDepositParams,\n    poolAddress: `0x${string}`\n  ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n    try {\n\n      const chainId = await this.publicClient.getChainId();\n      const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n        chainId,\n        'SingleAssetDeposit'\n      )\n\n      // Step 1: Calculate swap amount\n      const swapAmountParams: CalculateSwapAmountParams = {\n        depositAmount: params.assets,\n        isToken0: params.isToken0,\n        vault: params.vault,\n        pool: poolAddress,\n        ammType: params.ammType,\n        singleAssetDepositContract: singleAssentDeposit as Address\n      };\n\n\n      const swapAmountResult = await calculateSwapAmount(this.publicClient, swapAmountParams);\n      if (!swapAmountResult.success || !swapAmountResult.data) {\n        return {\n          data: null,\n          status: swapAmountResult.status,\n          success: false,\n          error: swapAmountResult.error || 'Failed to calculate swap amount'\n        };\n      }\n\n      const { swapAmount, sqrtPrice } = swapAmountResult.data;\n      const zeroForOne = determineSwapDirection(params.isToken0);\n\n      // Get token addresses from the pool contract\n      const [token0, token1] = await Promise.all([\n        this.publicClient.readContract({\n          address: poolAddress,\n          abi: UniswapV3PoolABI,\n          functionName: 'token0'\n        }) as Promise<`0x${string}`>,\n        this.publicClient.readContract({\n          address: poolAddress,\n          abi: UniswapV3PoolABI,\n          functionName: 'token1'\n        }) as Promise<`0x${string}`>\n      ]);\n\n      // Step 2: Calculate limit price\n      const limitPriceParams: CalculateLimitPriceParams = {\n        pool: poolAddress,\n        slippageBP: params.swapSlippageBP,\n        zeroForOne,\n        ammType: params.ammType,\n        token0,\n        token1\n      };\n\n      const limitPriceResult = await calculateLimitPrice(this.publicClient, limitPriceParams);\n      if (!limitPriceResult.success || limitPriceResult.data === null) {\n        return {\n          data: null,\n          status: limitPriceResult.status,\n          success: false,\n          error: limitPriceResult.error || 'Failed to calculate limit price'\n        };\n      }\n\n      const sqrtPriceLimitX96 = limitPriceResult.data;\n\n      let fee = 3000;\n      if (params.ammType === AMMType.UniswapV3) {\n        fee = await this.publicClient.readContract({\n          address: poolAddress,\n          abi: UniswapV3PoolABI,\n          functionName: 'fee'\n        }) as number;\n      }\n      // Get pool fee from the contract\n\n      let vaultDetails: VaultDetails | AlgebraVaultDetails;\n      const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');\n      if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n      let protocol: Protocol | null;\n\n      try {\n        // First try regular vault\n        vaultDetails = await this.publicClient.readContract({\n          address: params.vault,\n          abi: PERIPHERY_ABI,\n          functionName: 'vaultDetailsByAddress',\n          args: [params.vault]\n        }) as VaultDetails;\n\n        protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n      } catch (error) {\n        // If regular vault fails, try Algebra vault\n        vaultDetails = await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'algebraVaultDetailsByAddress',\n          args: [params.vault]\n        }) as AlgebraVaultDetails;\n\n        protocol = getProtocolTypeByBeacon(vaultDetails.vaultType);\n      }\n      // Step 3: Simulate swap\n      const simulateSwapParams: SwapWithSlippageParams = {\n        poolAddress: poolAddress,\n        recipient: params.receiver, // For simulation, use receiver address\n        zeroForOne,\n        amountSpecified: swapAmount,\n        sqrtPriceLimitX96,\n        ammType: params.ammType,\n        tokenIn: zeroForOne ? token0 : token1,\n        tokenOut: zeroForOne ? token1 : token0,\n        fee,\n        protocol\n      };\n\n      const swapSimulationResult = await simulateSwapWithSlippage(\n        this.publicClient, \n        simulateSwapParams, \n        this.publicClient.chain?.id || 1 // Use chain ID from public client, fallback to mainnet\n      );\n      if (!swapSimulationResult.success || !swapSimulationResult.data) {\n        return {\n          data: null,\n          status: swapSimulationResult.status,\n          success: false,\n          error: swapSimulationResult.error || 'Failed to simulate swap'\n        };\n      }\n\n      const swapSimulation = swapSimulationResult.data;\n\n      // Step 4: Estimate LP tokens\n      const lpEstimationResult = await estimateLpTokens(this.publicClient, {\n        vault: params.vault,\n        originalAssets: params.assets,\n        swapAmount,\n        swapResult: swapSimulation.swapSimulation,\n        isToken0: params.isToken0\n      });\n\n      if (!lpEstimationResult.success || !lpEstimationResult.data) {\n        return {\n          data: null,\n          status: lpEstimationResult.status,\n          success: false,\n          error: lpEstimationResult.error || 'Failed to estimate LP tokens'\n        };\n      }\n\n      const lpEstimation = lpEstimationResult.data;\n\n      return {\n        data: {\n          swapAmount,\n          currentSqrtPrice: sqrtPrice,\n          sqrtPriceLimitX96,\n          swapSimulation,\n          lpEstimation,\n          zeroForOne\n        },\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to preview single-asset deposit'\n      };\n    }\n  }\n\n  /**\n   * Executes a single-asset deposit transaction\n   * \n   * @param params - Single-asset deposit parameters\n   * @returns Promise resolving to the transaction hash\n   * \n   * @example\n   * ```typescript\n   * const result = await client.deposit({\n   *   assets: parseEther('100'),\n   *   receiver: userAddress,\n   *   vault: vaultAddress,\n   *   isToken0: true,\n   *   depositSlippagePercent: 5n,\n   *   swapSlippageBP: 500,\n   *   ammType: AMMType.UniswapV3,\n   *   singleAssetDepositContract: contractAddress\n   * });\n   * \n   * if (result.success) {\n   *   console.log('Transaction hash:', result.data);\n   * }\n   * ```\n   */\n  public async deposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) {\n        throw new Error('No account found');\n      }\n\n      const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n        this.publicClient.chain?.id || 1,\n        'SingleAssetDeposit'\n      )\n\n      // Prepare the transaction\n      const { request } = await this.publicClient.simulateContract({\n        address: singleAssentDeposit as Address,\n        abi: singleTokenDepositAbi,\n        functionName: 'deposit',\n        args: [\n          params.assets,\n          params.receiver,\n          params.vault,\n          params.isToken0,\n          params.depositSlippagePercent,\n          params.swapSlippageBP,\n          params.ammType\n        ],\n        account: account[0]\n      });\n\n      // Execute the transaction\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to execute single-asset deposit'\n      };\n    }\n  }\n\n  /**\n   * Prepares a single-asset deposit transaction without executing it\n   * Useful for batching transactions or custom execution logic\n   * \n   * @param params - Single-asset deposit parameters\n   * @returns Promise resolving to the prepared transaction data\n   */\n  public async prepareDepositTx(params: SingleAssetDepositParams) {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) {\n        throw new Error('No account found');\n      }\n\n      const chainId = await this.publicClient.getChainId();\n\n      const singleAssentDeposit = params.singleAssetDepositContract || getContractAddressByChainIdAndContractName(\n        chainId,\n        'SingleAssetDeposit'\n      )\n      // await this.publicClient.simulateContract({\n      //   address: singleAssentDeposit as Address,\n      //   abi: singleTokenDepositAbi,\n      //   functionName: 'deposit',\n      //   args: [\n      //     params.assets,\n      //     params.receiver,\n      //     params.vault,\n      //     params.isToken0,\n      //     params.depositSlippagePercent,\n      //     params.swapSlippageBP,\n      //     params.ammType\n      //   ],\n      //   account: account[0]\n      // });\n\n      return {\n        data: {\n          address: params.singleAssetDepositContract  || singleAssentDeposit,\n          abi: singleTokenDepositAbi,\n          functionName: 'deposit' as const,\n          args: [\n            params.assets,\n            params.receiver,\n            params.vault,\n            params.isToken0,\n            params.depositSlippagePercent,\n            params.swapSlippageBP,\n            params.ammType\n          ] as const\n        },\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to prepare single-asset deposit transaction'\n      };\n    }\n  }\n\n  /**\n   * Validates single-asset deposit parameters\n   * \n   * @param params - Parameters to validate\n   * @throws Error if parameters are invalid\n   */\n  public validateDepositParams(params: SingleAssetDepositParams): void {\n    if (params.assets <= 0n) {\n      throw new Error('Assets amount must be greater than 0');\n    }\n\n    if (!params.vault || params.vault === '0x0000000000000000000000000000000000000000') {\n      throw new Error('Invalid vault address');\n    }\n\n    if (!params.receiver || params.receiver === '0x0000000000000000000000000000000000000000') {\n      throw new Error('Invalid receiver address');\n    }\n\n    if (!params.singleAssetDepositContract || params.singleAssetDepositContract === '0x0000000000000000000000000000000000000000') {\n      throw new Error('Invalid single-asset deposit contract address');\n    }\n\n    if (params.depositSlippagePercent > 100n) {\n      throw new Error('Deposit slippage percent cannot exceed 100%');\n    }\n\n    if (params.swapSlippageBP > 10000) {\n      throw new Error('Swap slippage BP cannot exceed 10000 (100%)');\n    }\n\n    if (!Object.values(AMMType).includes(params.ammType)) {\n      throw new Error('Invalid AMM type');\n    }\n  }\n} ","// Export all types\nexport * from './types.js';\n\n// Export individual functions for separate testing and usage\nexport { calculateSwapAmount } from './calculateSwapAmount.js';\nexport { calculateLimitPrice, getPoolSlot0 } from './calculateLimitPrice.js';\nexport { simulateSwap, determineSwapDirection, validateSwapParams } from './simulateSwap.js';\nexport { estimateLpTokens, getVaultReserves } from './estimateLpTokens.js';\n\n// Export the main client\nexport { SingleAssetDepositClient } from './singleAssetDeposit.js';\n\n/**\n * @fileoverview Single-Asset Deposit Module\n * \n * This module provides comprehensive functionality for single-asset deposits into liquidity vaults.\n * The process allows users to deposit only one token (token0 or token1), while the contract \n * internally performs a swap to balance the token pair before depositing into the vault.\n * \n * ## Architecture\n * \n * The single-asset deposit process is broken down into separate, testable functions:\n * \n * 1. **calculateSwapAmount** - Determines how much of the input token needs to be swapped\n * 2. **calculateLimitPrice** - Calculates slippage protection limits for the internal swap\n * 3. **simulateSwap** - Simulates the swap to preview expected output amounts\n * 4. **estimateLpTokens** - Estimates the final LP tokens that will be received\n * 5. **SingleAssetDepositClient** - Main orchestrator that combines all steps\n * \n * ## Supported AMM Types\n * \n * Currently supports:\n * - UniswapV3 (fully implemented)\n * - Algebra variants (planned for future implementation)\n * \n * ## Example Usage\n * \n * ```typescript\n * import { SingleAssetDepositClient, AMMType } from '@steerprotocol/sdk';\n * import { parseEther } from 'viem';\n * \n * // Initialize the client\n * const client = new SingleAssetDepositClient(publicClient, walletClient);\n * \n * // Preview the deposit\n * const preview = await client.previewDeposit({\n *   assets: parseEther('100'),\n *   receiver: userAddress,\n *   vault: vaultAddress,\n *   isToken0: true,\n *   depositSlippagePercent: 5n,\n *   swapSlippageBP: 500,\n *   ammType: AMMType.UniswapV3,\n *   singleAssetDepositContract: contractAddress\n * }, poolAddress);\n * \n * if (preview.success) {\n *   console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n *   \n *   // Execute the deposit\n *   const result = await client.deposit(params);\n *   if (result.success) {\n *     console.log('Transaction hash:', result.data);\n *   }\n * }\n * ```\n * \n * ## Testing Individual Functions\n * \n * Each function can be tested separately:\n * \n * ```typescript\n * import { calculateSwapAmount, AMMType } from '@steerprotocol/sdk';\n * \n * // Test swap amount calculation\n * const result = await calculateSwapAmount(publicClient, {\n *   depositAmount: parseEther('100'),\n *   isToken0: true,\n *   vault: vaultAddress,\n *   pool: poolAddress,\n *   ammType: AMMType.UniswapV3,\n *   singleAssetDepositContract: contractAddress\n * });\n * ```\n */ ","import { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { abis } from '../../../const/deployments/abis.js';\nimport { getContractAddressByChainIdAndContractName } from '../../../const/network.js';\nimport { AlgebraVaultDetails, SteerResponse, VaultDetails } from '../../../types.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './types.js';\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\nconst PERIPHERY_ABI = abis.SteerPeriphery;\n\nexport class VaultWithdrawClient {\n  constructor(\n    protected readonly publicClient: PublicClient,\n    protected readonly walletClient: WalletClient\n  ) {}\n\n  /**\n   * Withdraws tokens from a vault\n   * @param params The withdrawal parameters\n   */\n  public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'withdraw',\n        args: [\n          params.shares,\n          params.amount0Min,\n          params.amount1Min,\n          params.to ?? account[0]\n        ],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  \n\n  /**\n   * Prepares the transaction data for withdrawing tokens from a vault without executing it\n   * @param params The withdrawal parameters\n   */\n  public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [\n      bigint,\n      bigint,\n      bigint,\n      Address\n    ];\n  }>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n\n      if (!params.to) {\n        if (!account[0]) throw new Error('No account found');\n      }\n\n      // Prepare the complete contract interaction data\n      return {\n        data: {\n          address: params.vaultAddress,\n          abi: [{\n            type: 'function',\n            inputs: [\n              { name: 'shares', internalType: 'uint256', type: 'uint256' },\n              { name: 'amount0Min', internalType: 'uint256', type: 'uint256' },\n              { name: 'amount1Min', internalType: 'uint256', type: 'uint256' },\n              { name: 'to', internalType: 'address', type: 'address' }\n            ],\n            name: 'withdraw',\n            outputs: [],\n            stateMutability: 'nonpayable'\n          }],\n          functionName: 'withdraw',\n          args: [\n            params.shares,\n            0n,\n            0n,\n            params.to ?? account[0]\n          ] as const\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Calculates the amount of tokens that would be received for a given amount of LP tokens\n   * @param vaultAddress The vault address\n   * @param lpToken The amount of LP tokens to calculate for\n   */\n  public async getTokensFromLp(\n    vaultAddress: Address,\n    lpToken: bigint\n  ): Promise<SteerResponse<TokensFromLpResponse>> {\n    try {\n      // Get chain ID and periphery address\n      const chainId = await this.publicClient.getChainId();\n      const steerPeripheryAddress = getContractAddressByChainIdAndContractName(chainId, 'SteerPeriphery');\n      if (!steerPeripheryAddress) throw new Error('SteerPeriphery address not found');\n\n      // Try to get vault details, first attempt with regular vault\n      let vaultDetails: VaultDetails | AlgebraVaultDetails;\n      try {\n        // First try regular vault\n        vaultDetails = await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'vaultDetailsByAddress',\n          args: [vaultAddress]\n        }) as VaultDetails;\n      } catch (error) {\n        // If regular vault fails, try Algebra vault\n        vaultDetails = await this.publicClient.readContract({\n          address: steerPeripheryAddress as Address,\n          abi: PERIPHERY_ABI,\n          functionName: 'algebraVaultDetailsByAddress',\n          args: [vaultAddress]\n        }) as AlgebraVaultDetails;\n      }\n\n      // Calculate token amounts based on LP token proportion\n      const token0Val = vaultDetails.totalLPTokensIssued > 0n\n        ? (vaultDetails.token0Balance * lpToken) / vaultDetails.totalLPTokensIssued\n        : BigInt(1);\n\n      const token1Val = vaultDetails.totalLPTokensIssued > 0n\n        ? (vaultDetails.token1Balance * lpToken) / vaultDetails.totalLPTokensIssued\n        : BigInt(1);\n\n      return {\n        data: {\n          token0Val,\n          token1Val\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n} ","import { parseAbi } from 'viem';\n\n/** Minimal authoritative IPoolManager surface used by the V4 lifecycle adapter. */\nexport const v4PoolManagerAbi = parseAbi([\n  'function initialize((address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks) key, uint160 sqrtPriceX96) returns (int24 tick)',\n  'event Initialize(bytes32 indexed id, address indexed currency0, address indexed currency1, uint24 fee, int24 tickSpacing, address hooks, uint160 sqrtPriceX96, int24 tick)',\n]);\n\n/** Minimal StateView/ImmutableState surface used for deployment and state checks. */\nexport const v4StateViewAbi = parseAbi([\n  'function poolManager() view returns (address)',\n  'function getSlot0(bytes32 poolId) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)',\n]);\n","export type PoolLifecycleErrorCode =\n  | 'INVALID_INPUT'\n  | 'UNSUPPORTED_DEPLOYMENT'\n  | 'CHAIN_MISMATCH'\n  | 'CONTRACT_NOT_DEPLOYED'\n  | 'DEPLOYMENT_MISMATCH'\n  | 'DISABLED_FEE'\n  | 'POOL_STATE_MISMATCH'\n  | 'SIMULATION_FAILED';\n\n/** Error thrown when a pool lifecycle primitive cannot safely continue. */\nexport class PoolLifecycleError extends Error {\n  public readonly code: PoolLifecycleErrorCode;\n  public readonly causeValue?: unknown;\n\n  constructor(code: PoolLifecycleErrorCode, message: string, causeValue?: unknown) {\n    super(message);\n    this.name = 'PoolLifecycleError';\n    this.code = code;\n    this.causeValue = causeValue;\n  }\n}\n","import { getAddress, isAddress, type Address } from 'viem';\n\n/** The smallest sqrt price accepted by Uniswap TickMath, inclusive. */\nexport const MIN_SQRT_RATIO = 4295128739n;\n\n/** The largest TickMath sqrt-price boundary, which is not itself valid. */\nexport const MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342n;\n\nconst ZERO_ADDRESS: Address = '0x0000000000000000000000000000000000000000';\nconst MAX_ERC20_DECIMALS = 255;\n\n/**\n * An exact fraction representation. {@link parseExactDecimal} returns a\n * reduced, non-negative value; initial-price inputs must also be positive.\n */\nexport interface ExactFraction {\n  readonly numerator: bigint;\n  readonly denominator: bigint;\n}\n\n/**\n * A human-unit price expressed as quote-token units per one base-token unit.\n *\n * For example, a value of 2_500 / 1 means 2,500 quote tokens per base token.\n * Token decimals are applied exactly by {@link encodeInitialSqrtPriceX96}; a\n * JavaScript floating-point number is deliberately not part of this type.\n */\nexport interface ExactPrice {\n  readonly baseToken: string;\n  readonly quoteToken: string;\n  readonly baseTokenDecimals: number;\n  readonly quoteTokenDecimals: number;\n  readonly quotePerBase: ExactFraction;\n}\n\n/**\n * A human-unit price for an EVM currency pair. Unlike {@link ExactPrice}, the\n * zero address is accepted and represents the native currency used by\n * Uniswap V4. Callers are responsible for supplying 18 decimals for the\n * native currency on EVM chains.\n */\nexport interface ExactCurrencyPrice {\n  readonly baseCurrency: string;\n  readonly quoteCurrency: string;\n  readonly baseCurrencyDecimals: number;\n  readonly quoteCurrencyDecimals: number;\n  readonly quotePerBase: ExactFraction;\n}\n\n/** A validated, checksummed ERC20 pair in canonical address order. */\nexport interface CanonicalErc20Pair {\n  readonly token0: Address;\n  readonly token1: Address;\n}\n\n/** A canonical EVM currency pair; currency0 may be the native zero address. */\nexport interface CanonicalCurrencyPair {\n  readonly currency0: Address;\n  readonly currency1: Address;\n}\n\n/**\n * The canonical raw-token ratio and its TickMath-compatible Q64.96 encoding.\n */\nexport interface CanonicalInitialPrice extends CanonicalErc20Pair {\n  readonly amount0Raw: bigint;\n  readonly amount1Raw: bigint;\n  readonly sqrtPriceX96: bigint;\n  readonly baseTokenIsToken0: boolean;\n}\n\n/** A canonical raw-currency ratio and its Q64.96 initialization price. */\nexport interface CanonicalCurrencyInitialPrice extends CanonicalCurrencyPair {\n  readonly amount0Raw: bigint;\n  readonly amount1Raw: bigint;\n  readonly sqrtPriceX96: bigint;\n  readonly baseCurrencyIsCurrency0: boolean;\n}\n\nfunction greatestCommonDivisor(a: bigint, b: bigint): bigint {\n  let left = a;\n  let right = b;\n\n  while (right !== 0n) {\n    const remainder = left % right;\n    left = right;\n    right = remainder;\n  }\n\n  return left;\n}\n\nfunction checksumAddress(value: string, label: string, allowZero: boolean): Address {\n  if (typeof value !== 'string' || !isAddress(value, { strict: true })) {\n    throw new TypeError(`${label} must be a valid EVM address`);\n  }\n\n  const address = getAddress(value);\n  if (!allowZero && address === ZERO_ADDRESS) {\n    throw new RangeError(`${label} must not be the zero address`);\n  }\n\n  return address;\n}\n\nfunction assertErc20Decimals(value: number, label: string): void {\n  if (!Number.isSafeInteger(value) || value < 0 || value > MAX_ERC20_DECIMALS) {\n    throw new RangeError(`${label} must be an integer from 0 through 255`);\n  }\n}\n\nfunction assertPositiveFraction(value: ExactFraction): void {\n  if (typeof value?.numerator !== 'bigint' || typeof value?.denominator !== 'bigint') {\n    throw new TypeError('quotePerBase must contain bigint numerator and denominator values');\n  }\n\n  if (value.numerator <= 0n) {\n    throw new RangeError('quotePerBase numerator must be greater than zero');\n  }\n\n  if (value.denominator <= 0n) {\n    throw new RangeError('quotePerBase denominator must be greater than zero');\n  }\n}\n\n/**\n * Parses an unsigned, fixed-point decimal string without converting through a\n * JavaScript number. Signs, exponent notation, whitespace, and omitted whole\n * or fractional digits are rejected. The returned fraction is reduced.\n */\nexport function parseExactDecimal(value: string): ExactFraction {\n  if (typeof value !== 'string') {\n    throw new TypeError('Decimal value must be provided as a string');\n  }\n\n  const match = /^([0-9]+)(?:\\.([0-9]+))?$/.exec(value);\n  if (match === null || match[0] !== value) {\n    throw new TypeError(\n      'Decimal value must use unsigned fixed-point notation, for example \"123.45\"'\n    );\n  }\n\n  const wholeDigits = match[1];\n  const fractionalDigits = match[2] ?? '';\n  const numerator = BigInt(`${wholeDigits}${fractionalDigits}`);\n\n  if (numerator === 0n) {\n    return { numerator: 0n, denominator: 1n };\n  }\n\n  const denominator = 10n ** BigInt(fractionalDigits.length);\n  const divisor = greatestCommonDivisor(numerator, denominator);\n\n  return {\n    numerator: numerator / divisor,\n    denominator: denominator / divisor,\n  };\n}\n\n/**\n * Validates, checksums, and sorts two distinct non-zero ERC20 addresses.\n */\nexport function sortErc20Pair(tokenA: string, tokenB: string): CanonicalErc20Pair {\n  const normalizedTokenA = checksumAddress(tokenA, 'tokenA', false);\n  const normalizedTokenB = checksumAddress(tokenB, 'tokenB', false);\n\n  if (normalizedTokenA === normalizedTokenB) {\n    throw new RangeError('ERC20 pair tokens must be different');\n  }\n\n  return BigInt(normalizedTokenA) < BigInt(normalizedTokenB)\n    ? { token0: normalizedTokenA, token1: normalizedTokenB }\n    : { token0: normalizedTokenB, token1: normalizedTokenA };\n}\n\n/**\n * Validates, checksums, and sorts two distinct EVM currencies. The zero\n * address is allowed and, when present, necessarily sorts as currency0.\n */\nexport function sortEvmCurrencyPair(currencyA: string, currencyB: string): CanonicalCurrencyPair {\n  const normalizedCurrencyA = checksumAddress(currencyA, 'currencyA', true);\n  const normalizedCurrencyB = checksumAddress(currencyB, 'currencyB', true);\n\n  if (normalizedCurrencyA === normalizedCurrencyB) {\n    throw new RangeError('EVM pair currencies must be different');\n  }\n\n  return BigInt(normalizedCurrencyA) < BigInt(normalizedCurrencyB)\n    ? { currency0: normalizedCurrencyA, currency1: normalizedCurrencyB }\n    : { currency0: normalizedCurrencyB, currency1: normalizedCurrencyA };\n}\n\n/**\n * Returns floor(sqrt(value)) using bigint arithmetic only.\n */\nexport function integerSqrt(value: bigint): bigint {\n  if (typeof value !== 'bigint') {\n    throw new TypeError('Square-root input must be a bigint');\n  }\n\n  if (value < 0n) {\n    throw new RangeError('Square-root input must not be negative');\n  }\n\n  if (value < 2n) {\n    return value;\n  }\n\n  let estimate = value;\n  let nextEstimate = (estimate + 1n) >> 1n;\n\n  while (nextEstimate < estimate) {\n    estimate = nextEstimate;\n    nextEstimate = (estimate + value / estimate) >> 1n;\n  }\n\n  return estimate;\n}\n\n/**\n * Enforces the Uniswap TickMath interval: MIN is inclusive and MAX exclusive.\n * Returns the input so it can be composed with transaction builders.\n */\nexport function validateSqrtPriceX96(sqrtPriceX96: bigint): bigint {\n  if (typeof sqrtPriceX96 !== 'bigint') {\n    throw new TypeError('sqrtPriceX96 must be a bigint');\n  }\n\n  if (sqrtPriceX96 < MIN_SQRT_RATIO || sqrtPriceX96 >= MAX_SQRT_RATIO) {\n    throw new RangeError(`sqrtPriceX96 must be in [${MIN_SQRT_RATIO}, ${MAX_SQRT_RATIO})`);\n  }\n\n  return sqrtPriceX96;\n}\n\n/**\n * Encode an exact raw token1/token0 amount ratio without token metadata.\n * The result matches the canonical V3 floor-rounding operation.\n */\nexport function encodeSqrtRatioX96(amount1Raw: bigint, amount0Raw: bigint): bigint {\n  if (typeof amount0Raw !== 'bigint' || typeof amount1Raw !== 'bigint') {\n    throw new TypeError('Raw ratio amounts must be bigint values');\n  }\n  if (amount0Raw <= 0n || amount1Raw <= 0n) {\n    throw new RangeError('Raw ratio amounts must be greater than zero');\n  }\n\n  const ratioX192 = (amount1Raw << 192n) / amount0Raw;\n  return validateSqrtPriceX96(integerSqrt(ratioX192));\n}\n\n/**\n * Converts an exact quote-per-base human price into the canonical raw-token\n * ratio and sqrtPriceX96 expected by concentrated-liquidity initializers.\n *\n * Address sorting and reciprocal orientation happen before the only lossy\n * operation. The final encoding is exactly:\n *\n *   floor(sqrt((amount1Raw << 192) / amount0Raw))\n */\nexport function encodeInitialSqrtPriceX96(price: ExactPrice): CanonicalInitialPrice {\n  const pair = sortErc20Pair(price.baseToken, price.quoteToken);\n  const baseToken = checksumAddress(price.baseToken, 'baseToken', false);\n  assertErc20Decimals(price.baseTokenDecimals, 'baseTokenDecimals');\n  assertErc20Decimals(price.quoteTokenDecimals, 'quoteTokenDecimals');\n  assertPositiveFraction(price.quotePerBase);\n\n  const baseScale = 10n ** BigInt(price.baseTokenDecimals);\n  const quoteScale = 10n ** BigInt(price.quoteTokenDecimals);\n  const baseTokenIsToken0 = baseToken === pair.token0;\n\n  // quotePerBase is quoteRaw / baseRaw after decimal scaling. If the base\n  // token sorts second, swap the complete integer terms before Q192 division.\n  const amount0Raw = baseTokenIsToken0\n    ? price.quotePerBase.denominator * baseScale\n    : price.quotePerBase.numerator * quoteScale;\n  const amount1Raw = baseTokenIsToken0\n    ? price.quotePerBase.numerator * quoteScale\n    : price.quotePerBase.denominator * baseScale;\n\n  const sqrtPriceX96 = encodeSqrtRatioX96(amount1Raw, amount0Raw);\n\n  return {\n    ...pair,\n    amount0Raw,\n    amount1Raw,\n    sqrtPriceX96,\n    baseTokenIsToken0,\n  };\n}\n\n/**\n * Currency-aware counterpart to {@link encodeInitialSqrtPriceX96}. It keeps\n * the same exact orientation and floor-rounding rules while permitting the\n * native zero-address currency required by Uniswap V4.\n */\nexport function encodeCurrencyInitialSqrtPriceX96(\n  price: ExactCurrencyPrice\n): CanonicalCurrencyInitialPrice {\n  const pair = sortEvmCurrencyPair(price.baseCurrency, price.quoteCurrency);\n  const baseCurrency = checksumAddress(price.baseCurrency, 'baseCurrency', true);\n  assertErc20Decimals(price.baseCurrencyDecimals, 'baseCurrencyDecimals');\n  assertErc20Decimals(price.quoteCurrencyDecimals, 'quoteCurrencyDecimals');\n  assertPositiveFraction(price.quotePerBase);\n\n  const baseScale = 10n ** BigInt(price.baseCurrencyDecimals);\n  const quoteScale = 10n ** BigInt(price.quoteCurrencyDecimals);\n  const baseCurrencyIsCurrency0 = baseCurrency === pair.currency0;\n  const amount0Raw = baseCurrencyIsCurrency0\n    ? price.quotePerBase.denominator * baseScale\n    : price.quotePerBase.numerator * quoteScale;\n  const amount1Raw = baseCurrencyIsCurrency0\n    ? price.quotePerBase.numerator * quoteScale\n    : price.quotePerBase.denominator * baseScale;\n\n  return {\n    ...pair,\n    amount0Raw,\n    amount1Raw,\n    sqrtPriceX96: encodeSqrtRatioX96(amount1Raw, amount0Raw),\n    baseCurrencyIsCurrency0,\n  };\n}\n","import {\n  encodeAbiParameters,\n  getAddress,\n  isAddress,\n  keccak256,\n  type Address,\n  type Hex,\n} from 'viem';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport type { V4InitialPrice, V4PoolKey, V4PoolKeyInput } from './types.js';\n\nexport const V4_DYNAMIC_FEE_FLAG = 0x800000;\nexport const V4_MAX_STATIC_FEE = 1_000_000;\nexport const V4_MAX_TICK_SPACING = 0x7fff;\nexport const V4_ALL_HOOK_MASK = (1n << 14n) - 1n;\nexport const V4_ZERO_ADDRESS = getAddress('0x0000000000000000000000000000000000000000');\n\nconst BEFORE_SWAP_FLAG = 1n << 7n;\nconst AFTER_SWAP_FLAG = 1n << 6n;\nconst AFTER_ADD_LIQUIDITY_FLAG = 1n << 10n;\nconst AFTER_REMOVE_LIQUIDITY_FLAG = 1n << 8n;\nconst BEFORE_SWAP_RETURNS_DELTA_FLAG = 1n << 3n;\nconst AFTER_SWAP_RETURNS_DELTA_FLAG = 1n << 2n;\nconst AFTER_ADD_LIQUIDITY_RETURNS_DELTA_FLAG = 1n << 1n;\nconst AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA_FLAG = 1n;\n\nconst POOL_KEY_ABI_PARAMETER = {\n  type: 'tuple',\n  components: [\n    { name: 'currency0', type: 'address' },\n    { name: 'currency1', type: 'address' },\n    { name: 'fee', type: 'uint24' },\n    { name: 'tickSpacing', type: 'int24' },\n    { name: 'hooks', type: 'address' },\n  ],\n} as const;\n\nfunction invalidInput(message: string, cause?: unknown): never {\n  throw new PoolLifecycleError('INVALID_INPUT', message, cause);\n}\n\nfunction normalizeAddress(value: unknown, label: string): Address {\n  if (typeof value !== 'string' || !isAddress(value, { strict: true })) {\n    return invalidInput(`${label} must be a valid EVM address.`);\n  }\n  return getAddress(value);\n}\n\nfunction validateFee(fee: unknown): number {\n  if (\n    !Number.isSafeInteger(fee) ||\n    Number(fee) < 0 ||\n    (Number(fee) > V4_MAX_STATIC_FEE && Number(fee) !== V4_DYNAMIC_FEE_FLAG)\n  ) {\n    return invalidInput(\n      'V4 fee must be an integer from 0 through 1000000 or the dynamic fee flag 0x800000.'\n    );\n  }\n  return Number(fee);\n}\n\nfunction validateTickSpacing(tickSpacing: unknown): number {\n  if (\n    !Number.isSafeInteger(tickSpacing) ||\n    Number(tickSpacing) < 1 ||\n    Number(tickSpacing) > V4_MAX_TICK_SPACING\n  ) {\n    return invalidInput('V4 tickSpacing must be an integer from 1 through 32767.');\n  }\n  return Number(tickSpacing);\n}\n\nfunction validateHookAddress(hooksAddress: Address, fee: number): void {\n  const hooks = BigInt(hooksAddress);\n  const hasFlag = (flag: bigint): boolean => (hooks & flag) !== 0n;\n  if (\n    (!hasFlag(BEFORE_SWAP_FLAG) && hasFlag(BEFORE_SWAP_RETURNS_DELTA_FLAG)) ||\n    (!hasFlag(AFTER_SWAP_FLAG) && hasFlag(AFTER_SWAP_RETURNS_DELTA_FLAG)) ||\n    (!hasFlag(AFTER_ADD_LIQUIDITY_FLAG) && hasFlag(AFTER_ADD_LIQUIDITY_RETURNS_DELTA_FLAG)) ||\n    (!hasFlag(AFTER_REMOVE_LIQUIDITY_FLAG) && hasFlag(AFTER_REMOVE_LIQUIDITY_RETURNS_DELTA_FLAG))\n  ) {\n    invalidInput('V4 hook return-delta flags require their corresponding action flags.');\n  }\n\n  const dynamicFee = fee === V4_DYNAMIC_FEE_FLAG;\n  const valid = hooks === 0n ? !dynamicFee : (hooks & V4_ALL_HOOK_MASK) !== 0n || dynamicFee;\n  if (!valid) {\n    invalidInput('V4 hooks address is incompatible with its fee and permission flags.');\n  }\n}\n\n/** Validate a complete PoolKey whose currencies are already canonically ordered. */\nexport function validateV4PoolKey(value: V4PoolKey): V4PoolKey {\n  const currency0 = normalizeAddress(value?.currency0, 'currency0');\n  const currency1 = normalizeAddress(value?.currency1, 'currency1');\n  const fee = validateFee(value?.fee);\n  const tickSpacing = validateTickSpacing(value?.tickSpacing);\n  const hooks = normalizeAddress(value?.hooks, 'hooks');\n\n  if (BigInt(currency0) >= BigInt(currency1)) {\n    invalidInput('V4 currencies must be distinct and canonically ordered.');\n  }\n  validateHookAddress(hooks, fee);\n  return { currency0, currency1, fee, tickSpacing, hooks };\n}\n\n/**\n * Validate and sort two currencies. Address zero is deliberately accepted and\n * sorts first because V4 represents the native currency as address(0).\n */\nexport function canonicalizeV4PoolKey(value: V4PoolKeyInput): V4PoolKey {\n  const currencyA = normalizeAddress(value?.currencyA, 'currencyA');\n  const currencyB = normalizeAddress(value?.currencyB, 'currencyB');\n  if (currencyA === currencyB) {\n    return invalidInput('V4 pool currencies must be different.');\n  }\n  const [currency0, currency1] =\n    BigInt(currencyA) < BigInt(currencyB)\n      ? ([currencyA, currencyB] as const)\n      : ([currencyB, currencyA] as const);\n  return validateV4PoolKey({\n    currency0,\n    currency1,\n    fee: value?.fee,\n    tickSpacing: value?.tickSpacing,\n    hooks: value?.hooks,\n  });\n}\n\n/** Return the exact PoolId used by PoolIdLibrary.toId. */\nexport function getV4PoolId(key: V4PoolKey): Hex {\n  const validated = validateV4PoolKey(key);\n  return keccak256(encodeAbiParameters([POOL_KEY_ABI_PARAMETER], [validated]));\n}\n\nexport function v4PoolKeysEqual(left: V4PoolKey, right: V4PoolKey): boolean {\n  try {\n    const a = validateV4PoolKey(left);\n    const b = validateV4PoolKey(right);\n    return (\n      a.currency0 === b.currency0 &&\n      a.currency1 === b.currency1 &&\n      a.fee === b.fee &&\n      a.tickSpacing === b.tickSpacing &&\n      a.hooks === b.hooks\n    );\n  } catch {\n    return false;\n  }\n}\n\n/** Validate price bounds and bind the price to the canonical PoolKey order. */\nexport function assertV4InitialPrice(key: V4PoolKey, value: V4InitialPrice): V4InitialPrice {\n  const currency0 = normalizeAddress(value?.currency0, 'initialPrice.currency0');\n  const currency1 = normalizeAddress(value?.currency1, 'initialPrice.currency1');\n  if (currency0 !== key.currency0 || currency1 !== key.currency1) {\n    return invalidInput('V4 initial price currencies must match the canonical PoolKey order.');\n  }\n  try {\n    return { currency0, currency1, sqrtPriceX96: validateSqrtPriceX96(value?.sqrtPriceX96) };\n  } catch (error) {\n    return invalidInput(\n      error instanceof Error ? error.message : 'V4 sqrtPriceX96 is invalid.',\n      error\n    );\n  }\n}\n","import {\n  getAddress,\n  isAddress,\n  parseAbi,\n  type Address,\n  type Hex,\n  type PublicClient,\n} from 'viem';\nimport { getAmmConfig } from '../../const/amm/configs/ammConfig.js';\nimport { getProtocolTypeByBeacon } from '../../const/amm/utils/beacon.js';\nimport { Protocol } from '../../const/chain.js';\nimport { getSubgraphUrlByChainId } from '../../const/subgraph.js';\nimport {\n  chainIdToName,\n  getContractAddressByChainIdAndContractName,\n  getNetworkByChainId,\n} from '../../const/network.js';\nimport {\n  isAerodromeVault,\n  isAlgebraDirectionProtocol,\n  isAlgebraIntegralProtocol,\n  isAlgebraProtocol,\n  isPoolSharkProtocol,\n} from '../../const/protocol.js';\nimport { v4StateViewAbi } from '../../pool-lifecycle/abis/v4.js';\nimport {\n  getV4PoolId,\n  validateV4PoolKey,\n  v4PoolKeysEqual,\n} from '../../pool-lifecycle/v4/key.js';\nimport type { V4PoolKey } from '../../pool-lifecycle/v4/types.js';\nimport type { SteerResponse, SupportedProtocol } from '../../types.js';\n\nconst VAULT_REGISTRY_ABI = parseAbi([\n  'function getVaultDetails(address vault) view returns ((uint8 state,uint256 tokenId,uint256 vaultID,string payloadIpfs,address vaultAddress,string beaconName) details)',\n  'function beaconAddresses(string beaconName) view returns (address)',\n]);\n\nconst VAULT_EXECUTION_ABI = parseAbi([\n  'function pool() view returns (address)',\n  'function getPositions() view returns (int24[] lowerTicks,int24[] upperTicks,uint16[] relativeWeights)',\n  'function getTotalAmounts() view returns (uint256 total0,uint256 total1)',\n]);\n\nconst V4_VAULT_ABI = parseAbi([\n  'function poolKey() view returns (address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)',\n  'function getPositions() view returns (int24[] lowerTicks,int24[] upperTicks,uint16[] relativeWeights)',\n  'function getTotalAmounts() view returns (uint256 total0,uint256 total1)',\n]);\n\nconst V3_POOL_ABI = parseAbi([\n  'function factory() view returns (address)',\n  'function slot0() view returns (uint160 sqrtPriceX96,int24 tick,uint16 observationIndex,uint16 observationCardinality,uint16 observationCardinalityNext,uint8 feeProtocol,bool unlocked)',\n  'function tickSpacing() view returns (int24)',\n]);\n\nconst AERODROME_POOL_ABI = parseAbi([\n  'function factory() view returns (address)',\n  'function slot0() view returns (uint160 sqrtPriceX96,int24 tick,uint16 observationIndex,uint16 observationCardinality,uint16 observationCardinalityNext,bool unlocked)',\n  'function tickSpacing() view returns (int24)',\n]);\n\nconst ALGEBRA_POOL_ABI = parseAbi([\n  'function factory() view returns (address)',\n  'function globalState() view returns (uint160 price,int24 tick,int24 prevInitializedTick,uint16 fee,uint16 timepointIndex,uint8 communityFee,bool unlocked)',\n  'function tickSpacing() view returns (int24)',\n]);\n\nconst ALGEBRA_INTEGRAL_POOL_ABI = parseAbi([\n  'function factory() view returns (address)',\n  'function globalState() view returns (uint160 price,int24 tick,uint16 lastFee,uint8 pluginConfig,uint16 communityFee,bool unlocked)',\n  'function tickSpacing() view returns (int24)',\n]);\n\nconst ALGEBRA_DIRECTIONAL_POOL_ABI = parseAbi([\n  'function factory() view returns (address)',\n  'function globalState() view returns (uint160 price,int24 tick,uint16 feeZto,uint16 feeOtz,uint16 timepointIndex,uint8 communityFeeToken0,uint8 communityFeeToken1,bool unlocked)',\n  'function tickSpacing() view returns (int24)',\n]);\n\nexport type VaultExecutionPoolFamily =\n  | 'uniswap-v3-compatible'\n  | 'algebra'\n  | 'algebra-integral'\n  | 'algebra-directional'\n  | 'aerodrome-cl'\n  | 'uniswap-v4';\n\nexport type VaultExecutionPoolKey = V4PoolKey;\n\nexport interface GetVaultExecutionContextParams {\n  publicClient: PublicClient;\n  vaultAddress: Address;\n  blockNumber: bigint;\n  /** Explicit execution epoch as a Unix timestamp in seconds. */\n  epochTimestamp: bigint;\n  subgraphStudioKey?: string;\n  /** Optional assertion for Uniswap v4. It must exactly match the vault's pinned poolKey(). */\n  poolKey?: VaultExecutionPoolKey;\n}\n\nexport interface VaultExecutionPosition {\n  lowerTick: number;\n  upperTick: number;\n  relativeWeight: number;\n}\n\nexport interface VaultExecutionDataProvenance {\n  source: 'onchain-contract' | 'steer-subgraph';\n  consistency: 'block-pinned' | 'timestamp-bounded';\n  status: 'verified' | 'indexed' | 'not-found';\n  blockNumber: string | null;\n  detail: string;\n}\n\nexport interface VaultExecutionContext {\n  chainId: number;\n  blockNumber: string;\n  epochTimestamp: string;\n  vaultAddress: Address;\n  protocol: SupportedProtocol;\n  beaconName: string;\n  beaconAddress: Address;\n  poolFamily: VaultExecutionPoolFamily;\n  poolAddress: Address | null;\n  poolId: Hex | null;\n  factoryAddress: Address | null;\n  poolManagerAddress: Address | null;\n  poolKey: VaultExecutionPoolKey | null;\n  currentTick: number;\n  tickSpacing: number;\n  positions: VaultExecutionPosition[];\n  totalAmount0: string;\n  totalAmount1: string;\n  lastExecutionTimestamp: string | null;\n  lastExecutionTimeSeconds: string | null;\n  provenance: {\n    identity: VaultExecutionDataProvenance;\n    poolState: VaultExecutionDataProvenance;\n    positions: VaultExecutionDataProvenance;\n    totals: VaultExecutionDataProvenance;\n    lastExecution: VaultExecutionDataProvenance;\n  };\n}\n\nclass ExecutionContextError extends Error {\n  constructor(readonly status: number, message: string) {\n    super(message);\n  }\n}\n\ntype VaultRegistryDetails = {\n  state: number;\n  tokenId: bigint;\n  vaultID: bigint;\n  payloadIpfs: string;\n  vaultAddress: Address;\n  beaconName: string;\n};\n\ntype RawPoolKey = readonly [Address, Address, number, number, Address];\ntype RawPositions = readonly [readonly number[], readonly number[], readonly number[]];\ntype RawTotals = readonly [bigint, bigint];\n\nfunction resolvePoolFamily(protocol: SupportedProtocol): VaultExecutionPoolFamily {\n  if (isPoolSharkProtocol(protocol)) {\n    throw new ExecutionContextError(422, 'PoolShark vault execution context is not supported.');\n  }\n  if (protocol === Protocol.UniswapV4) return 'uniswap-v4';\n  if (isAlgebraDirectionProtocol(protocol)) return 'algebra-directional';\n  if (isAlgebraIntegralProtocol(protocol)) return 'algebra-integral';\n  if (isAlgebraProtocol(protocol)) return 'algebra';\n  if (isAerodromeVault(protocol)) return 'aerodrome-cl';\n  return 'uniswap-v3-compatible';\n}\n\nfunction assertPoolKey(\n  poolKey: VaultExecutionPoolKey,\n  invalidStatus = 400,\n): VaultExecutionPoolKey {\n  try {\n    return validateV4PoolKey(poolKey);\n  } catch (error) {\n    throw new ExecutionContextError(\n      invalidStatus,\n      error instanceof Error ? error.message : 'Uniswap v4 poolKey is invalid.',\n    );\n  }\n}\n\nfunction normalizeRawPoolKey(raw: RawPoolKey): VaultExecutionPoolKey {\n  return assertPoolKey(\n    {\n      currency0: raw[0],\n      currency1: raw[1],\n      fee: Number(raw[2]),\n      tickSpacing: Number(raw[3]),\n      hooks: raw[4],\n    },\n    422,\n  );\n}\n\nfunction poolKeysEqual(a: VaultExecutionPoolKey, b: VaultExecutionPoolKey): boolean {\n  return v4PoolKeysEqual(a, b);\n}\n\nfunction getPoolId(poolKey: VaultExecutionPoolKey): Hex {\n  return getV4PoolId(poolKey);\n}\n\nfunction normalizePositions(raw: RawPositions): VaultExecutionPosition[] {\n  const [lowerTicks, upperTicks, relativeWeights] = raw;\n  if (lowerTicks.length !== upperTicks.length || lowerTicks.length !== relativeWeights.length) {\n    throw new ExecutionContextError(422, 'Vault returned malformed position arrays.');\n  }\n  return lowerTicks.map((lowerTick, index) => ({\n    lowerTick: Number(lowerTick),\n    upperTick: Number(upperTicks[index]),\n    relativeWeight: Number(relativeWeights[index]),\n  }));\n}\n\nfunction protocolFactory(\n  protocol: SupportedProtocol,\n  chain: ReturnType<typeof chainIdToName>,\n  subgraphStudioKey: string,\n): Address {\n  if (!chain) throw new ExecutionContextError(422, 'Chain is absent from the SDK network registry.');\n  const address = getAmmConfig(subgraphStudioKey)[protocol]?.factoryAddress?.[chain];\n  if (!address || !isAddress(address)) {\n    throw new ExecutionContextError(\n      422,\n      `${protocol} factory is missing from the SDK protocol registry on ${chain}.`,\n    );\n  }\n  return getAddress(address);\n}\n\nasync function readLastExecution(\n  publicClient: PublicClient,\n  chainId: number,\n  vaultAddress: Address,\n  blockNumber: bigint,\n  epochTimestamp: bigint,\n): Promise<{\n  timestamp: bigint | null;\n  elapsed: bigint | null;\n  provenance: VaultExecutionDataProvenance;\n}> {\n  const pinnedBlock = await publicClient.getBlock({ blockNumber });\n  const timestampUpperBound = pinnedBlock.timestamp < epochTimestamp\n    ? pinnedBlock.timestamp\n    : epochTimestamp;\n  const subgraphUrl = getSubgraphUrlByChainId(chainId);\n  if (!subgraphUrl) {\n    throw new ExecutionContextError(422, `Chain ${chainId} has no Steer subgraph configuration.`);\n  }\n  const response = await fetch(subgraphUrl, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({\n      query: `{\n        vaultSnapshots(\n          where: { vaultAddress: \"${vaultAddress.toLowerCase()}\", timestamp_lte: \"${timestampUpperBound}\" }\n          orderDirection: desc\n          orderBy: timestamp\n          first: 1\n        ) { timestamp }\n      }`,\n    }),\n  });\n  if (!response.ok) {\n    throw new ExecutionContextError(502, `Steer subgraph returned HTTP ${response.status}.`);\n  }\n  const result = await response.json() as {\n    data?: { vaultSnapshots?: { timestamp: string }[] };\n    errors?: { message: string }[];\n  };\n  if (result.errors?.length) {\n    throw new ExecutionContextError(502, `Steer subgraph error: ${result.errors[0].message}`);\n  }\n  const rawTimestamp = result.data?.vaultSnapshots?.[0]?.timestamp;\n  if (!rawTimestamp) {\n    return {\n      timestamp: null,\n      elapsed: null,\n      provenance: {\n        source: 'steer-subgraph',\n        consistency: 'timestamp-bounded',\n        status: 'not-found',\n        blockNumber: null,\n        detail: `No indexed vaultSnapshot exists through timestamp ${timestampUpperBound}.`,\n      },\n    };\n  }\n  let timestamp: bigint;\n  try {\n    timestamp = BigInt(rawTimestamp);\n  } catch {\n    throw new ExecutionContextError(502, 'Steer subgraph returned a malformed vaultSnapshot timestamp.');\n  }\n  if (timestamp > timestampUpperBound) {\n    throw new ExecutionContextError(502, 'Steer subgraph returned a vaultSnapshot beyond the query bound.');\n  }\n  return {\n    timestamp,\n    elapsed: epochTimestamp - timestamp,\n    provenance: {\n      source: 'steer-subgraph',\n      consistency: 'timestamp-bounded',\n      status: 'indexed',\n      blockNumber: null,\n      detail: `Latest indexed vaultSnapshot bounded by epoch and pinned-block timestamp ${timestampUpperBound}; the entity does not expose its block number.`,\n    },\n  };\n}\n\n/**\n * Builds the normalized read-only state consumed by strategy execution.\n * Every contract read is evaluated at `blockNumber`; `epochTimestamp` is the sole time reference.\n */\nexport async function getVaultExecutionContext(\n  params: GetVaultExecutionContextParams,\n): Promise<SteerResponse<VaultExecutionContext>> {\n  try {\n    const { publicClient, blockNumber, epochTimestamp } = params;\n    if (blockNumber < 0n) throw new ExecutionContextError(400, 'blockNumber must be non-negative.');\n    if (epochTimestamp < 0n) {\n      throw new ExecutionContextError(400, 'epochTimestamp must be a non-negative Unix timestamp.');\n    }\n    if (!isAddress(params.vaultAddress)) {\n      throw new ExecutionContextError(400, 'vaultAddress must be a valid EVM address.');\n    }\n\n    const chainId = await publicClient.getChainId();\n    const chain = chainIdToName(chainId);\n    const network = getNetworkByChainId(chainId);\n    const vaultRegistry = getContractAddressByChainIdAndContractName(chainId, 'VaultRegistry');\n    if (!chain || !network || !vaultRegistry || !isAddress(vaultRegistry)) {\n      throw new ExecutionContextError(422, `Chain ${chainId} is missing required SDK deployment data.`);\n    }\n    const registryStartBlock = BigInt(network.VaultRegistry.startBlock ?? 0);\n    if (blockNumber < registryStartBlock) {\n      throw new ExecutionContextError(400, 'blockNumber predates the SDK VaultRegistry deployment.');\n    }\n\n    const vaultAddress = getAddress(params.vaultAddress);\n    const details = (await publicClient.readContract({\n      address: getAddress(vaultRegistry),\n      abi: VAULT_REGISTRY_ABI,\n      functionName: 'getVaultDetails',\n      args: [vaultAddress],\n      blockNumber,\n    })) as VaultRegistryDetails;\n    if (!details.vaultAddress || getAddress(details.vaultAddress) !== vaultAddress) {\n      throw new ExecutionContextError(404, `${vaultAddress} is not registered in the chain VaultRegistry.`);\n    }\n    const protocol = getProtocolTypeByBeacon(details.beaconName);\n    if (!protocol) {\n      throw new ExecutionContextError(\n        422,\n        `Vault beacon \"${details.beaconName}\" is not mapped to a supported SDK protocol.`,\n      );\n    }\n    const beaconAddress = getAddress(\n      (await publicClient.readContract({\n        address: getAddress(vaultRegistry),\n        abi: VAULT_REGISTRY_ABI,\n        functionName: 'beaconAddresses',\n        args: [details.beaconName],\n        blockNumber,\n      })) as Address,\n    );\n    if (beaconAddress === '0x0000000000000000000000000000000000000000') {\n      throw new ExecutionContextError(422, `Vault beacon \"${details.beaconName}\" is not registered.`);\n    }\n\n    const family = resolvePoolFamily(protocol);\n    const explicitPoolKey = params.poolKey ? assertPoolKey(params.poolKey) : undefined;\n    const [rawPositions, rawTotals] = await Promise.all([\n      publicClient.readContract({\n        address: vaultAddress,\n        abi: family === 'uniswap-v4' ? V4_VAULT_ABI : VAULT_EXECUTION_ABI,\n        functionName: 'getPositions',\n        blockNumber,\n      }) as Promise<RawPositions>,\n      publicClient.readContract({\n        address: vaultAddress,\n        abi: family === 'uniswap-v4' ? V4_VAULT_ABI : VAULT_EXECUTION_ABI,\n        functionName: 'getTotalAmounts',\n        blockNumber,\n      }) as Promise<RawTotals>,\n    ]);\n\n    let poolAddress: Address | null = null;\n    let poolId: Hex | null = null;\n    let factoryAddress: Address | null = null;\n    let poolManagerAddress: Address | null = null;\n    let poolKey: VaultExecutionPoolKey | null = null;\n    let currentTick: number;\n    let tickSpacing: number;\n\n    if (family === 'uniswap-v4') {\n      let rawPoolKey: RawPoolKey;\n      try {\n        rawPoolKey = (await publicClient.readContract({\n          address: vaultAddress,\n          abi: V4_VAULT_ABI,\n          functionName: 'poolKey',\n          blockNumber,\n        })) as RawPoolKey;\n      } catch {\n        throw new ExecutionContextError(\n          422,\n          'A complete Uniswap v4 pool key cannot be proven from vault poolKey(); refusing partial metadata.',\n        );\n      }\n      poolKey = normalizeRawPoolKey(rawPoolKey);\n      if (explicitPoolKey && !poolKeysEqual(explicitPoolKey, poolKey)) {\n        throw new ExecutionContextError(409, 'The explicit Uniswap v4 poolKey does not match vault poolKey().');\n      }\n      poolId = getPoolId(poolKey);\n      const v4Config = getAmmConfig(params.subgraphStudioKey ?? '')[protocol];\n      const poolManager = v4Config?.PoolManager?.[chain];\n      const stateView = v4Config?.StateView?.[chain];\n      if (!poolManager || !stateView || !isAddress(poolManager) || !isAddress(stateView)) {\n        throw new ExecutionContextError(422, 'Uniswap v4 PoolManager or StateView is missing from SDK config.');\n      }\n      poolManagerAddress = getAddress(poolManager);\n      const [stateViewPoolManager, slot0] = await Promise.all([\n        publicClient.readContract({\n          address: getAddress(stateView),\n          abi: v4StateViewAbi,\n          functionName: 'poolManager',\n          blockNumber,\n        }),\n        publicClient.readContract({\n          address: getAddress(stateView),\n          abi: v4StateViewAbi,\n          functionName: 'getSlot0',\n          args: [poolId],\n          blockNumber,\n        }),\n      ]);\n      if (getAddress(stateViewPoolManager) !== poolManagerAddress) {\n        throw new ExecutionContextError(\n          422,\n          'Configured Uniswap v4 StateView is bound to a different PoolManager.',\n        );\n      }\n      if (slot0[0] === 0n) {\n        throw new ExecutionContextError(\n          422,\n          `Uniswap v4 pool ${poolId} is not initialized in the configured PoolManager.`,\n        );\n      }\n      currentTick = Number(slot0[1]);\n      tickSpacing = poolKey.tickSpacing;\n    } else {\n      poolAddress = getAddress(\n        (await publicClient.readContract({\n          address: vaultAddress,\n          abi: VAULT_EXECUTION_ABI,\n          functionName: 'pool',\n          blockNumber,\n        })) as Address,\n      );\n      factoryAddress = protocolFactory(protocol, chain, params.subgraphStudioKey ?? '');\n      const poolAbi =\n        family === 'aerodrome-cl'\n          ? AERODROME_POOL_ABI\n          : family === 'algebra-directional'\n            ? ALGEBRA_DIRECTIONAL_POOL_ABI\n            : family === 'algebra-integral'\n              ? ALGEBRA_INTEGRAL_POOL_ABI\n              : family === 'algebra'\n                ? ALGEBRA_POOL_ABI\n                : V3_POOL_ABI;\n      const stateFunction = family.startsWith('algebra') ? 'globalState' : 'slot0';\n      const [actualFactory, state, spacing] = await Promise.all([\n        publicClient.readContract({\n          address: poolAddress,\n          abi: poolAbi,\n          functionName: 'factory',\n          blockNumber,\n        }) as Promise<Address>,\n        publicClient.readContract({\n          address: poolAddress,\n          abi: poolAbi,\n          functionName: stateFunction,\n          blockNumber,\n        }) as Promise<readonly unknown[]>,\n        publicClient.readContract({\n          address: poolAddress,\n          abi: poolAbi,\n          functionName: 'tickSpacing',\n          blockNumber,\n        }) as Promise<number>,\n      ]);\n      if (getAddress(actualFactory) !== factoryAddress) {\n        throw new ExecutionContextError(\n          409,\n          `Pool factory ${actualFactory} does not match SDK ${protocol} factory ${factoryAddress}.`,\n        );\n      }\n      currentTick = Number(state[1]);\n      tickSpacing = Number(spacing);\n    }\n\n    const lastExecution = await readLastExecution(\n      publicClient,\n      chainId,\n      vaultAddress,\n      blockNumber,\n      epochTimestamp,\n    );\n    const pinned = (detail: string): VaultExecutionDataProvenance => ({\n      source: 'onchain-contract',\n      consistency: 'block-pinned',\n      status: 'verified',\n      blockNumber: blockNumber.toString(),\n      detail,\n    });\n\n    return {\n      success: true,\n      status: 200,\n      data: {\n        chainId,\n        blockNumber: blockNumber.toString(),\n        epochTimestamp: epochTimestamp.toString(),\n        vaultAddress,\n        protocol,\n        beaconName: details.beaconName,\n        beaconAddress,\n        poolFamily: family,\n        poolAddress,\n        poolId,\n        factoryAddress,\n        poolManagerAddress,\n        poolKey,\n        currentTick,\n        tickSpacing,\n        positions: normalizePositions(rawPositions),\n        totalAmount0: rawTotals[0].toString(),\n        totalAmount1: rawTotals[1].toString(),\n        lastExecutionTimestamp: lastExecution.timestamp?.toString() ?? null,\n        lastExecutionTimeSeconds: lastExecution.elapsed?.toString() ?? null,\n        provenance: {\n          identity: pinned('VaultRegistry getVaultDetails and SDK beacon mapping.'),\n          poolState: pinned(\n            family === 'uniswap-v4'\n              ? 'Vault poolKey and SDK StateView getSlot0.'\n              : 'Vault pool, SDK factory validation, pool state, and tickSpacing.',\n          ),\n          positions: pinned('Vault getPositions.'),\n          totals: pinned('Vault getTotalAmounts; pending uncollected fees follow vault contract semantics.'),\n          lastExecution: lastExecution.provenance,\n        },\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      status: error instanceof ExecutionContextError ? error.status : 500,\n      data: null,\n      error: error instanceof Error ? error.message : 'Failed to build vault execution context.',\n    };\n  }\n}\n","import { createClient } from '@steerprotocol/api-sdk';\nimport { Pool as PoolV3 } from \"@uniswap/v3-sdk\";\nimport type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { chainIdToName, getBeaconNameByProtocol, getProtocolTypeByBeacon } from '../const/index.js';\nimport { getAmmConfig } from '../const/amm/configs/ammConfig.js';\nimport { getProtocolsForChainId } from '../const/amm/utils/protocol.js';\nimport { ChainId, MultiPositionManagers, Protocol } from '../const/chain.js';\nimport { steerSubgraphConfig } from '../const/subgraph.js';\nimport { SubgraphVaultClient } from '../utils/SubgraphVaultClient.js';\nimport { getApiUrl } from '../const/api.js';\nimport { abis } from '../const/deployments/abis.js';\nimport { SteerResponse, VaultDetailsResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultDepositClient } from './vault/deposit/index.js';\nimport { PoolInstanceParams, VaultDepositParams } from './vault/deposit/types.js';\nimport { SingleAssetDepositClient } from './vault/single-asset/index.js';\nimport type {\n  SingleAssetDepositParams,\n  SingleAssetDepositPreview\n} from './vault/single-asset/types.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { TokensFromLpResponse, VaultWithdrawParams } from './vault/withdraw/types.js';\nimport {\n  getVaultExecutionContext,\n  type VaultExecutionContext,\n  type VaultExecutionPoolKey,\n} from './vault/execution-context.js';\nexport * from \"./vault/single-asset/index.js\";\n\nconst VAULT_ABI = abis.QuickSwapUniv3MultiPositionLiquidityManager;\n\n// Custom ABI for reward functions\nconst REWARD_FUNCTIONS_ABI = [\n  {\n    \"type\": \"function\",\n    \"name\": \"calculatePendingRewards\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"rewards\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"extraRewards\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"claimUserRewards\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  \n] as const;\n\nexport interface VaultApproveParams {\n  vaultAddress: Address;\n  spender: Address;\n  amount: bigint;\n}\n\nexport interface VaultAllowanceParams {\n  vaultAddress: Address;\n  owner: Address;\n  spender: Address;\n}\n\nexport interface VaultBalanceParams {\n  vaultAddress: Address;\n  account: Address;\n}\n\n// Pagination interfaces matching API SDK types\nexport interface ApiPageInfo {\n  hasNextPage: boolean;\n  endCursor: string | null;\n}\n\nexport interface VaultNode {\n  id: string;\n  chainId: number;\n  vaultAddress: string;\n  protocol: string;\n  beaconName: string;\n  protocolBaseType: string;\n  name: string;\n  feeApr?: number;\n  stakingApr?: number;\n  merklApr?: number;\n  /** Raw positions from the subgraph. Only available when sourced from subgraph. */\n  positions?: {\n    id: string;\n    upperTick: number;\n    lowerTick: number;\n    relativeWeight: string;\n  }[];\n  /** Computed tick range across all current positions (min lower / max upper). Only available when sourced from subgraph. */\n  tickRange?: {\n    minLowerTick: number;\n    maxUpperTick: number;\n  };\n  /** Cumulative fees collected by the vault. Only available when sourced from subgraph. */\n  fees?: {\n    fees0: string;\n    fees1: string;\n  };\n  pool: {\n    poolAddress: string;\n    id: string;\n    feeTier: string;\n    tick?: string;\n    liquidity?: string;\n    volumeUSD?: string;\n    totalValueLockedUSD?: string;\n  };\n  token0: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: number;\n    address: string;\n    chainId: number;\n  };\n  token1: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: number;\n    address: string;\n    chainId: number;\n  };\n}\n\nexport interface VaultEdge {\n  cursor: string;\n  node: VaultNode;\n}\n\nexport interface VaultsConnection {\n  edges: readonly VaultEdge[];\n  pageInfo: ApiPageInfo;\n  totalCount: number;\n}\n\nexport interface TokenNode {\n  id: string;\n  symbol: string;\n  name: string;\n  decimals: number;\n  chainId: number;\n  address: string;\n}\n\nexport interface TokenEdge {\n  cursor: string;\n  node: TokenNode;\n}\n\nexport interface TokensConnection {\n  edges: readonly TokenEdge[];\n  pageInfo: ApiPageInfo;\n  totalCount: number;\n}\n\nexport interface PoolNode {\n  id: string;\n  chainId: number;\n  feeTier: string;\n  token0: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: number;\n    address: string;\n    chainId: number;\n  };\n  token1: {\n    id: string;\n    symbol: string;\n    name: string;\n    decimals: number;\n    address: string;\n    chainId: number;\n  };\n}\n\nexport interface PoolEdge {\n  cursor: string;\n  node: PoolNode;\n}\n\nexport interface PoolsConnection {\n  edges: readonly PoolEdge[];\n  pageInfo: ApiPageInfo;\n  totalCount: number;\n}\n\nexport interface VaultFilter {\n  chainId?: number;\n  protocol?: string;\n  isActive?: boolean;\n  beaconName?: string;\n  poolAddress?: string;\n  vaultAddress?: string;\n  tokenAddress?: string;\n  tokenAddresses?: string[];\n  tokenSymbol?: string;\n  tokenSymbols?: string[];\n}\n\n// API-specific filter that excludes protocol field\nexport interface ApiVaultFilter {\n  chainId?: number;\n  isActive?: boolean;\n  beaconName?: string;\n  pool?: string;\n}\n\nexport interface TokenFilter {\n  chainId?: number;\n  symbol?: string;\n}\n\nexport interface PoolFilter {\n  chainId?: number;\n  protocol?: string;\n  minLiquidity?: string;\n}\n\nexport interface VaultApr {\n  apr: {\n    apr: number;\n    message: string;\n  };\n  beaconName: string;\n  vaultAddress: string;\n}\n\nexport interface AprResponse {\n  vaults: VaultApr[];\n}\n\nexport interface AprFilter {\n  chainId: number;\n  protocol: string;\n}\n\nexport interface PendingRewardsParams {\n  vaultAddress: Address;\n  user: Address;\n}\n\nexport interface PendingRewardsResponse {\n  rewards: bigint;\n  extraRewards: bigint;\n}\n\nexport interface ClaimRewardsParams {\n  vaultAddress: Address;\n}\n\nexport interface BlackholeAprDetailedParams {\n  vaultAddress: Address;\n  chainId: number;\n}\n\nexport interface BlackholeSnapshotAnalysis {\n  period: number;\n  fromTimestamp: number;\n  toTimestamp: number;\n  fromDate: string;\n  toDate: string;\n  durationSeconds: number;\n  durationHours: number;\n  tvlUSD: number;\n  feesUSD: number;\n  apr: number;\n}\n\nexport interface BlackholeAprDetailedResponse {\n  vaultAddress: string;\n  beaconName: string;\n  apr: {\n    apr: number;\n    message: string;\n  };\n  snapshotAnalysis: BlackholeSnapshotAnalysis[];\n}\n\n/**\n * Client for interacting with Steer Protocol's Vault system.\n * This client provides functionality for vault operations, deposit/withdraw, and comprehensive data fetching.\n * \n * **Features:**\n * - Vault data includes associated pool information (pool address, fee tier) along with token details\n * - Full pagination support for all data fetching methods\n * - API client integration for efficient data retrieval\n * - Backward compatibility with subgraph queries\n * \n * **Available API Client Methods:**\n * - `getVaults()` - Get vaults with pagination and filtering\n * - `getTokens()` - Get tokens with pagination and filtering\n * - `getPools()` - Get pools with pagination and filtering\n * - `getAllVaults()` - Get all vaults (auto-pagination)\n * - `getAllTokens()` - Get all tokens (auto-pagination)\n * - `getAllPools()` - Get all pools (auto-pagination)\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { VaultClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * // Initialize the Vault client\n * const vaultClient = new VaultClient(publicClient, walletClient, 'production');\n * \n * // Get vaults with pagination - includes pool information\n * const vaults = await vaultClient.getVaults({ chainId: 1 }, 10, null);\n * \n * if (vaults.success && vaults.data) {\n *   vaults.data.edges.forEach((edge) => {\n *     const vault = edge.node;\n *     console.log(`${vault.token0.symbol}/${vault.token1.symbol} vault`);\n *     console.log(`Pool: ${vault.pool.id} (${vault.pool.feeTier} fee tier)`);\n *     console.log(`Protocol: ${vault.protocol} (${vault.beaconName})`);\n *   });\n * }\n * \n * // Get all tokens for a chain\n * const allTokens = await vaultClient.getAllTokens({ chainId: 1 });\n * \n * // Get pools with specific filters\n * const pools = await vaultClient.getPools({ \n *   chainId: 1, \n *   protocol: 'uniswap-v3' \n * });\n * \n * // Traditional vault operations\n * const depositTx = await vaultClient.deposit(depositParams);\n * const withdrawTx = await vaultClient.withdraw(withdrawParams);\n * ```\n * \n * @group Client\n */\nexport class VaultClient extends SubgraphClient {\n  protected readonly apiClient: ReturnType<typeof createClient>;\n  protected readonly publicClient: PublicClient;\n  protected readonly walletClient: WalletClient;\n  private readonly depositClient: VaultDepositClient;\n  private readonly withdrawClient: VaultWithdrawClient;\n  public readonly singleAssetDepositClient: SingleAssetDepositClient;\n  private readonly subgraphVaultClient: SubgraphVaultClient;\n  private readonly subgraphStudioKey: string;\n\n  /**\n   * Creates a new instance of VaultClient\n   * @param publicClient - The public client for reading from the blockchain\n   * @param walletClient - The wallet client for writing to the blockchain\n   * @param environment - The environment to use ('production' or 'development')\n   * @param version - Optional API version to use (defaults to 'v1')\n   * @param subgraphStudioKey - Optional subgraph studio key for protocol data fetching\n   */\n  constructor(\n    publicClient: PublicClient, \n    walletClient: WalletClient,\n    environment: 'production' | 'development',\n    version: 'v1' = 'v1',\n    subgraphStudioKey?: string\n  ) {\n    const combinedClient = publicClient as PublicClient & WalletClient;\n    super(combinedClient);\n    \n    const apiUrl = getApiUrl(environment, version);\n    this.apiClient = createClient(apiUrl);\n    this.publicClient = publicClient;\n    this.walletClient = walletClient;\n    this.depositClient = new VaultDepositClient(publicClient, walletClient);\n    this.withdrawClient = new VaultWithdrawClient(publicClient, walletClient);\n    this.singleAssetDepositClient = new SingleAssetDepositClient(publicClient, walletClient);\n    this.subgraphVaultClient = new SubgraphVaultClient();\n    this.subgraphStudioKey = subgraphStudioKey || '';\n  }\n\n  /**\n   * Returns normalized strategy execution inputs from one explicitly pinned block.\n   * `epochTimestamp` is a Unix timestamp in seconds and is never derived from wall-clock time.\n   */\n  public async getExecutionContext(params: {\n    vaultAddress: Address;\n    blockNumber: bigint;\n    epochTimestamp: bigint;\n    poolKey?: VaultExecutionPoolKey;\n  }): Promise<SteerResponse<VaultExecutionContext>> {\n    return getVaultExecutionContext({\n      publicClient: this.publicClient,\n      subgraphStudioKey: this.subgraphStudioKey,\n      ...params,\n    });\n  }\n\n  private normalizeProtocolValue(value: string): string {\n    return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n  }\n\n  private resolveProtocolEnum(protocol?: string): Protocol | null {\n    if (!protocol) {\n      return null;\n    }\n\n    const normalizedProtocol = this.normalizeProtocolValue(protocol);\n    const matchedProtocol = Object.values(Protocol).find(\n      protocolValue => this.normalizeProtocolValue(protocolValue) === normalizedProtocol\n    );\n\n    return matchedProtocol || null;\n  }\n\n  private getProtocolBeaconNames(protocol?: string, chainId?: number): string[] {\n    const resolvedProtocol = this.resolveProtocolEnum(protocol);\n    if (!resolvedProtocol) {\n      return [];\n    }\n\n    const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n    const beaconNames: string[] = [];\n    const chain = chainId ? chainIdToName(chainId) : undefined;\n\n    if (protocolConfig?.beaconContract) {\n      beaconNames.push(protocolConfig.beaconContract);\n    }\n\n    if (protocolConfig?.additionalBeaconContracts?.length) {\n      beaconNames.push(...protocolConfig.additionalBeaconContracts);\n    }\n\n    if (protocolConfig?.beaconContractSushiManaged) {\n      beaconNames.push(protocolConfig.beaconContractSushiManaged);\n    }\n\n    if (protocolConfig?.algebraHookBeaconsByChain) {\n      if (chain) {\n        beaconNames.push(...(protocolConfig.algebraHookBeaconsByChain[chain] || []));\n      } else {\n        beaconNames.push(...Object.values(protocolConfig.algebraHookBeaconsByChain).flat());\n      }\n    }\n\n    if (\n      protocolConfig?.beaconAlgebraHook &&\n      (!chain || (\n        protocolConfig.algebraHookSupportedChains?.includes(chain) &&\n        !protocolConfig.algebraHookBeaconsByChain?.[chain]?.length\n      ))\n    ) {\n      beaconNames.push(protocolConfig.beaconAlgebraHook);\n    }\n\n    if (resolvedProtocol === Protocol.Blackhole) {\n      beaconNames.push(MultiPositionManagers.MultiPositionBlackholeOld);\n    }\n\n    const beaconAlias = getBeaconNameByProtocol(resolvedProtocol);\n    if (beaconAlias) {\n      beaconNames.push(beaconAlias);\n    }\n\n    return [...new Set(beaconNames.filter(name => name.length > 0))];\n  }\n\n  private getPrimaryProtocolBeaconName(protocol?: string): string | null {\n    const resolvedProtocol = this.resolveProtocolEnum(protocol);\n    if (!resolvedProtocol) {\n      return null;\n    }\n\n    const protocolConfig = getAmmConfig(this.subgraphStudioKey)[resolvedProtocol];\n    return protocolConfig?.beaconContract || null;\n  }\n\n  private buildApiVaultFilter(filter?: VaultFilter): ApiVaultFilter | undefined {\n    if (!filter) {\n      return undefined;\n    }\n\n    const { protocol, poolAddress, chainId, isActive, beaconName } = filter;\n    const apiFilter: ApiVaultFilter = {\n      chainId,\n      isActive,\n      beaconName,\n    };\n\n    if (poolAddress) {\n      apiFilter.pool = poolAddress;\n    }\n\n    if (!apiFilter.beaconName && protocol) {\n      const primaryBeaconName = this.getPrimaryProtocolBeaconName(protocol);\n      if (primaryBeaconName) {\n        apiFilter.beaconName = primaryBeaconName;\n      }\n    }\n\n    return apiFilter;\n  }\n\n  private vaultMatchesProtocolFilter(\n    vault: VaultNode,\n    protocolFilter: string,\n    resolvedProtocol: Protocol | null\n  ): boolean {\n    const normalizedFilter = this.normalizeProtocolValue(protocolFilter);\n    const normalizedBeaconName = this.normalizeProtocolValue(vault.beaconName);\n    const resolvedVaultProtocol = getProtocolTypeByBeacon(vault.beaconName);\n\n    const directCandidates = [vault.protocol, vault.protocolBaseType, resolvedVaultProtocol || ''];\n    const hasDirectMatch = directCandidates.some(candidate => {\n      if (!candidate) {\n        return false;\n      }\n      return this.normalizeProtocolValue(candidate) === normalizedFilter;\n    });\n\n    if (hasDirectMatch) {\n      return true;\n    }\n\n    const expectedBeacon = resolvedProtocol\n      ? getBeaconNameByProtocol(resolvedProtocol)\n      : protocolFilter;\n    const normalizedExpectedBeacon = this.normalizeProtocolValue(expectedBeacon);\n\n    if (normalizedExpectedBeacon.length > 0 && normalizedBeaconName.includes(normalizedExpectedBeacon)) {\n      return true;\n    }\n\n    if (!resolvedProtocol) {\n      return false;\n    }\n\n    const configuredBeaconNames = this.getProtocolBeaconNames(resolvedProtocol, vault.chainId);\n    return configuredBeaconNames.some((beacon) => {\n      const normalizedBeacon = this.normalizeProtocolValue(beacon);\n      return normalizedBeacon.length > 0 && normalizedBeaconName === normalizedBeacon;\n    });\n  }\n\n  private applyProtocolFilter(vaultsConnection: VaultsConnection, protocol?: string): VaultsConnection {\n    if (!protocol) {\n      return vaultsConnection;\n    }\n\n    const resolvedProtocol = this.resolveProtocolEnum(protocol);\n    const filteredEdges = vaultsConnection.edges.filter(edge =>\n      this.vaultMatchesProtocolFilter(edge.node, protocol, resolvedProtocol)\n    );\n\n    return {\n      ...vaultsConnection,\n      edges: filteredEdges\n    };\n  }\n\n  private normalizeAddress(value?: string): string {\n    return value?.toLowerCase() || '';\n  }\n\n  private normalizeSymbol(value?: string): string {\n    return value?.trim().toLowerCase() || '';\n  }\n\n  private matchesAnyAddress(candidates: Array<string | undefined>, filterValues: string[]): boolean {\n    if (filterValues.length === 0) {\n      return true;\n    }\n\n    const normalizedCandidates = new Set(\n      candidates.map((candidate) => this.normalizeAddress(candidate)).filter(Boolean),\n    );\n\n    return filterValues.some((value) => normalizedCandidates.has(value));\n  }\n\n  private matchesAnySymbol(candidates: Array<string | undefined>, filterValues: string[]): boolean {\n    if (filterValues.length === 0) {\n      return true;\n    }\n\n    const normalizedCandidates = new Set(\n      candidates.map((candidate) => this.normalizeSymbol(candidate)).filter(Boolean),\n    );\n\n    return filterValues.some((value) => normalizedCandidates.has(value));\n  }\n\n  private filterVaultNodes(vaults: VaultNode[], filter: VaultFilter): VaultNode[] {\n    const vaultAddress = this.normalizeAddress(filter.vaultAddress);\n    const poolAddress = this.normalizeAddress(filter.poolAddress);\n    const tokenAddressFilters = [\n      ...(filter.tokenAddress ? [filter.tokenAddress] : []),\n      ...(filter.tokenAddresses || []),\n    ]\n      .map((address) => this.normalizeAddress(address))\n      .filter(Boolean);\n    const tokenSymbolFilters = [\n      ...(filter.tokenSymbol ? [filter.tokenSymbol] : []),\n      ...(filter.tokenSymbols || []),\n    ]\n      .map((symbol) => this.normalizeSymbol(symbol))\n      .filter(Boolean);\n\n    return vaults.filter((vault) => {\n      if (vaultAddress && this.normalizeAddress(vault.vaultAddress) !== vaultAddress) {\n        return false;\n      }\n\n      if (\n        poolAddress &&\n        !this.matchesAnyAddress([vault.pool.poolAddress, vault.pool.id], [poolAddress])\n      ) {\n        return false;\n      }\n\n      if (\n        !this.matchesAnyAddress(\n          [vault.token0.address, vault.token0.id, vault.token1.address, vault.token1.id],\n          tokenAddressFilters,\n        )\n      ) {\n        return false;\n      }\n\n      if (\n        !this.matchesAnySymbol(\n          [vault.token0.symbol, vault.token1.symbol],\n          tokenSymbolFilters,\n        )\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n  }\n\n  /**\n   * Gets vaults with pagination support\n   * Fetches ALL data from both API (database) and subgraph in parallel, merges without duplicates, then paginates\n   * @param filter - Optional filter criteria\n   * @param first - Number of items to fetch (default: 50)\n   * @param after - Cursor for pagination (null for first page)\n   * @returns Promise resolving to paginated vaults data\n   * \n   * @example\n   * ```typescript\n   * // Get first 20 vaults for Ethereum\n   * const vaults = await vaultClient.getVaults({ chainId: 1 }, 20);\n   * \n   * if (vaults.success && vaults.data) {\n   *   vaults.data.edges.forEach((edge) => {\n   *     const vault = edge.node;\n   *     console.log(`Vault: ${vault.name}`);\n   *     console.log(`Pool: ${vault.pool.id}`);\n   *     console.log(`Pool Fee Tier: ${vault.pool.feeTier}`);\n   *     console.log(`Tokens: ${vault.token0.symbol}/${vault.token1.symbol}`);\n   *   });\n   * }\n   * \n   * // Get next page using cursor\n   * if (vaults.data?.pageInfo.hasNextPage) {\n   *   const nextPage = await vaultClient.getVaults(\n   *     { chainId: 1 }, \n   *     20, \n   *     vaults.data.pageInfo.endCursor\n   *   );\n   * }\n   * \n   * // For additional pool details (liquidity, volume, etc.), use the PoolClient:\n   * // const poolDetails = await poolClient.getPoolById(vault.pool.id, protocol, chainId);\n   * ```\n   */\n  public async getVaults(\n    filter?: VaultFilter,\n    first: number = 50,\n    after?: string | null\n  ): Promise<SteerResponse<VaultsConnection>> {\n    const apiFilter = this.buildApiVaultFilter(filter);\n\n    // Fetch ALL vaults from both sources in parallel (no pagination at source level)\n    const [apiResult, subgraphResult] = await Promise.allSettled([\n      this.getAllVaultsFromApi(apiFilter),\n      filter?.chainId !== ChainId.Avalanche ? this.getAllVaultsFromSubgraph(filter) : Promise.reject(new Error('Avalanche not supported'))\n    ]);\n\n    // Extract successful results\n    const apiVaults: VaultEdge[] = apiResult.status === 'fulfilled' && apiResult.value.success && apiResult.value.data \n      ? apiResult.value.data\n      : [];\n    \n    const subgraphVaults: VaultEdge[] = subgraphResult.status === 'fulfilled' && subgraphResult.value.success && subgraphResult.value.data \n      ? subgraphResult.value.data\n      : [];\n\n    // If both failed, return error\n    if (apiVaults.length === 0 && subgraphVaults.length === 0) {\n      const apiError = apiResult.status === 'rejected' ? apiResult.reason : null;\n      const subgraphError = subgraphResult.status === 'rejected' ? subgraphResult.reason : null;\n      \n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: `Both API and subgraph failed. API: ${apiError?.message || 'Unknown error'}. Subgraph: ${subgraphError?.message || 'Unknown error'}`\n      };\n    }\n\n    // Merge results and remove duplicates based on vaultAddress\n    const mergedVaults = this.mergeVaultResults(apiVaults, subgraphVaults);\n\n    // Apply protocol filter to merged results\n    const filteredVaults = mergedVaults.filter(edge => \n      !filter?.protocol || this.vaultMatchesProtocolFilter(edge.node, filter.protocol, this.resolveProtocolEnum(filter.protocol))\n    );\n\n    // Apply pagination to the complete merged and filtered dataset\n    const paginatedVaults = this.paginateVaults(filteredVaults, first, after);\n\n    return {\n      data: paginatedVaults,\n      status: 200,\n      success: true\n    };\n  }\n\n  /**\n   * Fetches ALL vaults from API (database) by auto-paginating\n   * @private\n   */\n  private async getAllVaultsFromApi(\n    apiFilter?: ApiVaultFilter\n  ): Promise<SteerResponse<VaultEdge[]>> {\n    try {\n      const allVaults: VaultEdge[] = [];\n      let hasNextPage = true;\n      let cursor: string | null = null;\n      const batchSize = 100; // Fetch in batches of 100\n\n      while (hasNextPage) {\n        const response = await this.getVaultsFromApi(apiFilter, batchSize, cursor);\n        \n        if (!response.success || !response.data) {\n          // If we already have some vaults, return them; otherwise return error\n          if (allVaults.length > 0) {\n            break;\n          }\n          return {\n            data: null,\n            status: response.status,\n            success: false,\n            error: response.error || 'Failed to fetch vaults from API'\n          };\n        }\n\n        allVaults.push(...response.data.edges);\n        hasNextPage = response.data.pageInfo.hasNextPage;\n        cursor = response.data.pageInfo.endCursor;\n      }\n\n      return {\n        data: allVaults,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      console.warn('Failed to fetch all vaults from API:', error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to fetch all vaults from API'\n      };\n    }\n  }\n\n  /**\n   * Fetches vaults from API (database) with pagination\n   * @private\n   */\n  private async getVaultsFromApi(\n    apiFilter?: ApiVaultFilter,\n    first: number = 50,\n    after?: string | null\n  ): Promise<SteerResponse<VaultsConnection>> {\n    try {\n      const response = await this.apiClient.vaults({\n        filter: apiFilter,\n        first,\n        after\n      });\n\n      if (!response.data?.vaults) {\n        return {\n          data: null,\n          status: response.status,\n          success: false,\n          error: 'No data returned from API'\n        };\n      }\n\n      // Transform the response to match our interface\n      const transformedData: VaultsConnection = {\n        edges: response.data.vaults.edges.map(edge => ({\n          cursor: edge.cursor,\n          node: {\n            id: edge.node.id,\n            chainId: edge.node.chainId,\n            vaultAddress: edge.node.vaultAddress,\n            protocol: edge.node.protocol,\n            beaconName: edge.node.beaconName,\n            protocolBaseType: edge.node.protocolBaseType,\n            name: edge.node.name || '',\n            feeApr: edge.node.feeApr || undefined,\n            stakingApr: edge.node.stakingApr || undefined,\n            merklApr: edge.node.merklApr || undefined,\n            pool: {\n              id: edge.node.pool?.id || '',\n              poolAddress: edge.node.pool?.poolAddress || '',\n              feeTier: edge.node.pool?.feeTier || '',\n              tick: undefined, // Not available in API response\n              liquidity: undefined, // Not available in API response\n              volumeUSD: undefined, // Not available in API response\n              totalValueLockedUSD: undefined // Not available in API response\n            },\n            token0: {\n              id: edge.node.token0?.id || '',\n              symbol: edge.node.token0?.symbol || '',\n              name: edge.node.token0?.name || '',\n              decimals: edge.node.token0?.decimals || 0,\n              address: edge.node.token0?.address || '',\n              chainId: edge.node.token0?.chainId || 0\n            },\n            token1: {\n              id: edge.node.token1?.id || '',\n              symbol: edge.node.token1?.symbol || '',\n              name: edge.node.token1?.name || '',\n              decimals: edge.node.token1?.decimals || 0,\n              address: edge.node.token1?.address || '',\n              chainId: edge.node.token1?.chainId || 0\n            }\n          }\n        })),\n        pageInfo: {\n          hasNextPage: response.data.vaults.pageInfo.hasNextPage,\n          endCursor: response.data.vaults.pageInfo.endCursor ?? null\n        },\n        totalCount: response.data.vaults.totalCount\n      };\n\n      return {\n        data: transformedData,\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      console.warn('API client failed:', error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'API request failed'\n      };\n    }\n  }\n\n  /**\n   * Merges vault results from API and subgraph, removing duplicates\n   * Prioritizes API data when duplicates are found\n   * Generates consistent cursors for the merged dataset\n   * @private\n   */\n  private mergeVaultResults(apiVaults: VaultEdge[], subgraphVaults: VaultEdge[]): VaultEdge[] {\n    const vaultMap = new Map<string, VaultEdge>();\n\n    // Add API vaults first (they take priority)\n    apiVaults.forEach(edge => {\n      const key = edge.node.vaultAddress.toLowerCase();\n      vaultMap.set(key, edge);\n    });\n\n    // Add subgraph vaults only if not already present\n    subgraphVaults.forEach(edge => {\n      const key = edge.node.vaultAddress.toLowerCase();\n      if (!vaultMap.has(key)) {\n        vaultMap.set(key, edge);\n      } else {\n        // Merge additional data from subgraph if available (like pool details)\n        const existing = vaultMap.get(key)!;\n        const merged: VaultEdge = {\n          ...existing,\n          node: {\n            ...existing.node,\n            // Merge pool data - prefer subgraph data for pool details if API doesn't have it\n            pool: {\n              id: existing.node.pool.id || edge.node.pool.id,\n              poolAddress: existing.node.pool.poolAddress || edge.node.pool.poolAddress,\n              feeTier: existing.node.pool.feeTier || edge.node.pool.feeTier,\n              tick: existing.node.pool.tick || edge.node.pool.tick,\n              liquidity: existing.node.pool.liquidity || edge.node.pool.liquidity,\n              volumeUSD: existing.node.pool.volumeUSD || edge.node.pool.volumeUSD,\n              totalValueLockedUSD: existing.node.pool.totalValueLockedUSD || edge.node.pool.totalValueLockedUSD\n            },\n            // Prefer API APR data, but use subgraph if API doesn't have it\n            feeApr: existing.node.feeApr ?? edge.node.feeApr,\n            stakingApr: existing.node.stakingApr ?? edge.node.stakingApr,\n            merklApr: existing.node.merklApr ?? edge.node.merklApr,\n            // Subgraph-only fields: always take from subgraph when available\n            positions: existing.node.positions ?? edge.node.positions,\n            tickRange: existing.node.tickRange ?? edge.node.tickRange,\n            fees: existing.node.fees ?? edge.node.fees,\n          }\n        };\n        vaultMap.set(key, merged);\n      }\n    });\n\n    // Convert to array and regenerate cursors for consistent pagination\n    const mergedArray = Array.from(vaultMap.values());\n    return mergedArray.map((edge, index) => ({\n      ...edge,\n      cursor: `merged_${edge.node.chainId}_${index}_${edge.node.vaultAddress.toLowerCase()}`\n    }));\n  }\n\n  /**\n   * Applies pagination to vault results\n   * @private\n   */\n  private paginateVaults(vaults: VaultEdge[], first: number, after?: string | null): VaultsConnection {\n    let startIndex = 0;\n\n    // If cursor is provided, find the starting position\n    if (after) {\n      const cursorIndex = vaults.findIndex(edge => edge.cursor === after);\n      if (cursorIndex !== -1) {\n        startIndex = cursorIndex + 1;\n      }\n    }\n\n    // Get the slice of vaults for this page\n    const paginatedEdges = vaults.slice(startIndex, startIndex + first);\n    const hasNextPage = startIndex + first < vaults.length;\n    const endCursor = paginatedEdges.length > 0 ? paginatedEdges[paginatedEdges.length - 1].cursor : null;\n\n    return {\n      edges: paginatedEdges,\n      pageInfo: {\n        hasNextPage,\n        endCursor\n      },\n      totalCount: vaults.length\n    };\n  }\n\n  /**\n   * Fetches ALL vaults from subgraph (no pagination)\n   * @param filter - Optional filter criteria\n   * @returns Promise resolving to all vaults data from subgraph\n   * @private\n   */\n  private async getAllVaultsFromSubgraph(\n    filter?: VaultFilter\n  ): Promise<SteerResponse<VaultEdge[]>> {\n    try {\n      // Extract chainId from filter\n      const chainId = filter?.chainId;\n      if (!chainId) {\n        throw new Error('ChainId is required for subgraph');\n      }\n\n      // Get chain enum from chainId\n      const chain = chainIdToName(chainId);\n      \n      if (!chain) { \n        throw new Error(`Unsupported chainId: ${chainId}`);\n      }\n\n      // Get subgraph URL for this chain\n      const subgraphUrl = steerSubgraphConfig[chain];\n      if (!subgraphUrl) {\n        throw new Error(`No subgraph configured for chain: ${chain}`);\n      }\n\n      const beaconNames = this.getProtocolBeaconNames(filter?.protocol, chainId);\n\n      if (filter?.beaconName) {\n        beaconNames.push(filter.beaconName);\n      }\n\n      const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n      // Fetch all vaults from subgraph\n      const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n        subgraphUrl,\n        chainId,\n        showDeprecated: false,\n        showCurrentProtocol: uniqueBeaconNames.length > 0,\n        beaconNames: uniqueBeaconNames\n      });\n\n      // Get all supported protocols for this chain\n      const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n      \n      // Fetch APR data for all protocols in parallel\n      const aprPromises = supportedProtocols.map(protocol => \n        this.getAprs({ chainId, protocol }).catch(error => {\n          console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n          return { success: false, data: null };\n        })\n      );\n\n      const aprResults = await Promise.all(aprPromises);\n      \n      // Create a map of vault address to APR for quick lookup\n      const aprMap = new Map<string, number>();\n      aprResults && aprResults.forEach(aprResult => {\n        if (aprResult.success && aprResult.data) {\n          aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n            aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n          });\n        }\n      });\n\n      // Transform to VaultEdge array with APR data\n      const vaultEdges: VaultEdge[] = subgraphVaults.map((vault, index) => {\n        // Parse positions and compute tick range\n        const positions = vault.positions?.map(pos => ({\n          id: pos.id,\n          upperTick: parseInt(pos.upperTick),\n          lowerTick: parseInt(pos.lowerTick),\n          relativeWeight: pos.relativeWeight\n        }));\n\n        // Compute tick range from positions\n        let tickRange: { minLowerTick: number; maxUpperTick: number } | undefined;\n        if (positions && positions.length > 0) {\n          const lowerTicks = positions.map(p => p.lowerTick);\n          const upperTicks = positions.map(p => p.upperTick);\n          tickRange = {\n            minLowerTick: Math.min(...lowerTicks),\n            maxUpperTick: Math.max(...upperTicks)\n          };\n        }\n\n        return {\n          cursor: `subgraph_${chainId}_${index}`,\n          node: {\n            id: vault.id,\n            chainId: chainId,\n            vaultAddress: vault.id,\n            protocol: vault.beaconName || '',\n            beaconName: vault.beaconName || '',\n            protocolBaseType: vault.beaconName || '',\n            name: `${vault.token0Symbol}/${vault.token1Symbol}`,\n            feeApr: aprMap.get(vault.id.toLowerCase()),\n            stakingApr: undefined,\n            merklApr: undefined,\n            positions,\n            tickRange,\n            fees: vault.fees0 && vault.fees1 ? {\n              fees0: vault.fees0,\n              fees1: vault.fees1\n            } : undefined,\n            pool: {\n              id: vault.pool || '',\n              poolAddress: vault.pool || '',\n              feeTier: vault.feeTier || '',\n              tick: undefined,\n              liquidity: undefined,\n              volumeUSD: undefined,\n              totalValueLockedUSD: undefined\n            },\n            token0: {\n              id: vault.token0,\n              symbol: vault.token0Symbol,\n              name: vault.token0Symbol, // Use symbol as name since subgraph doesn't provide name\n              decimals: parseInt(vault.token0Decimals) || 18,\n              address: vault.token0,\n              chainId: chainId\n            },\n            token1: {\n              id: vault.token1,\n              symbol: vault.token1Symbol,\n              name: vault.token1Symbol, // Use symbol as name since subgraph doesn't provide name\n              decimals: parseInt(vault.token1Decimals) || 18,\n              address: vault.token1,\n              chainId: chainId\n            }\n          }\n        };\n      });\n\n      return {\n        data: vaultEdges,\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      console.error('Subgraph vault fetch failed:', error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to fetch vaults from subgraph'\n      };\n    }\n  }\n\n  /**\n   * Fallback method to fetch vaults from subgraph with pagination\n   * @param filter - Optional filter criteria\n   * @param first - Number of items to fetch (default: 50)\n   * @param after - Cursor for pagination (null for first page)\n   * @returns Promise resolving to paginated vaults data from subgraph\n   * @private\n   */\n  private async getVaultsFromSubgraph(\n    filter?: VaultFilter,\n    first: number = 50,\n    after?: string | null\n  ): Promise<SteerResponse<VaultsConnection>> {\n    try {\n      // Extract chainId from filter\n      const chainId = filter?.chainId;\n      if (!chainId) {\n        throw new Error('ChainId is required for subgraph fallback');\n      }\n\n      // Get chain enum from chainId\n\n      const chain = chainIdToName(chainId);\n      \n      if (!chain) { \n        throw new Error(`Unsupported chainId: ${chainId}`);\n      }\n\n      // Get subgraph URL for this chain\n      const subgraphUrl = steerSubgraphConfig[chain];\n      if (!subgraphUrl) {\n        throw new Error(`No subgraph configured for chain: ${chain}`);\n      }\n\n      const beaconNames = this.getProtocolBeaconNames(filter?.protocol, chainId);\n\n      if (filter?.beaconName) {\n        beaconNames.push(filter.beaconName);\n      }\n\n      const uniqueBeaconNames = [...new Set(beaconNames.filter(name => name.length > 0))];\n\n      // Fetch all vaults from subgraph\n      const subgraphVaults = await this.subgraphVaultClient.getAllVaultsFromSubgraph({\n        subgraphUrl,\n        chainId,\n        showDeprecated: false,\n        showCurrentProtocol: uniqueBeaconNames.length > 0,\n        beaconNames: uniqueBeaconNames\n      });\n\n      // Get all supported protocols for this chain\n      const supportedProtocols = getProtocolsForChainId(chainId, this.subgraphStudioKey);\n      \n      // Fetch APR data for all protocols in parallel\n      const aprPromises = supportedProtocols.map(protocol => \n        this.getAprs({ chainId, protocol }).catch(error => {\n          console.warn(`Failed to fetch APR for protocol ${protocol}:`, error);\n          return { success: false, data: null };\n        })\n      );\n\n      const aprResults = await Promise.all(aprPromises);\n      \n      // Create a map of vault address to APR for quick lookup\n      const aprMap = new Map<string, number>();\n      aprResults && aprResults.forEach(aprResult => {\n        if (aprResult.success && aprResult.data) {\n          aprResult?.data?.vaults && aprResult.data.vaults.forEach(vaultApr => {\n            aprMap.set(vaultApr.vaultAddress.toLowerCase(), vaultApr.apr.apr);\n          });\n        }\n      });\n\n      // Transform to VaultsConnection format with pagination and populate APR data\n      const vaultsConnection = this.subgraphVaultClient.transformToVaultsConnection(\n        subgraphVaults,\n        chainId,\n        first,\n        aprMap,\n        after\n      );\n\n      // Enhance vault data with APR information\n      if (vaultsConnection.edges) {\n        vaultsConnection.edges = vaultsConnection.edges.map(edge => ({\n          ...edge,\n          node: {\n            ...edge.node,\n            feeApr: aprMap.get(edge.node.vaultAddress.toLowerCase()) || edge.node.feeApr\n          }\n        }));\n      }\n\n      const filteredVaultsConnection = this.applyProtocolFilter(vaultsConnection, filter?.protocol);\n\n      return {\n        data: filteredVaultsConnection,\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      console.error('Subgraph vault fetch failed:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Gets tokens with pagination support\n   * @param filter - Optional filter criteria\n   * @param first - Number of items to fetch (default: 50)\n   * @param after - Cursor for pagination (null for first page)\n   * @returns Promise resolving to paginated tokens data\n   * \n   * @example\n   * ```typescript\n   * // Get first 100 tokens\n   * const tokens = await vaultClient.getTokens({ chainId: 1 }, 100);\n   * \n   * // Filter by symbol\n   * const usdcTokens = await vaultClient.getTokens({ symbol: 'USDC' });\n   * ```\n   */\n  public async getTokens(\n    filter?: TokenFilter,\n    first: number = 50,\n    after?: string | null\n  ): Promise<SteerResponse<TokensConnection>> {\n    try {\n      const response = await this.apiClient.tokens({\n        filter,\n        first,\n        after\n      });\n\n      if (!response.data?.tokens) {\n        return {\n          data: null,\n          status: response.status,\n          success: true\n        };\n      }\n\n      // Transform the response to match our interface\n      const transformedData: TokensConnection = {\n        edges: response.data.tokens.edges.map(edge => ({\n          cursor: edge.cursor,\n          node: {\n            id: edge.node.id,\n            symbol: edge.node.symbol,\n            name: edge.node.name,\n            decimals: edge.node.decimals,\n            chainId: edge.node.chainId,\n            address: edge.node.address\n          }\n        })),\n        pageInfo: {\n          hasNextPage: response.data.tokens.pageInfo.hasNextPage,\n          endCursor: response.data.tokens.pageInfo.endCursor ?? null\n        },\n        totalCount: response.data.tokens.totalCount\n      };\n\n      return {\n        data: transformedData,\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 501,\n        success: false,\n        error: 'getTokens is not supported for this configuration'\n      };\n    }\n  }\n\n  /**\n   * Gets pools with pagination support\n   * @param filter - Optional filter criteria\n   * @param first - Number of items to fetch (default: 50)\n   * @param after - Cursor for pagination (null for first page)\n   * @returns Promise resolving to paginated pools data\n   * \n   * @example\n   * ```typescript\n   * // Get first 50 pools for Ethereum\n   * const pools = await vaultClient.getPools({ chainId: 1 }, 50);\n   * \n   * // Filter by minimum liquidity\n   * const liquidPools = await vaultClient.getPools({ \n   *   chainId: 1, \n   *   minLiquidity: '1000000' \n   * });\n   * ```\n   */\n  public async getPools(\n    filter?: PoolFilter,\n    first: number = 50,\n    after?: string | null\n  ): Promise<SteerResponse<PoolsConnection>> {\n    try {\n      const response = await this.apiClient.pools({\n        filter,\n        first,\n        after\n      });\n\n      if (!response.data?.pools) {\n        return {\n          data: null,\n          status: response.status,\n          success: true\n        };\n      }\n\n      // Transform the response to match our interface\n      const transformedData: PoolsConnection = {\n        edges: response.data.pools.edges.map(edge => ({\n          cursor: edge.cursor,\n          node: {\n            id: edge.node.id,\n            chainId: edge.node.chainId,\n            feeTier: edge.node.feeTier,\n            token0: {\n              id: edge.node.token0?.id || '',\n              symbol: edge.node.token0?.symbol || '',\n              name: edge.node.token0?.name || '',\n              decimals: edge.node.token0?.decimals || 0,\n              address: edge.node.token0?.address || '',\n              chainId: edge.node.token0?.chainId || 0\n            },\n            token1: {\n              id: edge.node.token1?.id || '',\n              symbol: edge.node.token1?.symbol || '',\n              name: edge.node.token1?.name || '',\n              decimals: edge.node.token1?.decimals || 0,\n              address: edge.node.token1?.address || '',\n              chainId: edge.node.token1?.chainId || 0\n            }\n          }\n        })),\n        pageInfo: {\n          hasNextPage: response.data.pools.pageInfo.hasNextPage,\n          endCursor: response.data.pools.pageInfo.endCursor ?? null\n        },\n        totalCount: response.data.pools.totalCount\n      };\n\n      return {\n        data: transformedData,\n        status: response.status,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 501,\n        success: false,\n        error: 'getPools is not supported for this configuration'\n      };\n    }\n  }\n\n  /**\n   * Gets all vaults by fetching all pages automatically\n   * @param filter - Optional filter criteria\n   * @param batchSize - Number of items to fetch per batch (default: 100)\n   * @returns Promise resolving to all vaults data (includes pool information)\n   * \n   * @example\n   * ```typescript\n   * // Get all vaults for a specific chain\n   * const allVaults = await vaultClient.getAllVaults({ chainId: 1 });\n   * console.log(`Found ${allVaults.data?.length} vaults`);\n   * \n   * // Access pool information for each vault\n   * allVaults.data?.forEach(vault => {\n   *   console.log(`Vault ${vault.name}: Pool ${vault.pool.id} (${vault.pool.feeTier} fee)`);\n   * });\n   * ```\n   */\n  public async getAllVaults(\n    filter?: VaultFilter,\n    batchSize: number = 100\n  ): Promise<SteerResponse<VaultNode[]>> {\n    try {\n      const allVaults: VaultNode[] = [];\n      let hasNextPage = true;\n      let cursor: string | null = null;\n\n      while (hasNextPage) {\n        const response = await this.getVaults(filter, batchSize, cursor);\n        \n        if (!response.success || !response.data) {\n          return {\n            data: null,\n            status: response.status,\n            success: false,\n            error: response.error || 'Failed to fetch vaults'\n          };\n        }\n\n        allVaults.push(...response.data.edges.map(edge => edge.node));\n        hasNextPage = response.data.pageInfo.hasNextPage;\n        cursor = response.data.pageInfo.endCursor;\n      }\n\n      return {\n        data: allVaults,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Gets all tokens by fetching all pages automatically\n   * @param filter - Optional filter criteria\n   * @param batchSize - Number of items to fetch per batch (default: 100)\n   * @returns Promise resolving to all tokens data\n   */\n  public async getAllTokens(\n    filter?: TokenFilter,\n    batchSize: number = 100\n  ): Promise<SteerResponse<TokenNode[]>> {\n    try {\n      const allTokens: TokenNode[] = [];\n      let hasNextPage = true;\n      let cursor: string | null = null;\n\n      while (hasNextPage) {\n        const response = await this.getTokens(filter, batchSize, cursor);\n        \n        if (!response.success || !response.data) {\n          return {\n            data: null,\n            status: response.status,\n            success: false,\n            error: response.error || 'Failed to fetch tokens'\n          };\n        }\n\n        allTokens.push(...response.data.edges.map(edge => edge.node));\n        hasNextPage = response.data.pageInfo.hasNextPage;\n        cursor = response.data.pageInfo.endCursor;\n      }\n\n      return {\n        data: allTokens,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Gets all pools by fetching all pages automatically\n   * @param filter - Optional filter criteria\n   * @param batchSize - Number of items to fetch per batch (default: 100)\n   * @returns Promise resolving to all pools data\n   */\n  public async getAllPools(\n    filter?: PoolFilter,\n    batchSize: number = 100\n  ): Promise<SteerResponse<PoolNode[]>> {\n    try {\n      const allPools: PoolNode[] = [];\n      let hasNextPage = true;\n      let cursor: string | null = null;\n\n      while (hasNextPage) {\n        const response = await this.getPools(filter, batchSize, cursor);\n        \n        if (!response.success || !response.data) {\n          return {\n            data: null,\n            status: response.status,\n            success: false,\n            error: response.error || 'Failed to fetch pools'\n          };\n        }\n\n        allPools.push(...response.data.edges.map(edge => edge.node));\n        hasNextPage = response.data.pageInfo.hasNextPage;\n        cursor = response.data.pageInfo.endCursor;\n      }\n\n      return {\n        data: allPools,\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 501,\n        success: false,\n        error: 'getAllPools is not supported for this configuration'\n      };\n    }\n  }\n\n  /**\n   * Searches vaults by combining verified API-supported filters with local\n   * filtering over the merged vault result set for unsupported server-side fields.\n   */\n  public async searchVaults(\n    filter?: VaultFilter,\n  ): Promise<SteerResponse<VaultNode[]>> {\n    const response = await this.getAllVaults(filter);\n\n    if (!response.success || !response.data) {\n      return response;\n    }\n\n    return {\n      data: this.filterVaultNodes(response.data, filter || {}),\n      status: 200,\n      success: true,\n    };\n  }\n\n  public async getVaultByAddress(\n    vaultAddress: string,\n    filter?: VaultFilter,\n  ): Promise<SteerResponse<VaultNode | null>> {\n    const response = await this.searchVaults({\n      ...filter,\n      vaultAddress,\n    });\n\n    if (!response.success || !response.data) {\n      return {\n        data: null,\n        status: response.status,\n        success: response.success,\n        error: response.error,\n      };\n    }\n\n    return {\n      data: response.data[0] || null,\n      status: 200,\n      success: true,\n    };\n  }\n\n  public async getVaultsForPool(\n    poolAddress: string,\n    filter?: VaultFilter,\n  ): Promise<SteerResponse<VaultNode[]>> {\n    return this.searchVaults({\n      ...filter,\n      poolAddress,\n    });\n  }\n\n  public async getVaultsForToken(\n    tokenAddressOrSymbol: string,\n    filter?: VaultFilter,\n  ): Promise<SteerResponse<VaultNode[]>> {\n    const normalizedValue = tokenAddressOrSymbol.trim();\n    const isAddress = /^0x[a-fA-F0-9]{40}$/.test(normalizedValue);\n\n    return this.searchVaults({\n      ...filter,\n      ...(isAddress\n        ? { tokenAddress: normalizedValue }\n        : { tokenSymbol: normalizedValue }),\n    });\n  }\n\n  /**\n   * Gets APR data for vaults from the Steer Finance API\n   * @param filter - Filter containing chainId and protocol\n   * @returns Promise resolving to APR data for vaults\n   * \n   * @example\n   * ```typescript\n   * // Get APRs for Uniswap vaults on Nibiru (chainId: 6900)\n   * const aprs = await vaultClient.getAprs({ chainId: 6900, protocol: 'Uniswap' });\n   * \n   * if (aprs.success && aprs.data) {\n   *   aprs.data.vaults.forEach(vault => {\n   *     console.log(`Vault: ${vault.vaultAddress}`);\n   *     console.log(`APR: ${vault.apr.apr}% (${vault.apr.message})`);\n   *     console.log(`Beacon: ${vault.beaconName}`);\n   *   });\n   * }\n   * ```\n   */\n  public async getAprs(filter: AprFilter): Promise<SteerResponse<AprResponse>> {\n    try {\n      const { chainId, protocol } = filter;\n      \n      // Build the API URL\n      const apiUrl = `https://api.steer.finance/getAprs?chainId=${chainId}&dexName=${protocol}`;\n      \n      const response = await fetch(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n      });\n\n      if (!response.ok) {\n        return {\n          data: null,\n          status: response.status,\n          success: false,\n          error: `API request failed: ${response.statusText}`\n        };\n      }\n\n      const data: AprResponse = await response.json();\n\n      return {\n        data,\n        status: response.status,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 501,\n        success: false,\n        error: 'getAprs is not supported for this configuration'\n      };\n    }\n  }\n\n  /**\n   * Gets detailed APR data for a specific Blackhole vault from the Steer Finance API\n   * This includes snapshot analysis with historical APR data over different time periods\n   * \n   * @param params - Parameters containing vault address and chain ID\n   * @returns Promise resolving to detailed APR data including snapshot analysis\n   * \n   * @example\n   * ```typescript\n   * // Get detailed APR for a Blackhole vault on Avalanche\n   * const aprDetails = await vaultClient.getBlackholeAprDetailed({\n   *   vaultAddress: '0x5c1d454f08975c554f6b70a84fd8859fbdfcc069',\n   *   chainId: 43114\n   * });\n   * \n   * if (aprDetails.success && aprDetails.data) {\n   *   console.log(`Vault: ${aprDetails.data.vaultAddress}`);\n   *   console.log(`Beacon: ${aprDetails.data.beaconName}`);\n   *   console.log(`Current APR: ${aprDetails.data.apr.apr}% (${aprDetails.data.apr.message})`);\n   *   \n   *   // Access snapshot analysis\n   *   aprDetails.data.snapshotAnalysis.forEach(snapshot => {\n   *     console.log(`Period ${snapshot.period}:`);\n   *     console.log(`  Duration: ${snapshot.durationHours} hours`);\n   *     console.log(`  TVL: $${snapshot.tvlUSD}`);\n   *     console.log(`  Fees: $${snapshot.feesUSD}`);\n   *     console.log(`  APR: ${snapshot.apr}%`);\n   *   });\n   * }\n   * ```\n   */\n  public async getBlackholeVaultApr(params: BlackholeAprDetailedParams): Promise<SteerResponse<BlackholeAprDetailedResponse>> {\n    try {\n      const { vaultAddress, chainId } = params;\n      \n      // Build the API URL\n      const apiUrl = `https://api.steer.finance/blackhole/apr-detailed?vaultAddress=${vaultAddress}&chainId=${chainId}`;\n      \n      const response = await fetch(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n      });\n\n      if (!response.ok) {\n        return {\n          data: null,\n          status: response.status,\n          success: false,\n          error: `API request failed: ${response.statusText}`\n        };\n      }\n\n      const data: BlackholeAprDetailedResponse = await response.json();\n\n      return {\n        data,\n        status: response.status,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Failed to fetch Blackhole APR details'\n      };\n    }\n  }\n\n  /**\n   * Gets the latest vaults from the subgraph\n   */\n  public async getLatestVaults<T>(): Promise<SteerResponse<T>> {\n    const query = `      \n        query latestVaults{\n            vaults(first: 250, skip: 0, orderBy: createdAt, orderDirection: desc, where: {\n                gasUsed_gt: 0\n            } ) {\n                id\n                beaconName\n                createdAt\n                gasUsed\n                token1Symbol\n                token0Symbol\n                token0\n                token1\n                token0Name\n                token1Name\n                strategyToken {\n                  id\n                  name\n                  creator {\n                    id\n                  }\n                }\n            }\n        }\n    `;\n\n    return this.executeSubgraphQuery<T>(query);\n  }\n\n  /**\n   * Deposits tokens into a vault\n   * @param params The deposit parameters\n   */\n  public async deposit(params: VaultDepositParams): Promise<SteerResponse<Hash>> {\n    return this.depositClient.deposit(params);\n  }\n\n  /**\n   * Prepares the transaction data for depositing tokens into a vault without executing it\n   * @param params The deposit parameters\n   */\n  public async prepareDepositTx(params: VaultDepositParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs:  {\n        internalType: string;\n        name: string;\n        type: string;\n      }[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [Address, bigint, bigint, bigint, bigint, Address] | readonly [bigint, bigint, bigint, bigint, Address];\n  }>> {\n    return this.depositClient.prepareDepositTx(params);\n  }\n\n  /**\n   * Gets the deposit ratio for a vault\n   * @param vaultAddress The vault address\n   */\n  public async getDepositRatio(vaultAddress: Address, zeroForOne: boolean): Promise<SteerResponse<VaultDetailsResponse>> {\n    try {\n      const ratioResponse = await this.depositClient.getDepositRatio(vaultAddress, zeroForOne);\n      if (!ratioResponse.success || !ratioResponse.data) {\n        throw new Error(ratioResponse.error || 'Failed to get deposit ratio');\n      }\n\n      return {\n        data: {\n          details: ratioResponse.data.vaultDetails,\n          ratio: ratioResponse.data.ratio,\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Withdraws tokens from a vault\n   * @param params The withdrawal parameters\n   */\n  public async withdraw(params: VaultWithdrawParams): Promise<SteerResponse<Hash>> {\n    return this.withdrawClient.withdraw(params);\n  }\n\n  /**\n   * Prepares the transaction data for withdrawing tokens from a vault without executing it\n   * @param params The withdrawal parameters\n   */\n  public async prepareWithdrawTx(params: VaultWithdrawParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [\n      bigint,\n      bigint,\n      bigint,\n      Address\n    ];\n  }>> {\n    return this.withdrawClient.prepareWithdrawTx(params);\n  }\n\n  /**\n   * Calculates the amount of tokens that would be received for a given amount of LP tokens\n   * @param vaultAddress The vault address\n   * @param lpToken The amount of LP tokens to calculate for\n   */\n  public async getTokensFromLp(\n    vaultAddress: Address,\n    lpToken: bigint\n  ): Promise<SteerResponse<TokensFromLpResponse>> {\n    return this.withdrawClient.getTokensFromLp(vaultAddress, lpToken);\n  }\n\n  /**\n   * Approves spending of tokens for a vault\n   * @param params The approval parameters\n   */\n  public async approve(params: VaultApproveParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'approve',\n        args: [params.spender, params.amount],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the allowance for a vault token\n   * @param params The allowance parameters\n   */\n  public async allowance(params: VaultAllowanceParams): Promise<SteerResponse<bigint>> {\n    try {\n      const allowance = await this.publicClient.readContract({\n        address: params.vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'allowance',\n        args: [params.owner, params.spender],\n      });\n\n      return {\n        data: allowance,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the balance of a vault token for an account\n   * @param params The balance parameters\n   */\n  public async balanceOf(params: VaultBalanceParams): Promise<SteerResponse<bigint>> {\n    try {\n      const balance = await this.publicClient.readContract({\n        address: params.vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'balanceOf',\n        args: [params.account],\n      });\n\n      return {\n        data: balance,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the total supply of a vault token\n   * @param vaultAddress The vault address\n   */\n  public async totalSupply(vaultAddress: Address): Promise<SteerResponse<bigint>> {\n    try {\n      const totalSupply = await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'totalSupply',\n      });\n\n      return {\n        data: totalSupply,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the decimals of a vault token\n   * @param vaultAddress The vault address\n   */\n  public async decimals(vaultAddress: Address): Promise<SteerResponse<number>> {\n    try {\n      const decimals = await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'decimals',\n      });\n\n      return {\n        data: decimals,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the symbol of a vault token\n   * @param vaultAddress The vault address\n   */\n  public async symbol(vaultAddress: Address): Promise<SteerResponse<string>> {\n    try {\n      const result = await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'symbol',\n      });\n\n      return {\n        data: result,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the name of a vault token\n   * @param vaultAddress The vault address\n   */\n  public async name(vaultAddress: Address): Promise<SteerResponse<string>> {\n    try {\n      const result = await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'name',\n      });\n\n      return {\n        data: result,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async pool(vaultAddress: Address): Promise<SteerResponse<Address>> {\n    try {\n      const pool = await this.publicClient.readContract({\n        address: vaultAddress,\n        abi: VAULT_ABI,\n        functionName: 'pool',\n      });\n\n      return {\n        data: pool,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets a pool instance for a vault\n   * @param params The pool instance parameters\n   */\n  public async getPoolInstance(params: PoolInstanceParams): Promise<SteerResponse<PoolV3>> {\n    return this.depositClient.getPoolInstance(params);\n  }\n\n  /**\n   * Gets the corresponding token amount based on the provided token amount and ratio\n   * @param vaultAddress The vault address\n   * @param amount The amount of token to calculate the corresponding amount for\n   * @param zeroForOne If true, calculates token1 amount for given token0, if false calculates token0 amount for given token1\n   */\n  public async getCorrespondingTokenAmount(\n    vaultAddress: Address,\n    amount: bigint,\n    zeroForOne: boolean\n  ): Promise<SteerResponse<bigint>> {\n    return this.depositClient.getCorrespondingTokenAmount(vaultAddress, amount, zeroForOne);\n  }\n\n  // Single-Asset Deposit Methods\n\n  /**\n   * Previews a single-asset deposit by running all simulation steps\n   * This allows users to see the expected outcome before executing the transaction\n   * \n   * @param params - Single-asset deposit parameters\n   * @param poolAddress - Address of the pool (must be provided separately)\n   * @returns Promise resolving to the complete deposit preview\n   * \n   * @example\n   * ```typescript\n   * const preview = await vaultClient.previewSingleAssetDeposit({\n   *   assets: parseEther('100'),\n   *   receiver: userAddress,\n   *   vault: vaultAddress,\n   *   isToken0: true,\n   *   depositSlippagePercent: 5n,\n   *   swapSlippageBP: 500,\n   *   ammType: AMMType.UniswapV3,\n   *   singleAssetDepositContract: contractAddress\n   * }, poolAddress);\n   * \n   * if (preview.success) {\n   *   console.log('Expected LP tokens:', preview.data.lpEstimation.lpTokens);\n   *   console.log('Swap amount:', preview.data.swapAmount);\n   * }\n   * ```\n   */\n  public async previewSingleAssetDeposit(\n    params: SingleAssetDepositParams,\n    poolAddress: Address\n  ): Promise<SteerResponse<SingleAssetDepositPreview>> {\n    return this.singleAssetDepositClient.previewDeposit(params, poolAddress);\n  }\n\n  /**\n   * Executes a single-asset deposit transaction\n   * \n   * @param params - Single-asset deposit parameters\n   * @returns Promise resolving to the transaction hash\n   * \n   * @example\n   * ```typescript\n   * const result = await vaultClient.singleAssetDeposit({\n   *   assets: parseEther('100'),\n   *   receiver: userAddress,\n   *   vault: vaultAddress,\n   *   isToken0: true,\n   *   depositSlippagePercent: 5n,\n   *   swapSlippageBP: 500,\n   *   ammType: AMMType.UniswapV3,\n   *   singleAssetDepositContract: contractAddress\n   * });\n   * \n   * if (result.success) {\n   *   console.log('Transaction hash:', result.data);\n   * }\n   * ```\n   */\n  public async singleAssetDeposit(params: SingleAssetDepositParams): Promise<SteerResponse<Hash>> {\n    return this.singleAssetDepositClient.deposit(params);\n  }\n\n  /**\n   * Prepares a single-asset deposit transaction without executing it\n   * Useful for batching transactions or custom execution logic\n   * \n   * @param params - Single-asset deposit parameters\n   * @returns Promise resolving to the prepared transaction data\n   */\n  public async prepareSingleAssetDepositTx(params: SingleAssetDepositParams) {\n    return this.singleAssetDepositClient.prepareDepositTx(params);\n  }\n\n  /**\n   * Validates single-asset deposit parameters\n   * \n   * @param params - Parameters to validate\n   * @throws Error if parameters are invalid\n   */\n  public validateSingleAssetDepositParams(params: SingleAssetDepositParams): void {\n    return this.singleAssetDepositClient.validateDepositParams(params);\n  }\n\n  // Reward Management Methods\n\n  /**\n   * Calculates pending rewards for a user from a vault\n   * This is a view function that doesn't modify state\n   * \n   * @param params - Parameters containing vault address and user address\n   * @returns Promise resolving to pending rewards data or zero values if function reverts\n   * \n   * @example\n   * ```typescript\n   * const pendingRewards = await vaultClient.calculatePendingRewards({\n   *   vaultAddress: '0x123...',\n   *   user: '0xabc...'\n   * });\n   * \n   * if (pendingRewards.success && pendingRewards.data) {\n   *   console.log('Rewards:', pendingRewards.data.rewards);\n   *   console.log('Extra Rewards:', pendingRewards.data.extraRewards);\n   * }\n   * ```\n   */\n  public async calculatePendingRewards(params: PendingRewardsParams): Promise<SteerResponse<PendingRewardsResponse>> {\n    try {\n      const result = await this.publicClient.readContract({\n        address: params.vaultAddress,\n        abi: REWARD_FUNCTIONS_ABI,\n        functionName: 'calculatePendingRewards',\n        args: [params.user],\n      }) as [bigint, bigint];\n\n      return {\n        data: {\n          rewards: result[0],\n          extraRewards: result[1]\n        },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      // If the function reverts or doesn't exist, return zero values\n      console.warn('calculatePendingRewards failed, returning zero values:', error);\n      return {\n        data: {\n          rewards: 0n,\n          extraRewards: 0n\n        },\n        status: 200,\n        success: true,\n      };\n    }\n  }\n\n  /**\n   * Claims pending rewards from a vault using the claimBlackHolePendingRewards function\n   * \n   * @param params - Parameters containing vault address\n   * @returns Promise resolving to transaction hash or zero values if function reverts\n   * \n   * @example\n   * ```typescript\n   * const claimResult = await vaultClient.claimPendingRewards({\n   *   vaultAddress: '0x123...'\n   * });\n   * \n   * if (claimResult.success && claimResult.data) {\n   *   console.log('Claim transaction hash:', claimResult.data);\n   * }\n   * ```\n   */\n  public async claimBlackholePendingRewards(params: ClaimRewardsParams): Promise<SteerResponse<Hash | PendingRewardsResponse>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.vaultAddress,\n        abi: REWARD_FUNCTIONS_ABI,\n        functionName: 'claimUserRewards',\n        args: [],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error('claimBlackHolePendingRewards failed, error:', error);\n      // If the function reverts or doesn't exist, return zero values instead of transaction hash\n      console.warn('claimBlackHolePendingRewards failed, returning zero values:', error);\n      return {\n        data: {\n          rewards: 0n,\n          extraRewards: 0n\n        },\n        status: 200,\n        success: true,\n      };\n    }\n  }\n\n} \n","import { createClient } from '@steerprotocol/api-sdk';\nimport type { PublicClient, WalletClient } from 'viem';\nimport { SmartRewards } from './SmartRewards.js';\nimport { getApiUrl } from '../const/api.js';\n\n/**\n * Client for interacting with Steer Protocol's Smart Rewards system.\n * This client provides functionality for managing rewards, claims, and campaigns.\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SmartRewardsClient } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * // Initialize the Smart Rewards client\n * const rewardsClient = new SmartRewardsClient(publicClient, walletClient, 'production');\n * \n * // Get user's reward summary\n * const summary = await rewardsClient.getRewardSummary(userAddress, chainId);\n * \n * // Claim rewards\n * const tx = await rewardsClient.claimCampaignRewards(userAddress, chainId);\n * ```\n * \n * @group Client\n */\nexport class SmartRewardsClient extends SmartRewards {\n  /**\n   * Creates a new instance of SmartRewardsClient\n   * @param publicClient - The public client for reading from the blockchain\n   * @param walletClient - The wallet client for writing to the blockchain\n   * @param environment - The environment to use ('production' or 'development')\n   * @param version - Optional API version to use (defaults to 'v1')\n   */\n  constructor(\n    publicClient: PublicClient, \n    walletClient: WalletClient,\n    environment: 'production' | 'development',\n    version: 'v1' = 'v1'\n  ) {\n    const apiUrl = getApiUrl(environment, version);\n    const apiClient = createClient(apiUrl);\n    super(apiClient, publicClient, walletClient);\n  }\n}","/**\n * @fileoverview Pool Query Adapter - Provides GraphQL queries for different DEX protocols\n * @module PoolQueryAdapter\n */\n\nimport { isShadowProtocol, Protocol } from '../const/index.js';\n\n/**\n * GraphQL query to fetch top pools from Shadow protocol by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_SHADOW = `\nquery {\n\tclPools(first: $limit, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Uniswap V3 protocol by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_UNISWAP = `\nquery {\n\tpools(first: $limit, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Thruster protocol by TVL\n * Returns pools ordered by totalValueLockedETH in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_THRUSTER = `\nquery {\n\tpools(first: 500, orderBy: totalValueLockedETH, orderDirection: desc, subgraphError: allow){\n\t\tid\n    volumeUSD\n    totalValueLockedETH\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from PoolShark protocol by volume\n * Returns limit pools ordered by volumeUsd in descending order\n * @internal\n */\nconst FETCH_POOLSHARK_TOP_POOLS = `\n{\n  limitPools(first: 500, orderBy: volumeUsd, orderDirection: desc, subgraphError: allow) {\n    id\n    volumeUsd\n    totalValueLockedEth\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier {\n      id\n    }\n  }\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Algebra-based protocols by volume\n * Returns pools ordered by volumeUSD in descending order\n * @internal\n */\nconst FETCH_TOP_POOLS_ALGEBRA = `\nquery {\n\tpools(first: 500, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Ocelex protocol\n * Returns first 500 pools with basic volume and liquidity data\n * @internal\n */\nconst FETCH_TOP_POOLS_OCELEX = `\nquery {\n\tpools(first: 500){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from Kyo protocol by volume\n * Returns pools ordered by volumeUSD in descending order with fee information\n * @internal\n */\nconst FETCH_TOP_POOLS_KYO = `\nquery {\n\tpools(first: 500, orderBy: volumeUSD, orderDirection: desc, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    fee\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch top pools from ArthSwap protocol by volume\n * Returns pools ordered by volumeUSD_DESC with fee tier information\n * @internal\n */\nconst FETCH_ARTHSWAP_TOP_POOLS = `\n{\n  pools(limit:500, orderBy: volumeUSD_DESC) {\n    id\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    tick\n    liquidity\n  }\n}\n`;\n\n/**\n * Returns the appropriate GraphQL query for fetching top pools based on protocol type\n * \n * @param protocol - The DEX protocol to fetch pools from\n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @returns GraphQL query string for fetching top pools\n * \n * @example\n * ```typescript\n * const query = getTopPoolsQuery(Protocol.UniswapV3, false);\n * // Returns FETCH_TOP_POOLS_UNISWAP query\n * ```\n */\nexport const getTopPoolsQuery = (protocol: Protocol, isAlgebraPool: boolean): string => {\n  if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n    return FETCH_ARTHSWAP_TOP_POOLS;\n  } else if (protocol === Protocol.Thruster) {\n    return FETCH_TOP_POOLS_THRUSTER;\n  } else if (protocol === Protocol.Ocelex) {\n    return FETCH_TOP_POOLS_OCELEX;\n  } else if (protocol === Protocol.PoolShark) {\n    return FETCH_POOLSHARK_TOP_POOLS;\n  } else if (protocol === Protocol.Kyo) {\n    return FETCH_TOP_POOLS_KYO;\n  } else if (isShadowProtocol(protocol)) {\n    return FETCH_TOP_POOLS_SHADOW;\n  } else if (isAlgebraPool) {\n    return FETCH_TOP_POOLS_ALGEBRA;\n  } else {\n    return FETCH_TOP_POOLS_UNISWAP;\n  }\n};\n\n// --- Token Pool Queries for fetchPoolsForTokens ---\n\n/**\n * GraphQL query to fetch pools containing a specific token from Algebra-based protocols\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_ALGEBRA = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Ocelex protocol\n * Returns up to 50 pools that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_OCELEX = `\nquery pools($token: ID!) {\n\tpools(first: 50, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from ArthSwap protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_ARTHSWAP = `\nquery pools($token: String!) {\n\tpools(limit: 50, orderBy: volumeUSD_DESC, where: {\n    OR: [\n      {\n\t\t\t\ttoken0Id_eq: $token\n      }\n      {\n        token1Id_eq: $token\n      }\n    ]\n  }){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Uniswap V3 protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_UNISWAP = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Shadow protocol\n * Returns up to 50 CL pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_SHADOW = `\nquery pools($token: String!) {\n\tclPools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from PoolShark protocol\n * Returns up to 50 limit pools ordered by TVL that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_POOLSHARK = `\nquery pools($token: String!) {\n\tlimitPools(first: 50, orderBy: totalValueLockedEth, orderDirection: desc, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }, subgraphError: allow){\n\t\tid\n    volumeUsd\n    totalValueLockedEth\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier {\n      id\n    }\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token0 from Lynex protocol\n * Returns up to 50 pools ordered by volume where token is the first token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_LYNEX_TOKEN0 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    token0: $token\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token1 from Lynex protocol\n * Returns up to 50 pools ordered by volume where token is the second token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_LYNEX_TOKEN1 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    token1: $token\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token0 from Thruster protocol\n * Returns up to 50 pools ordered by TVL where token is the first token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_THRUSTER_TOKEN0 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: totalValueLockedETH, orderDirection: desc, where: {\n\t\ttoken0: $token\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    totalValueLockedETH\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools where specified token is token1 from Thruster protocol\n * Returns up to 50 pools ordered by TVL where token is the second token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_THRUSTER_TOKEN1 = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: totalValueLockedETH, orderDirection: desc, where: {\n\t\ttoken1: $token\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    totalValueLockedETH\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * GraphQL query to fetch pools containing a specific token from Kyo protocol\n * Returns up to 50 pools ordered by volume that contain the specified token\n * @internal\n */\nexport const FETCH_TOKEN_POOLS_KYO = `\nquery pools($token: String!) {\n\tpools(first: 50, orderBy: volumeUSD, orderDirection: desc, where: {\n    or: [\n      {\n\t\t\t\ttoken0: $token\n      }\n      {\n        token1: $token\n      }\n    ]\n  }, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    fee\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`;\n\n/**\n * Returns the appropriate GraphQL query for fetching pools containing a specific token\n * \n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @param protocol - The DEX protocol to fetch pools from\n * @returns GraphQL query string for fetching token pools\n * \n * @example\n * ```typescript\n * const query = getTokenPoolsQueryByAddress(false, Protocol.UniswapV3);\n * // Returns FETCH_TOKEN_POOLS_UNISWAP query\n * ```\n */\nexport const getTokenPoolsQueryByAddress = (isAlgebraPool: boolean, protocol: Protocol) => {\n  if (isAlgebraPool) {\n    if (protocol === Protocol.Ocelex) {\n      return FETCH_TOKEN_POOLS_OCELEX;\n    }\n    return FETCH_TOKEN_POOLS_ALGEBRA;\n  } else if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n    return FETCH_TOKEN_POOLS_ARTHSWAP;\n  } else if (protocol === Protocol.PoolShark) {\n    return FETCH_TOKEN_POOLS_POOLSHARK;\n  } else if (protocol === Protocol.Kyo) {\n    return FETCH_TOKEN_POOLS_KYO;\n  } else if (isShadowProtocol(protocol)) {\n    return FETCH_TOKEN_POOLS_SHADOW;\n  } else {\n    return FETCH_TOKEN_POOLS_UNISWAP;\n  }\n};\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Algebra-based protocols\n * Returns pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_ALGEBRA = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Ocelex protocol\n * Returns pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_OCELEX = `\nquery pools($pool: ID!) {\n\tpool(id: $pool){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Uniswap V3 protocol\n * Returns comprehensive pool details including fees, TVL, and volume data\n * @internal\n */\nconst FETCH_POOL_DETAILS_UNISWAP = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    feeTier\n    totalValueLockedETH\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Shadow protocol\n * Returns CL pool details including tokens, volume, tick, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_SHADOW = `\nquery pools($pool: String! ) {\n\tclPool(id: $pool, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    feeTier\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from PoolShark protocol\n * Returns limit pool details including tokens, volume, and fee information\n * @internal\n */\nconst FETCH_POOL_DETAILS_POOLSHARK = `\nquery pools($pool: String! ) {\n\tlimitPools(where: {id: $pool}){\n\t\tid\n    volumeUsd\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    feeTier {\n      id\n    }\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from ArthSwap protocol\n * Returns pool details including tokens, volume, fee tier, and liquidity\n * @internal\n */\nconst FETCH_POOL_DETAILS_ARTHSWAP = `\nquery pools($pool: String! ) {\n\tpools(where: {id_eq: $pool}){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n    }\n    token1 {\n      id\n      name\n      symbol\n    }\n    feeTier\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * GraphQL query to fetch detailed information for a specific pool from Kyo protocol\n * Returns pool details including tokens, volume, fee, and liquidity with decimals\n * @internal\n */\nconst FETCH_POOL_DETAILS_KYO = `\nquery pools($pool: String! ) {\n\tpool(id: $pool, subgraphError: allow){\n\t\tid\n    volumeUSD\n    token0 {\n      id\n      name\n      symbol\n      decimals\n    }\n    token1 {\n      id\n      name\n      symbol\n      decimals\n    }\n    fee\n    volumeToken0\n    volumeToken1\n    tick\n    liquidity\n\t}\n}\n`\n\n/**\n * Returns the appropriate GraphQL query for fetching detailed pool information\n * \n * @param isAlgebraPool - Whether the protocol is based on Algebra\n * @param protocol - The DEX protocol to fetch pool details from (optional)\n * @returns GraphQL query string for fetching pool details\n * \n * @example\n * ```typescript\n * const query = getPoolDetailsQuery(false, Protocol.UniswapV3);\n * // Returns FETCH_POOL_DETAILS_UNISWAP query\n * ```\n */\nexport const getPoolDetailsQuery = (isAlgebraPool: boolean, protocol?: Protocol) => {\n    if (protocol === Protocol.ArthSwap || protocol === Protocol.ThickV2) {\n      return FETCH_POOL_DETAILS_ARTHSWAP\n    } else if (protocol === Protocol.Ocelex) {\n      return FETCH_POOL_DETAILS_OCELEX\n    } else if (protocol === Protocol.PoolShark) {\n      return FETCH_POOL_DETAILS_POOLSHARK\n    } else if (protocol === Protocol.Kyo) {\n      return FETCH_POOL_DETAILS_KYO;\n    } else if (protocol && isShadowProtocol(protocol)) {\n      return FETCH_POOL_DETAILS_SHADOW;\n    } else if (isAlgebraPool) {\n      return FETCH_POOL_DETAILS_ALGEBRA;\n    } else {\n      return FETCH_POOL_DETAILS_UNISWAP\n    }\n  }","import type { PublicClient } from 'viem';\nimport { PoolData, SteerResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { \n  Protocol, \n  Chain\n} from '../const/chain.js';\nimport { \n  chainIdToName, \n  getProtocolSubgraphURL\n} from '../const/index.js';\nimport { isAlgebraProtocol } from '../const/protocol.js';\nimport { getTopPoolsQuery, getTokenPoolsQueryByAddress, getPoolDetailsQuery } from '../utils/PoolQueryAdapter.js';\n\n/**\n * GraphQL token data interface representing token information from subgraph responses\n * @interface GraphQLTokenData\n */\nexport interface GraphQLTokenData {\n  /** Token symbol (e.g., \"ETH\", \"USDC\") */\n  symbol: string;\n  /** Token contract address */\n  id: string;\n  /** Number of decimal places for the token */\n  decimals: string;\n  /** Human-readable token name */\n  name: string;\n}\n\n/**\n * GraphQL pool data interface representing pool information from subgraph responses\n * @interface GraphQLPoolData\n */\nexport interface GraphQLPoolData {\n  /** Pool contract address */\n  id: string;\n  /** First token in the pool */\n  token0: GraphQLTokenData;\n  /** Second token in the pool */\n  token1: GraphQLTokenData;\n  /** 24-hour trading volume in USD */\n  volumeUSD: string;\n  /** Current tick of the pool */\n  tick: string;\n  /** Total liquidity in the pool */\n  liquidity: string;\n  /** Fee tier for the pool (optional) */\n  feeTier?: string;\n  /** 24-hour volume of token0 (optional) */\n  volumeToken0?: string;\n  /** 24-hour volume of token1 (optional) */\n  volumeToken1?: string;\n  /** Total value locked in ETH (optional) */\n  totalValueLockedETH?: string;\n  /** Alternative field name for volume USD (optional) */\n  volumeUsd?: string;\n  /** Alternative field name for TVL in ETH (optional) */\n  totalValueLockedEth?: string;\n}\n\n/**\n * Filter criteria for querying pools\n * @interface PoolFilter\n */\nexport interface PoolFilter {\n  /** Chain ID to filter pools by */\n  chainId?: number;\n  /** Protocol to filter pools by */\n  protocol?: Protocol;\n  /** Exact pool address/id to look up */\n  poolAddress?: string;\n  /** Minimum volume in USD to filter pools */\n  minVolumeUSD?: number;\n  /** Token address to find pools containing this token */\n  tokenAddress?: string;\n  /** Multiple token addresses to find pools for */\n  tokenAddresses?: string[];\n  /** Token symbol to find pools containing this token */\n  tokenSymbol?: string;\n  /** Multiple token symbols to find pools for */\n  tokenSymbols?: string[];\n  /** Maximum number of pools to return */\n  limit?: number;\n}\n\n// GraphQL response interfaces (currently unused but kept for future use)\n// interface GraphQLResponse<T> {\n//   data: T;\n//   errors?: Array<{ message: string }>;\n// }\n\n/**\n * Response interface for top pools query\n * @interface TopPoolsResponse\n * @internal\n */\ninterface TopPoolsResponse {\n  /** Standard pools array */\n  pools: GraphQLPoolData[];\n  /** Limit pools array (used by some protocols) */\n  limitPools?: GraphQLPoolData[];\n  /** CL pools array (used by some protocols) */\n  clPools?: GraphQLPoolData[];\n}\n\n/**\n * Response interface for pool details query\n * @interface PoolDetailsResponse\n * @internal\n */\ninterface PoolDetailsResponse {\n  /** Single pool data */\n  pool: GraphQLPoolData;\n  /** Single limit pool data (used by some protocols) */\n  limitPool?: GraphQLPoolData;\n  /** Single CL pool data (used by some protocols) */\n  clPool?: GraphQLPoolData;\n}\n\n/**\n * Response interface for pools by token query\n * @interface PoolsByTokenResponse\n * @internal\n */\ninterface PoolsByTokenResponse {\n  /** Standard pools array */\n  pools?: GraphQLPoolData[];\n  /** Limit pools array (used by some protocols) */\n  limitPools?: GraphQLPoolData[];\n  /** Token pools array (used by some protocols) */\n  tokenPools?: GraphQLPoolData[];\n  /** CL pools array (used by some protocols) */\n  clPools?: GraphQLPoolData[];\n}\n\n/**\n * Client for fetching pool data from various DEX protocol subgraphs\n * \n * @example\n * ```typescript\n * import { createPublicClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { PoolClient } from '@steerprotocol/sdk';\n * \n * const client = createPublicClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * const poolClient = new PoolClient(client, 'your-subgraph-studio-key');\n * \n * // Fetch top pools\n * const topPools = await poolClient.getTopPools(100, Protocol.Uniswap, 1);\n * ```\n * \n * @extends SubgraphClient\n * @group Pool\n */\nexport class PoolClient extends SubgraphClient {\n  /** Public client for blockchain interactions */\n  protected readonly publicClient: PublicClient;\n  /** Default timeout for GraphQL queries in milliseconds */\n  private readonly defaultTimeout: number = 60000;\n  /** Counter for tracking API call metrics */\n  private apiCallCount: number = 0;\n  /** Subgraph Studio API key for rate limiting */\n  private readonly subgraphStudioKey: string;\n\n  /**\n   * Creates a new PoolClient instance\n   * \n   * @param client - Public client for read-only blockchain interactions\n   * @param subgraphStudioKey - Optional Subgraph Studio API key for higher rate limits\n   * \n   * @example\n   * ```typescript\n   * const poolClient = new PoolClient(client, 'your-api-key');\n   * ```\n   */\n  constructor(client: PublicClient, subgraphStudioKey: string = '') {\n    super(client);\n    this.publicClient = client;\n    this.subgraphStudioKey = subgraphStudioKey;\n  }\n\n  /**\n   * Resets the API call counter for metrics tracking\n   * \n   * @example\n   * ```typescript\n   * poolClient.resetMetrics();\n   * ```\n   */\n  public resetMetrics(): void {\n    this.apiCallCount = 0;\n  }\n\n  /**\n   * Gets current metrics for monitoring API usage\n   * \n   * @returns Object containing current metrics\n   * \n   * @example\n   * ```typescript\n   * const metrics = poolClient.getMetrics();\n   * console.log(`API calls made: ${metrics.apiCallCount}`);\n   * ```\n   */\n  public getMetrics(): { apiCallCount: number } {\n    return {\n      apiCallCount: this.apiCallCount,\n    };\n  }\n\n  private normalizeAddress(value?: string): string {\n    return value?.toLowerCase() || '';\n  }\n\n  private normalizeSymbol(value?: string): string {\n    return value?.trim().toLowerCase() || '';\n  }\n\n  private dedupePools(pools: GraphQLPoolData[]): GraphQLPoolData[] {\n    const seen = new Set<string>();\n    const deduped: GraphQLPoolData[] = [];\n\n    pools.forEach((pool) => {\n      const key = this.normalizeAddress(pool.id);\n      if (!key || seen.has(key)) {\n        return;\n      }\n\n      seen.add(key);\n      deduped.push(pool);\n    });\n\n    return deduped;\n  }\n\n  private filterPoolsBySymbols(\n    pools: GraphQLPoolData[],\n    symbols: string[],\n  ): GraphQLPoolData[] {\n    if (symbols.length === 0) {\n      return pools;\n    }\n\n    const normalizedSymbols = new Set(\n      symbols.map((symbol) => this.normalizeSymbol(symbol)).filter(Boolean),\n    );\n\n    return pools.filter((pool) => {\n      const token0Symbol = this.normalizeSymbol(pool.token0?.symbol);\n      const token1Symbol = this.normalizeSymbol(pool.token1?.symbol);\n\n      return normalizedSymbols.has(token0Symbol) || normalizedSymbols.has(token1Symbol);\n    });\n  }\n\n  private applyPoolSearchResultFilters(\n    pools: GraphQLPoolData[],\n    filter: PoolFilter,\n  ): GraphQLPoolData[] {\n    let filteredPools = this.dedupePools(pools);\n\n    if (typeof filter.minVolumeUSD === 'number') {\n      filteredPools = filteredPools.filter((pool) => {\n        const volumeUSD = parseFloat(pool.volumeUSD || pool.volumeUsd || '0');\n        return !Number.isNaN(volumeUSD) && volumeUSD >= filter.minVolumeUSD!;\n      });\n    }\n\n    if (typeof filter.limit === 'number' && filter.limit >= 0) {\n      filteredPools = filteredPools.slice(0, filter.limit);\n    }\n\n    return filteredPools;\n  }\n\n  private async searchPoolsBySymbols(\n    filter: Required<Pick<PoolFilter, 'chainId' | 'protocol'>> & PoolFilter,\n    symbols: string[],\n  ): Promise<SteerResponse<GraphQLPoolData[]>> {\n    // Symbol relation filtering is not portable across all supported AMM subgraphs.\n    // Use bounded top-pools fetch plus local symbol filtering as the baseline path.\n    const boundedLimit = Math.min(Math.max(filter.limit ?? 200, 1), 500);\n    const topPools = await this.getTopPools(boundedLimit, filter.protocol, filter.chainId);\n\n    if (!topPools.success || !topPools.data) {\n      return topPools;\n    }\n\n    const symbolMatches = this.filterPoolsBySymbols(topPools.data, symbols);\n\n    return {\n      data: this.applyPoolSearchResultFilters(symbolMatches, filter),\n      status: 200,\n      success: true,\n    };\n  }\n\n  /**\n   * Fetches data from GraphQL endpoint with retry logic for rate limits\n   * \n   * @param query - GraphQL query string\n   * @param variables - Variables for the GraphQL query\n   * @param protocol - Protocol to query\n   * @param chainId - Chain ID to query\n   * @returns Promise containing the response data\n   * \n   * @throws {Error} When subgraph endpoint is not available\n   * @throws {Error} When rate limit is exceeded after max retries\n   * @throws {Error} When GraphQL query times out\n   * \n   * @internal\n   */\n  private async fetchFromGraph<T>(\n    query: string,\n    variables: Record<string, unknown>,\n    protocol: Protocol,\n    chainId: number\n  ): Promise<SteerResponse<T>> {\n    try {\n      const chainName = chainIdToName(chainId);\n      const endpoint = getProtocolSubgraphURL(protocol, chainName as Chain, this.subgraphStudioKey);\n\n      if (!endpoint) {\n        throw new Error(`No subgraph endpoint available for protocol ${protocol} on chain ${chainName}`);\n      }\n\n      const MAX_RETRIES = 3;\n      const RETRY_DELAY_MS = 11000;\n\n      const fetchWithRetry = async (retries = 0): Promise<T> => {\n        const response = await fetch(endpoint, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n          body: JSON.stringify({ query, variables }),\n        });\n\n        const data = await response.json() as { data: T; error?: string; errors?: Array<{ message: string }> };\n\n        if (data.error && typeof data.error === \"string\" && data.error.includes(\"surpassed your query allowance\")) {\n          if (retries < MAX_RETRIES) {\n            console.warn(`Rate limit hit for ${endpoint}, retrying in ${RETRY_DELAY_MS / 1000}s (attempt ${retries + 1})`);\n            await new Promise(res => setTimeout(res, RETRY_DELAY_MS));\n            return fetchWithRetry(retries + 1);\n          } else {\n            throw new Error(`Rate limit exceeded after ${MAX_RETRIES} retries: ${data.error}`);\n          }\n        }\n\n        if (data.error) {\n          throw new Error(`GraphQL endpoint error: ${data.error}`);\n        }\n\n        if (data.errors) {\n          throw new Error(`GraphQL errors: ${JSON.stringify(data.errors)}`);\n        }\n\n        return data.data;\n      };\n\n      this.apiCallCount++;\n      console.log(\"Total API calls:\", this.apiCallCount);\n\n      const timeoutPromise = new Promise<never>((_, reject) => {\n        setTimeout(\n          () => reject(new Error(\"GraphQL query timeout\")),\n          this.defaultTimeout\n        );\n      });\n\n      const data = await Promise.race([fetchWithRetry(), timeoutPromise]);\n\n      return {\n        data: data as T,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Fetches the top pools for a specific protocol by trading volume\n   * \n   * @param count - Number of pools to fetch (default: 500)\n   * @param protocol - Protocol to fetch pools from\n   * @param chainId - Chain ID to fetch pools from\n   * @returns Promise containing an array of top pools\n   * \n   * @example\n   * ```typescript\n   * // Get top 100 Uniswap V3 pools on Ethereum\n   * const topPools = await poolClient.getTopPools(100, Protocol.Uniswap, 1);\n   * if (topPools.success) {\n   *   console.log(`Found ${topPools.data.length} pools`);\n   * }\n   * ```\n   * \n   * @throws {Error} When failed to fetch pools from subgraph\n   */\n  public async getTopPools(\n    count: number = 500,\n    protocol: Protocol,\n    chainId: number\n  ): Promise<SteerResponse<GraphQLPoolData[]>> {\n    try {\n      const isAlgebraPool = isAlgebraProtocol(protocol);\n      const query = getTopPoolsQuery(protocol, isAlgebraPool);\n\n      console.log(`[Chain ${chainId}] [Protocol ${protocol}] 📊 Fetching top ${count} pools from the subgraph...`);\n\n      const response = await this.fetchFromGraph<TopPoolsResponse>(\n        query,\n        { limit: count },\n        protocol,\n        chainId\n      );\n\n      if (!response.success || !response.data) {\n        throw new Error(response.error || 'Failed to fetch pools');\n      }\n\n      const pools = response.data.pools || response.data.limitPools || response.data.clPools || [];\n      \n      console.log(`[Chain ${chainId}] [Protocol ${protocol}] ✅ Received ${pools.length} pools from the subgraph`);\n\n      // Filter out pools with invalid volumeUSD\n      const validPools = pools.filter(pool => {\n        const volumeUSD = parseFloat(pool.volumeUSD || pool.volumeUsd || \"0\");\n        return !isNaN(volumeUSD) && volumeUSD > 0;\n      });\n\n      console.log(`[Chain ${chainId}] [Protocol ${protocol}] ✅ Found ${validPools.length} valid pools with positive volumeUSD`);\n\n      return {\n        data: validPools,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error(`[Chain ${chainId}] [Protocol ${protocol}] Error in getTopPools:`, error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Fetches detailed information for a specific pool by its ID\n   * \n   * @param poolId - Pool contract address to fetch\n   * @param protocol - Protocol the pool belongs to\n   * @param chainId - Chain ID where the pool exists\n   * @returns Promise containing pool details or null if not found\n   * \n   * @example\n   * ```typescript\n   * // Get specific pool details\n   * const poolDetails = await poolClient.getPoolById(\n   *   '0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640',\n   *   Protocol.Uniswap,\n   *   1\n   * );\n   * if (poolDetails.success && poolDetails.data) {\n   *   console.log(`Pool: ${poolDetails.data.token0.symbol}/${poolDetails.data.token1.symbol}`);\n   * }\n   * ```\n   * \n   * @throws {Error} When failed to fetch pool from subgraph\n   */\n  public async getPoolById(\n    poolId: string,\n    protocol: Protocol,\n    chainId: number\n  ): Promise<SteerResponse<GraphQLPoolData | null>> {\n    try {\n\n      const isAlgebraPool = isAlgebraProtocol(protocol);\n      const query = getPoolDetailsQuery(isAlgebraPool, protocol);\n\n    \n      const response = await this.fetchFromGraph<PoolDetailsResponse>(\n        query,\n        { pool: poolId },\n        protocol,\n        chainId\n      );\n\n      if (!response.success || !response.data) {\n        throw new Error(response.error || 'Failed to fetch pool');\n      }\n\n      const pool = response.data.pool || response.data.clPool || response.data.limitPool || null;\n\n\n      return {\n        data: pool,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error(`Error fetching pool ${poolId}:`, error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Fetches pools containing multiple tokens in batches for better performance\n   * \n   * @param tokenAddresses - Array of token contract addresses\n   * @param protocol - Protocol to fetch pools from\n   * @param chainId - Chain ID to fetch pools from\n   * @param batchSize - Number of tokens to process in each batch (default: 10)\n   * @returns Promise containing all pools found for the tokens\n   * \n   * @example\n   * ```typescript\n   * // Get pools for multiple tokens\n   * const tokenAddresses = [\n   *   '0xa0b86a33e6f8b07b71c3a39ef77a6b6e8f1b7b7e', // USDC\n   *   '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'  // WETH\n   * ];\n   * const pools = await poolClient.fetchPoolsForTokensBatch(\n   *   tokenAddresses,\n   *   Protocol.Uniswap,\n   *   1,\n   *   5\n   * );\n   * ```\n   * \n   * @throws {Error} When batch processing fails\n   */\n  public async fetchPoolsForTokensBatch(\n    tokenAddresses: string[],\n    protocol: Protocol,\n    chainId: number,\n    batchSize: number = 10\n  ): Promise<SteerResponse<GraphQLPoolData[]>> {\n    try {\n      if (tokenAddresses.length === 0) {\n        return {\n          data: [],\n          status: 200,\n          success: true,\n        };\n      }\n\n      console.log(`\\n🔍 Batch Pool Fetch Summary:`);\n      console.log(`📥 Total tokens to process: ${tokenAddresses.length}`);\n\n      const isAlgebraPool = isAlgebraProtocol(protocol);\n      const normalizedAddresses = tokenAddresses.map(addr => addr.toLowerCase());\n\n      // Split into chunks\n      const chunkSize = batchSize;\n      const addressChunks = [];\n      for (let i = 0; i < normalizedAddresses.length; i += chunkSize) {\n        addressChunks.push(normalizedAddresses.slice(i, i + chunkSize));\n      }\n\n      console.log(`📦 Processing ${addressChunks.length} chunks of max ${chunkSize} tokens each`);\n\n      const allPools: GraphQLPoolData[] = [];\n\n      // Process chunks in parallel\n      const results = await Promise.all(\n        addressChunks.map(async (chunk, chunkIndex) => {\n          console.log(`\\n🔄 Processing chunk ${chunkIndex + 1}/${addressChunks.length} with ${chunk.length} tokens`);\n\n          const chunkResults = await Promise.all(\n            chunk.map(async (token) => {\n              try {\n                const query = getTokenPoolsQueryByAddress(isAlgebraPool, protocol);\n                const queryStartTime = performance.now();\n                \n                const response = await this.fetchFromGraph<PoolsByTokenResponse>(\n                  query,\n                  { token },\n                  protocol,\n                  chainId\n                );\n\n                const queryTime = performance.now() - queryStartTime;\n                console.log(`⏱️ GraphQL query for token ${token.slice(0, 6)}... completed in ${queryTime.toFixed(2)}ms`);\n\n                if (!response.success || !response.data) {\n                  console.error(`❌ No pools found for token: ${token} on chainId: ${chainId}`);\n                  return [];\n                }\n\n                // Extract pools from different possible response structures\n                let pools: GraphQLPoolData[] = [];\n                if (response.data.pools) {\n                  pools = response.data.pools;\n                } else if (response.data.clPools) {\n                  pools = response.data.clPools;\n                } else if (response.data.limitPools) {\n                  pools = response.data.limitPools;\n                } else if (response.data.tokenPools) {\n                  pools = response.data.tokenPools;\n                }\n\n                if (pools.length === 0) {\n                  console.error(`❌ No pools found for token: ${token} on chainId: ${chainId}`);\n                  return [];\n                }\n\n                return pools;\n              } catch (error) {\n                console.error(`❌ Error fetching pools for token: ${token} on chainId: ${chainId}`, error);\n                return [];\n              }\n            })\n          );\n\n          return chunkResults.flat();\n        })\n      );\n\n      // Flatten all results\n      allPools.push(...results.flat());\n\n      return {\n        data: allPools,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error(\"Error in fetchPoolsForTokensBatch:\", error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Fetches all pools containing a specific token\n   * \n   * @param tokenAddress - Token contract address\n   * @param protocol - Protocol to fetch pools from\n   * @param chainId - Chain ID to fetch pools from\n   * @returns Promise containing pools that include the specified token\n   * \n   * @example\n   * ```typescript\n   * // Get all USDC pools on Uniswap V3\n   * const usdcPools = await poolClient.fetchPoolsForToken(\n   *   '0xa0b86a33e6f8b07b71c3a39ef77a6b6e8f1b7b7e',\n   *   Protocol.Uniswap,\n   *   1\n   * );\n   * if (usdcPools.success) {\n   *   console.log(`Found ${usdcPools.data.length} USDC pools`);\n   * }\n   * ```\n   * \n   * @throws {Error} When failed to fetch pools for token\n   */\n  public async fetchPoolsForToken(\n    tokenAddress: string,\n    protocol: Protocol,\n    chainId: number\n  ): Promise<SteerResponse<GraphQLPoolData[]>> {\n    try {\n      const isAlgebraPool = isAlgebraProtocol(protocol);\n      const query = getTokenPoolsQueryByAddress(isAlgebraPool, protocol);\n\n      const response = await this.fetchFromGraph<PoolsByTokenResponse>(\n        query,\n        { token: tokenAddress.toLowerCase() },\n        protocol,\n        chainId\n      );\n\n      if (!response.success || !response.data) {\n        throw new Error(response.error || 'Failed to fetch pools for token');\n      }\n\n      // Extract pools from different possible response structures\n      let pools: GraphQLPoolData[] = [];\n      if (response.data.pools) {\n        pools = response.data.pools;\n      } else if (response.data.limitPools) {\n        pools = response.data.limitPools;\n      } else if (response.data.tokenPools) {\n        pools = response.data.tokenPools;\n      } else if (response.data.clPools) {\n        pools = response.data.clPools;\n      }\n\n      return {\n        data: pools,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      console.error(`Error fetching pools for token ${tokenAddress}:`, error);\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Filters pools based on validity criteria such as tick range and liquidity\n   * \n   * @param pools - Array of pools to filter\n   * @returns Array of valid pools that meet the criteria\n   * \n   * @example\n   * ```typescript\n   * const validPools = poolClient.filterValidPools(allPools);\n   * console.log(`Filtered down to ${validPools.length} valid pools`);\n   * ```\n   */\n  public filterValidPools(pools: PoolData[]): PoolData[] {\n    return pools.filter(pool => {\n      // Check for required fields\n      if (!pool.id || !pool.tick || !pool.liquidity) {\n        return false;\n      }\n\n      // Parse values\n      const tick = parseInt(pool.tick);\n      const liquidity = parseFloat(pool.liquidity);\n\n      // Check for valid tick range and liquidity\n      const TICK_MIN = -887272;\n      const TICK_MAX = 887272;\n      const TICK_EDGE_THRESHOLD = 1;\n\n      if (\n        isNaN(tick) ||\n        isNaN(liquidity) ||\n        liquidity <= 0 ||\n        tick <= TICK_MIN + TICK_EDGE_THRESHOLD ||\n        tick >= TICK_MAX - TICK_EDGE_THRESHOLD\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n  }\n\n  /**\n   * Searches pools using exact-address lookups where supported and local symbol\n   * filtering as a portable fallback.\n   *\n   * Symbol-based matching is best-effort because not every downstream AMM\n   * subgraph exposes portable nested token-symbol filters.\n   */\n  public async searchPools(\n    filter: PoolFilter,\n  ): Promise<SteerResponse<GraphQLPoolData[]>> {\n    const { chainId, protocol } = filter;\n\n    if (!chainId || !protocol) {\n      return {\n        data: null,\n        status: 400,\n        success: false,\n        error: 'searchPools requires both chainId and protocol',\n      };\n    }\n\n    const normalizedPoolAddress = this.normalizeAddress(filter.poolAddress);\n    const normalizedTokenAddress = this.normalizeAddress(filter.tokenAddress);\n    const normalizedTokenAddresses = (filter.tokenAddresses || [])\n      .map((address) => this.normalizeAddress(address))\n      .filter(Boolean);\n    const tokenSymbols = [\n      ...(filter.tokenSymbol ? [filter.tokenSymbol] : []),\n      ...(filter.tokenSymbols || []),\n    ].filter(Boolean);\n\n    if (\n      !normalizedPoolAddress &&\n      !normalizedTokenAddress &&\n      normalizedTokenAddresses.length === 0 &&\n      tokenSymbols.length === 0\n    ) {\n      return {\n        data: null,\n        status: 400,\n        success: false,\n        error: 'searchPools requires at least one of poolAddress, tokenAddress, tokenAddresses, tokenSymbol, or tokenSymbols',\n      };\n    }\n\n    const collectedPools: GraphQLPoolData[] = [];\n\n    if (normalizedPoolAddress) {\n      const exactPool = await this.getPoolById(normalizedPoolAddress, protocol, chainId);\n      if (!exactPool.success) {\n        return {\n          data: null,\n          status: exactPool.status,\n          success: false,\n          error: exactPool.error,\n        };\n      }\n\n      if (exactPool.data) {\n        collectedPools.push(exactPool.data);\n      }\n    }\n\n    if (normalizedTokenAddress) {\n      const tokenPools = await this.fetchPoolsForToken(normalizedTokenAddress, protocol, chainId);\n      if (!tokenPools.success) {\n        return tokenPools;\n      }\n\n      collectedPools.push(...(tokenPools.data || []));\n    }\n\n    if (normalizedTokenAddresses.length > 0) {\n      const batchPools = await this.fetchPoolsForTokensBatch(\n        normalizedTokenAddresses,\n        protocol,\n        chainId,\n      );\n      if (!batchPools.success) {\n        return batchPools;\n      }\n\n      collectedPools.push(...(batchPools.data || []));\n    }\n\n    if (tokenSymbols.length > 0) {\n      const symbolPools = await this.searchPoolsBySymbols(\n        { ...filter, chainId, protocol },\n        tokenSymbols,\n      );\n      if (!symbolPools.success) {\n        return symbolPools;\n      }\n\n      collectedPools.push(...(symbolPools.data || []));\n    }\n\n    return {\n      data: this.applyPoolSearchResultFilters(collectedPools, filter),\n      status: 200,\n      success: true,\n    };\n  }\n}\n","import type { Address, Hash, PublicClient, WalletClient } from 'viem';\nimport { SteerResponse } from '../types.js';\nimport { SubgraphClient } from './SubgraphClient.js';\nimport { VaultWithdrawClient } from './vault/withdraw/index.js';\nimport { StakingProtocol, isValidStakingProtocol, normalizeProtocol } from '../const/protocol.js';\nimport { Decimal } from 'decimal.js';\n\n// Interfaces for staking pool data from API\nexport interface StakingPool {\n  allSymbols?: string\n  rewardToken: Address\n  rewardTokenDetail?: Reward\n  rewardTokenA: Address\n  rewardTokenADetail: Reward\n  rewardTokenB?: Address\n  rewardTokenBDetail?: Reward\n  dailyEmissionRewardA: number\n  dailyEmissionRewardB?: number\n  chainId: number\n  stakingPool: string\n  stakingToken: string\n  protocol: string\n  staking: Staking\n  reward: Reward\n  isSteerVault: boolean\n  beaconName?: string\n  vaultTokens?: VaultTokens\n  periodFinish: string\n  isDualFactory?: boolean\n  feeTier?: string\n  rewardsDuration: string\n  strategyId?:string\n  isActive?:boolean\n  postGeneratedTotalStaked?:number\n  postGeneratedApr?: number\n  stakedAmount?:bigint,\n  locked?:boolean\n}\n\n\nexport interface VaultTokens {\n  token0: Token0\n  token1: Token1\n}\n\nexport interface Token0 {\n  name: string\n  address: Address\n  symbol: string\n}\n\nexport interface Token1 {\n  name: string\n  address: Address\n  symbol: string\n}\n\nexport interface Reward {\n  symbol: string\n  name: string\n  address: Address,\n  decimals: number\n}\n\nexport interface Staking {\n  symbol: string\n  name: string\n  address: Address\n  decimals: number\n}\n\nexport interface StakingPoolFilter {\n  chainId?: number;\n  protocol?: StakingProtocol;\n  isLive?: boolean;\n  includeExpired?: boolean;\n  minDailyEmissionA?: number;\n  minDailyEmissionB?: number;\n  isDualRewards?: boolean;\n}\n\n// Interfaces for contract parameters\nexport interface StakeParams {\n  stakingPool: Address;\n  amount: bigint;\n}\n\nexport interface WithdrawParams {\n  stakingPool: Address;\n  amount: bigint;\n}\n\nexport interface GetRewardParams {\n  stakingPool: Address;\n}\n\nexport interface TokenValueParams {\n  stakingPool: StakingPool;\n  amount: bigint;\n  token0UsdPrice: number;\n  token1UsdPrice: number;\n}\n\nexport interface TokenValueResponse {\n  totalValueUsd: number;\n  token0Value?: number;\n  token1Value?: number;\n  tokenValue?: number;\n}\n\n// Add type definition for raw pool data\ninterface RawStakingPool {\n  allSymbols?: string\n  rewardToken: Address\n  rewardTokenDetail?: Reward\n  rewardTokenA: Address\n  rewardTokenADetail: Reward\n  rewardTokenB?: Address\n  rewardTokenBDetail?: Reward\n  dailyEmissionRewardA: number\n  dailyEmissionRewardB?: number\n  chainId: number\n  stakingPool: string\n  stakingToken: string\n  protocol: StakingProtocol\n  staking: Staking\n  reward: Reward\n  isSteerVault: boolean\n  beaconName?: string\n  vaultTokens?: VaultTokens\n  periodFinish: string\n  isDualFactory?: boolean\n  feeTier?: string\n  rewardsDuration: string\n  strategyId?:string\n  isActive?:boolean\n  postGeneratedTotalStaked?:number\n  postGeneratedApr?: number\n  stakedAmount?:bigint,\n  locked?:boolean\n}\n\n// ABIs for staking contracts\nconst SINGLE_REWARD_ABI = [\n  {\n    \"inputs\": [],\n    \"name\": \"lastTimeRewardApplicable\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{\"type\": \"address\"}],\n    \"name\": \"earned\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{\"type\": \"address\"}],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{\"type\": \"uint256\"}],\n    \"name\": \"stake\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{\"type\": \"uint256\"}],\n    \"name\": \"withdraw\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"getReward\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"exit\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n] as const;\n\nconst DUAL_REWARD_ABI = [\n  ...SINGLE_REWARD_ABI,\n  {\n    \"inputs\": [{\"type\": \"address\"}],\n    \"name\": \"earnedA\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{\"type\": \"address\"}],\n    \"name\": \"earnedB\",\n    \"outputs\": [{\"type\": \"uint256\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n] as const;\n\nconst ERC20_ABI = [\n  {\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{\"type\": \"uint8\"}],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n] as const;\n\nexport class StakingClient extends SubgraphClient {\n  protected readonly publicClient: PublicClient;\n  protected readonly walletClient: WalletClient;\n  private readonly stakingPoolsEndpoint = 'https://9i52h964s3.execute-api.us-east-1.amazonaws.com/dev/staking-pools';\n  private readonly withdrawClient: VaultWithdrawClient;\n\n  constructor(client: PublicClient & WalletClient) {\n    super(client);\n    this.publicClient = client;\n    this.walletClient = client;\n    this.withdrawClient = new VaultWithdrawClient(client, client);\n  }\n\n  /**\n   * Fetches and filters staking pools based on provided criteria\n   * @param filter Optional filter object to filter the pools\n   */\n  public async getStakingPools(\n    filter?: StakingPoolFilter\n  ): Promise<SteerResponse<StakingPool[]>> {\n    try {\n      const response = await fetch(this.stakingPoolsEndpoint);\n      if (!response.ok) {\n        throw new Error('Failed to fetch staking pools');\n      }\n\n      const rawPools: RawStakingPool[] = (await response.json()).pools;\n\n      // Convert and validate protocols in the response\n      let pools: StakingPool[] = rawPools\n        .filter((pool) => isValidStakingProtocol(pool.protocol))\n        .map((pool) => ({\n          ...pool,\n          protocol: normalizeProtocol(pool.protocol)\n        }));\n\n      // Apply filters if provided\n      if (filter) {\n        pools = this.filterPools(pools, filter);\n      }\n\n      return {\n        data: pools,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets only currently active staking pools\n   * @param chainId Optional chain ID to filter pools\n   * @param protocol Optional protocol name to filter pools\n   */\n  public async getLiveStakingPools(chainId?: number, protocol?: StakingProtocol): Promise<SteerResponse<StakingPool[]>> {\n    return this.getStakingPools({\n      chainId,\n      protocol,\n      isLive: true,\n      includeExpired: false\n    });\n  }\n\n  /**\n   * Gets all dual rewards staking pools\n   * @param chainId Optional chain ID to filter pools\n   * @param protocol Optional protocol name to filter pools\n   * @param isLive Optional flag to only get live pools\n   */\n  public async getDualRewardsStakingPools(\n    chainId?: number,\n    protocol?: StakingProtocol,\n    isLive?: boolean\n  ): Promise<SteerResponse<StakingPool[]>> {\n    return this.getStakingPools({\n      chainId,\n      protocol,\n      isLive,\n      isDualRewards: true\n    });\n  }\n\n  /**\n   * Gets high yield staking pools based on minimum daily emissions\n   * @param minDailyEmissionA Minimum daily emission for reward A\n   * @param minDailyEmissionB Optional minimum daily emission for reward B\n   * @param chainId Optional chain ID to filter pools\n   */\n  public async getHighYieldStakingPools(\n    minDailyEmissionA: number,\n    minDailyEmissionB?: number,\n    chainId?: number\n  ): Promise<SteerResponse<StakingPool[]>> {\n    return this.getStakingPools({\n      chainId,\n      minDailyEmissionA,\n      minDailyEmissionB,\n      isLive: true\n    });\n  }\n\n  /**\n   * Internal helper to filter pools based on criteria\n   */\n  private filterPools(pools: StakingPool[], filter: StakingPoolFilter): StakingPool[] {\n    return pools.filter(pool => {\n      // Chain ID filter\n      if (filter.chainId !== undefined && pool.chainId !== filter.chainId) {\n        return false;\n      }\n\n      // Protocol filter\n      if (filter.protocol !== undefined && pool.protocol !== filter.protocol) {\n        return false;\n      }\n\n      // Dual rewards filter\n      if (filter.isDualRewards !== undefined && pool.isDualFactory !== filter.isDualRewards) {\n        return false;\n      }\n\n      // Daily emission filters\n      if (filter.minDailyEmissionA !== undefined && pool.dailyEmissionRewardA < filter.minDailyEmissionA) {\n        return false;\n      }\n      if (filter.minDailyEmissionB !== undefined && pool.dailyEmissionRewardB !== undefined && pool.dailyEmissionRewardB < filter.minDailyEmissionB) {\n        return false;\n      }\n\n      // Live/Expired filter\n      if (filter.isLive !== undefined) {\n        const now = Math.floor(Date.now() / 1000);\n        const periodFinish = parseInt(pool.periodFinish);\n        const isPoolLive = periodFinish > now;\n\n        if (filter.isLive && !isPoolLive) {\n          return false;\n        }\n\n        if (!filter.includeExpired && !isPoolLive) {\n          return false;\n        }\n      }\n\n      return true;\n    });\n  }\n\n  /**\n   * Stakes tokens in a staking pool\n   * @param params The staking parameters\n   */\n  public async stake(params: StakeParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.stakingPool,\n        abi: SINGLE_REWARD_ABI,\n        functionName: 'stake',\n        args: [params.amount],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Withdraws tokens from a staking pool\n   * @param params The withdrawal parameters\n   */\n  public async withdraw(params: WithdrawParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.stakingPool,\n        abi: SINGLE_REWARD_ABI,\n        functionName: 'withdraw',\n        args: [params.amount],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Claims rewards from a staking pool\n   * @param params The reward claim parameters\n   */\n  public async getReward(params: GetRewardParams): Promise<SteerResponse<Hash>> {\n    try {\n      const account = await this.walletClient.getAddresses();\n      if (!account[0]) throw new Error('No account found');\n\n      const { request } = await this.publicClient.simulateContract({\n        address: params.stakingPool,\n        abi: SINGLE_REWARD_ABI,\n        functionName: 'getReward',\n        args: [],\n        account: account[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the earned rewards for an account in a staking pool\n   * @param stakingPool The staking pool address\n   * @param account The account to check rewards for\n   */\n  public async earned(stakingPool: Address, account: Address): Promise<SteerResponse<{ rewardA: bigint; rewardB?: bigint }>> {\n    try {\n      // First try to read as single reward\n      try {\n        const reward = await this.publicClient.readContract({\n          address: stakingPool,\n          abi: SINGLE_REWARD_ABI,\n          functionName: 'earned',\n          args: [account],\n        });\n\n        return {\n          data: { rewardA: reward },\n          status: 200,\n          success: true,\n        };\n      } catch {\n        // If single reward fails, try dual rewards\n        const [rewardA, rewardB] = await Promise.all([\n          this.publicClient.readContract({\n            address: stakingPool,\n            abi: DUAL_REWARD_ABI,\n            functionName: 'earnedA',\n            args: [account],\n          }),\n          this.publicClient.readContract({\n            address: stakingPool,\n            abi: DUAL_REWARD_ABI,\n            functionName: 'earnedB',\n            args: [account],\n          }),\n        ]);\n\n        return {\n          data: { rewardA, rewardB },\n          status: 200,\n          success: true,\n        };\n      }\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the total supply of staked tokens in a pool\n   * @param stakingPool The staking pool address\n   */\n  public async totalSupply(stakingPool: Address): Promise<SteerResponse<bigint>> {\n    try {\n      const totalSupply = await this.publicClient.readContract({\n        address: stakingPool,\n        abi: SINGLE_REWARD_ABI,\n        functionName: 'totalSupply',\n      });\n\n      return {\n        data: totalSupply,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the staked balance of an account in a pool\n   * @param stakingPool The staking pool address\n   * @param account The account to check balance for\n   */\n  public async balanceOf(stakingPool: Address, account: Address): Promise<SteerResponse<bigint>> {\n    try {\n      const balance = await this.publicClient.readContract({\n        address: stakingPool,\n        abi: SINGLE_REWARD_ABI,\n        functionName: 'balanceOf',\n        args: [account],\n      });\n\n      return {\n        data: balance,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Calculates the APR for a staking pool\n   * @param pool The staking pool data\n   * @param rewardTokenPriceUSD The price of the reward token in USD\n   * @param totalStakedUSD The total value staked in USD\n   */\n  public calculateAPR(\n    pool: StakingPool,\n    rewardTokenPriceUSD: number,\n    totalStakedUSD: number\n  ): number {\n    if (totalStakedUSD === 0) {\n      return 0;\n    }\n\n    const dailyRewardUSD = pool.dailyEmissionRewardA * rewardTokenPriceUSD;\n    let apr = (dailyRewardUSD * 365 * 100) / totalStakedUSD;\n\n    if (pool.isDualFactory && pool.dailyEmissionRewardB) {\n      const dailyRewardBUSD = pool.dailyEmissionRewardB * rewardTokenPriceUSD;\n      apr += (dailyRewardBUSD * 365 * 100) / totalStakedUSD;\n    }\n\n    return apr;\n  }\n\n  /**\n   * Calculates the USD value of tokens in a staking pool\n   * Handles both regular staking pools and Steer vaults\n   * @param params Parameters for token value calculation\n   */\n  public async getSteerLpTokenValue(params: TokenValueParams): Promise<SteerResponse<TokenValueResponse>> {\n    try {\n      // First, get the staking pool details\n      const pool = params.stakingPool;\n      \n      const chainId = await this.publicClient.getChainId();\n      if (chainId !== pool.chainId) {\n        throw new Error(`Chain ID mismatch| expected ${pool.chainId} but got ${chainId}`);\n      }\n\n      // Handle Steer vault staking pools\n      if (pool.isSteerVault && pool.staking) {\n        if (!pool.vaultTokens) {\n          throw new Error('Vault tokens information not found');\n        }\n\n        // Get underlying token amounts from LP token\n        const tokensResponse = await this.withdrawClient.getTokensFromLp(\n          pool.staking.address,\n          params.amount\n        );\n\n        if (!tokensResponse.success || !tokensResponse.data) {\n          throw new Error('Failed to get token amounts from LP');\n        }\n\n        // Get decimals for both tokens\n        const [token0Decimals, token1Decimals] = await Promise.all([\n          this.publicClient.readContract({\n            address: pool.vaultTokens.token0.address,\n            abi: ERC20_ABI,\n            functionName: 'decimals'\n          }),\n          this.publicClient.readContract({\n            address: pool.vaultTokens.token1.address,\n            abi: ERC20_ABI,\n            functionName: 'decimals'\n          })\n        ]);\n\n        // Use Decimal.js for precise calculations\n        const token0Amount = new Decimal(tokensResponse.data.token0Val.toString())\n          .div(new Decimal(10).pow(token0Decimals))\n          .mul(params.token0UsdPrice);\n\n        const token1Amount = new Decimal(tokensResponse.data.token1Val.toString())\n          .div(new Decimal(10).pow(token1Decimals))\n          .mul(params.token1UsdPrice);\n\n        const totalValueUsd = token0Amount.plus(token1Amount).toNumber();\n        const token0ValueUsd = token0Amount.toNumber();\n        const token1ValueUsd = token1Amount.toNumber();\n\n        return {\n          data: {\n            totalValueUsd,\n            token0Value: token0ValueUsd,\n            token1Value: token1ValueUsd\n          },\n          status: 200,\n          success: true\n        };\n      }\n\n      // Handle regular staking pools (non-Steer vault)\n      const stakingDecimals = await this.publicClient.readContract({\n        address: pool.staking.address,\n        abi: ERC20_ABI,\n        functionName: 'decimals'\n      });\n\n      const tokenValueUsd = new Decimal(params.amount.toString())\n        .div(new Decimal(10).pow(stakingDecimals))\n        .mul(params.token0UsdPrice)\n        .toNumber();\n\n      return {\n        data: {\n          totalValueUsd: tokenValueUsd,\n          tokenValue: tokenValueUsd\n        },\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Gets the total staking amount in USD for a pool\n   * @param stakingPool The staking pool\n   * @param token0UsdPrice Price of token0 in USD\n   * @param token1UsdPrice Price of token1 in USD (required for Steer vaults)\n   */\n  public async getTotalStakingAmountInUsd(\n    stakingPool: StakingPool,\n    token0UsdPrice: number,\n    token1UsdPrice?: number\n  ): Promise<SteerResponse<number>> {\n    try {\n      // Get total supply\n      const totalSupplyResponse = await this.totalSupply(stakingPool.stakingPool as `0x${string}`);\n      if (!totalSupplyResponse.success || !totalSupplyResponse.data) {\n        throw new Error('Failed to get total supply');\n      }\n\n      // Get value using getSteerLpTokenValue\n      const valueResponse = await this.getSteerLpTokenValue({\n        stakingPool,\n        amount: totalSupplyResponse.data,\n        token0UsdPrice,\n        token1UsdPrice: token1UsdPrice || token0UsdPrice\n      });\n\n      if (!valueResponse.success || !valueResponse.data) {\n        throw new Error('Failed to calculate token value');\n      }\n\n      return {\n        data: valueResponse.data.totalValueUsd,\n        status: 200,\n        success: true\n      };\n\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Prepares the transaction data for staking tokens without executing it\n   * @param params The staking parameters\n   */\n  public async prepareStakeTx(params: StakeParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [bigint];\n  }>> {\n    try {\n\n      return {\n        data: {\n          address: params.stakingPool,\n          abi: [{\n            type: 'function',\n            inputs: [\n              { name: 'amount', internalType: 'uint256', type: 'uint256' }\n            ],\n            name: 'stake',\n            outputs: [],\n            stateMutability: 'nonpayable'\n          }],\n          functionName: 'stake',\n          args: [params.amount] as const\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Prepares the transaction data for withdrawing tokens without executing it\n   * @param params The withdrawal parameters\n   */\n  public async prepareWithdrawTx(params: WithdrawParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [bigint];\n  }>> {\n    try {\n\n      return {\n        data: {\n          address: params.stakingPool,\n          abi: [{\n            type: 'function',\n            inputs: [\n              { name: 'amount', internalType: 'uint256', type: 'uint256' }\n            ],\n            name: 'withdraw',\n            outputs: [],\n            stateMutability: 'nonpayable'\n          }],\n          functionName: 'withdraw',\n          args: [params.amount] as const\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n\n  /**\n   * Prepares the transaction data for claiming rewards without executing it\n   * @param params The reward claim parameters\n   */\n  public async prepareGetRewardTx(params: GetRewardParams): Promise<SteerResponse<{\n    address: Address;\n    abi: {\n      type: string;\n      inputs: {\n        name: string;\n        internalType: string;\n        type: string;\n      }[];\n      name: string;\n      outputs: never[];\n      stateMutability: string;\n    }[];\n    functionName: string;\n    args: readonly [];\n  }>> {\n    try {\n\n      return {\n        data: {\n          address: params.stakingPool,\n          abi: [{\n            type: 'function',\n            inputs: [],\n            name: 'getReward',\n            outputs: [],\n            stateMutability: 'nonpayable'\n          }],\n          functionName: 'getReward',\n          args: [] as const\n        },\n        status: 200,\n        success: true\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred'\n      };\n    }\n  }\n} ","import { SteerConfig, SteerResponse } from './types.js';\nimport { SubgraphClient } from './base/SubgraphClient.js';\nimport { VaultClient } from './base/VaultClient.js';\nimport { SmartRewardsClient } from './base/SmartRewardClient.js';\nimport { PoolClient } from './base/PoolClient.js';\nimport type { PublicClient, WalletClient } from 'viem';\nimport { StakingClient } from './base/StakingClient.js';\n\n/**\n * The main client for interacting with the Steer Protocol.\n * This client provides access to vault operations, smart rewards functionality, pool data, and staking.\n * \n * @example\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SteerClient, Protocol } from '@steerprotocol/sdk';\n * \n * // Create viem clients\n * const publicClient = createPublicClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n * \n * // Initialize the Steer client\n * const steerClient = new SteerClient({\n *   environment: 'production',\n *   client: publicClient,\n *   walletClient: walletClient,\n *   subgraphStudioKey: 'your-subgraph-studio-key' // Optional\n * });\n * \n * // Use vault operations\n * const vaults = await steerClient.vaults.getLatestVaults();\n * \n * // Use rewards functionality\n * const campaigns = await steerClient.rewards.getCampaigns(1);\n * const summary = await steerClient.rewards.getRewardSummary(userAddress, chainId);\n * \n * // Use pool data functionality\n * const topPools = await steerClient.pools.getTopPools(100, Protocol.Uniswap, 1);\n * const poolDetails = await steerClient.pools.getPoolById(poolId, Protocol.Uniswap, 1);\n * \n * // Use staking functionality\n * const stakingPools = await steerClient.staking.getStakingPools(1);\n * ```\n * \n * @group Client\n */\nexport class SteerClient extends SubgraphClient {\n  \n  /** The environment the client is configured for */\n  private readonly environment: 'production' | 'development';\n  \n  /** The vault client instance for interacting with Steer vaults */\n  public readonly vaults: VaultClient;\n\n  /** The rewards client instance for interacting with Smart Rewards */\n  public readonly rewards: SmartRewardsClient;\n\n  /** The staking client instance for interacting with staking pools */\n  public readonly staking: StakingClient;\n\n  /** The pool client instance for fetching pool data from DEX protocols */\n  public readonly pools: PoolClient;\n\n  /**\n   * Creates a new instance of the SteerClient\n   * \n   * @param config - The configuration object for the client\n   * @param config.environment - The environment to use ('production' or 'development')\n   * @param config.client - The viem client for blockchain interactions\n   * @param config.walletClient - Optional wallet client for write operations\n   * @param config.subgraphStudioKey - Optional Subgraph Studio API key for higher rate limits\n   * \n   * @example\n   * ```typescript\n   * const steerClient = new SteerClient({\n   *   environment: 'production',\n   *   client: publicClient,\n   *   walletClient: walletClient,\n   *   subgraphStudioKey: 'your-key'\n   * });\n   * ```\n   */\n  constructor(config: SteerConfig) {\n    super(config.client);\n    this.environment = config.environment || 'production';\n    \n    // Initialize clients based on provided configuration\n    const publicClient = config.client as PublicClient;\n    const walletClient = config.walletClient;\n    const subgraphStudioKey = config.subgraphStudioKey || '';\n\n    // Initialize vault client with both public and wallet clients if available\n    this.vaults = new VaultClient(\n      publicClient,\n      walletClient || publicClient as unknown as WalletClient,\n      this.environment === 'production' ? 'production' : 'development'\n    );\n\n    // Initialize staking client with both public and wallet clients if available\n    this.staking = new StakingClient(walletClient ? \n      { ...publicClient, ...walletClient } as PublicClient & WalletClient : \n      publicClient as unknown as PublicClient & WalletClient\n    );\n\n    // Pool discovery is read-only and does not depend on a signer.\n    this.pools = new PoolClient(publicClient, subgraphStudioKey);\n\n    // Initialize rewards client with both public and wallet clients if available\n    if (walletClient) {\n      this.rewards = new SmartRewardsClient(\n        publicClient,\n        walletClient,\n        this.environment === 'production' ? 'production' : 'development'\n      );\n    } else {\n      // If no wallet client is provided, initialize with read-only capabilities\n      this.rewards = new SmartRewardsClient(\n        publicClient,\n        publicClient as unknown as WalletClient, // Type cast for read-only operations\n        this.environment === 'production' ? 'production' : 'development'\n      );\n    }\n  }\n\n  /**\n   * Gets the active chain ID from the client\n   * @returns A promise that resolves to the active chain ID\n   * @throws Error if no active chain is found\n   * \n   * @example\n   * ```typescript\n   * const chainId = await steerClient.getActiveChain();\n   * console.log(chainId.data); // e.g., 1 for Ethereum mainnet\n   * ```\n   */\n  public async getActiveChain<T>(): Promise<SteerResponse<T>> {\n    const activeChain = await this.client.chain?.id;\n\n    if (!activeChain) {\n      throw new Error('No active chain found');\n    }\n\n    return {\n      data: activeChain as unknown as T,\n      status: 200,\n      success: true,\n    };\n  }\n}\n","import {\n  type Address,\n  type Hash,\n  type PublicClient,\n  type WalletClient,\n  isAddressEqual,\n} from 'viem';\nimport type {\n  DefaultFeeManagerConfigParams,\n  Fee,\n  FeeManagerConfigParams,\n  FeeWithdrawalParams,\n  MultipleFeeWithdrawalParams,\n  MultiVaultFeeWithdrawalParams,\n  SteerResponse,\n} from '../types.js';\nimport { FEE_MANAGER_ABI } from '../const/abis/feeManager.js';\nimport { VAULT_FEES_ABI } from '../const/abis/vaultFees.js';\nimport { SubgraphClient } from './SubgraphClient.js';\n\nexport class FeeManagerClient extends SubgraphClient {\n  protected readonly publicClient: PublicClient;\n  protected readonly walletClient: WalletClient;\n  protected feeManagerAddress: Address;\n\n  public constructor(\n    feeManagerAddress: Address,\n    publicClient: PublicClient,\n    walletClient: WalletClient\n  ) {\n    super(publicClient as PublicClient & WalletClient);\n    this.publicClient = publicClient;\n    this.walletClient = walletClient;\n    this.feeManagerAddress = feeManagerAddress;\n  }\n\n  /**\n   * Overrides the FeeManager contract address.\n   * Useful when deployment addresses are not yet hardcoded or need custom targeting.\n   * @param address The new FeeManager contract address\n   */\n  public setFeeManagerAddress(address: Address): void {\n    this.feeManagerAddress = address;\n  }\n\n  public async getFees(vault: Address): Promise<SteerResponse<Fee[]>> {\n    try {\n      const fees = await this.publicClient.readContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'getFees',\n        args: [vault],\n      });\n\n      return {\n        data: fees as Fee[],\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async getTotalFees(vault: Address): Promise<SteerResponse<bigint>> {\n    try {\n      const totalFees = await this.publicClient.readContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'vaultTotalFees',\n        args: [vault],\n      });\n\n      return {\n        data: totalFees as bigint,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async getWithdrawer(\n    vault: Address,\n    feeIdentifier: string\n  ): Promise<SteerResponse<Address>> {\n    try {\n      const withdrawer = await this.publicClient.readContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'withdrawalPermissions',\n        args: [vault, feeIdentifier],\n      });\n\n      return {\n        data: withdrawer as Address,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async validateAdminPermission(): Promise<SteerResponse<boolean>> {\n    try {\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const owner = await this.publicClient.readContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'owner',\n      });\n\n      return {\n        data: isAddressEqual(owner as Address, accounts[0]),\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async validateWithdrawerPermission(\n    vault: Address,\n    feeIdentifier: string\n  ): Promise<SteerResponse<boolean>> {\n    try {\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const withdrawer = await this.publicClient.readContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'withdrawalPermissions',\n        args: [vault, feeIdentifier],\n      });\n\n      return {\n        data: isAddressEqual(withdrawer as Address, accounts[0]),\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async setFeeAndWithdrawalPermission(\n    params: FeeManagerConfigParams\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      if (\n        params.feeIdentifiers.length !== params.feeValues.length ||\n        params.feeIdentifiers.length !== params.withdrawers.length\n      ) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'feeIdentifiers, feeValues, and withdrawers must have the same length',\n        };\n      }\n\n      const isAdmin = await this.validateAdminPermission();\n      if (!isAdmin.success) {\n        throw new Error(isAdmin.error ?? 'Unknown error occurred');\n      }\n      if (!isAdmin.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not FeeManager owner',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'setFeeAndWithdrawalPermission',\n        args: [params.vault, params.feeIdentifiers, params.feeValues, params.withdrawers],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async setDefaultFeeAndWithdrawalPermission(\n    params: DefaultFeeManagerConfigParams\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      if (\n        params.feeIdentifiers.length !== params.feeValues.length ||\n        params.feeIdentifiers.length !== params.withdrawers.length\n      ) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'feeIdentifiers, feeValues, and withdrawers must have the same length',\n        };\n      }\n\n      const isAdmin = await this.validateAdminPermission();\n      if (!isAdmin.success) {\n        throw new Error(isAdmin.error ?? 'Unknown error occurred');\n      }\n      if (!isAdmin.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not FeeManager owner',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'setDefaultFeeAndWithdrawalPermission',\n        args: [\n          params.vault,\n          params.totalVaultFees,\n          params.feeIdentifiers,\n          params.feeValues,\n          params.withdrawers,\n        ],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async setMigratedVaultFeeAndWithdrawalPermission(): Promise<SteerResponse<Hash>> {\n    try {\n      const isAdmin = await this.validateAdminPermission();\n      if (!isAdmin.success) {\n        throw new Error(isAdmin.error ?? 'Unknown error occurred');\n      }\n      if (!isAdmin.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not FeeManager owner',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'setMigratedVaultFeeAndWithdrawalPermission',\n        args: [],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async setTotalFees(vault: Address, newTotalFees: bigint): Promise<SteerResponse<Hash>> {\n    try {\n      const isAdmin = await this.validateAdminPermission();\n      if (!isAdmin.success) {\n        throw new Error(isAdmin.error ?? 'Unknown error occurred');\n      }\n      if (!isAdmin.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not FeeManager owner',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'setTotalFees',\n        args: [vault, newTotalFees],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async changeFeeWithdrawer(\n    vault: Address,\n    feeIdentifier: string,\n    newWithdrawer: Address\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      const isAdmin = await this.validateAdminPermission();\n      if (!isAdmin.success) {\n        throw new Error(isAdmin.error ?? 'Unknown error occurred');\n      }\n      if (!isAdmin.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not FeeManager owner',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'changeFeeWithdrawer',\n        args: [vault, feeIdentifier, newWithdrawer],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async withdrawFee(params: FeeWithdrawalParams): Promise<SteerResponse<Hash>> {\n    try {\n      const canWithdraw = await this.validateWithdrawerPermission(\n        params.vault,\n        params.feeIdentifier\n      );\n      if (!canWithdraw.success) {\n        throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n      }\n      if (!canWithdraw.data) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'Caller is not authorized withdrawer',\n        };\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'withdrawFee',\n        args: [params.vault, params.feeIdentifier, params.amount0, params.amount1],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async withdrawMultipleFees(\n    params: MultipleFeeWithdrawalParams\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      if (\n        params.feeIdentifiers.length !== params.amounts0.length ||\n        params.feeIdentifiers.length !== params.amounts1.length\n      ) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'feeIdentifiers, amounts0, and amounts1 must have the same length',\n        };\n      }\n\n      for (const feeIdentifier of params.feeIdentifiers) {\n        const canWithdraw = await this.validateWithdrawerPermission(params.vault, feeIdentifier);\n        if (!canWithdraw.success) {\n          throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n        }\n        if (!canWithdraw.data) {\n          return {\n            data: null,\n            status: 400,\n            success: false,\n            error: `Caller is not authorized withdrawer for ${feeIdentifier}`,\n          };\n        }\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'withdrawMultipleFees',\n        args: [params.vault, params.feeIdentifiers, params.amounts0, params.amounts1],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  public async withdrawFeesFromMultipleVaults(\n    params: MultiVaultFeeWithdrawalParams\n  ): Promise<SteerResponse<Hash>> {\n    try {\n      if (\n        params.vaults.length !== params.feeIdentifiers.length ||\n        params.vaults.length !== params.amounts0.length ||\n        params.vaults.length !== params.amounts1.length\n      ) {\n        return {\n          data: null,\n          status: 400,\n          success: false,\n          error: 'vaults, feeIdentifiers, amounts0, and amounts1 must have the same length',\n        };\n      }\n\n      for (let i = 0; i < params.vaults.length; i++) {\n        const vault = params.vaults[i];\n        const identifiers = params.feeIdentifiers[i];\n        const amount0 = params.amounts0[i];\n        const amount1 = params.amounts1[i];\n\n        if (identifiers.length !== amount0.length || identifiers.length !== amount1.length) {\n          return {\n            data: null,\n            status: 400,\n            success: false,\n            error: 'feeIdentifiers[i], amounts0[i], and amounts1[i] must have the same length',\n          };\n        }\n\n        for (const feeIdentifier of identifiers) {\n          const canWithdraw = await this.validateWithdrawerPermission(vault, feeIdentifier);\n          if (!canWithdraw.success) {\n            throw new Error(canWithdraw.error ?? 'Unknown error occurred');\n          }\n          if (!canWithdraw.data) {\n            return {\n              data: null,\n              status: 400,\n              success: false,\n              error: `Caller is not authorized withdrawer for ${feeIdentifier}`,\n            };\n          }\n        }\n      }\n\n      const accounts = await this.walletClient.getAddresses();\n      if (!accounts[0]) {\n        throw new Error('No account found');\n      }\n\n      const { request } = await this.publicClient.simulateContract({\n        address: this.feeManagerAddress,\n        abi: FEE_MANAGER_ABI,\n        functionName: 'withdrawFeesFromMultipleVaults',\n        args: [params.vaults, params.feeIdentifiers, params.amounts0, params.amounts1],\n        account: accounts[0],\n      });\n\n      const hash = await this.walletClient.writeContract(request);\n\n      return {\n        data: hash,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets the accrued revenue for a specific fee identifier in a vault\n   * @param vault The vault address\n   * @param feeIdentifier The fee identifier (e.g., 'STEER_FEES', 'STRATEGIST_FEES')\n   * @returns Promise resolving to the accrued amounts for token0 and token1\n   */\n  public async getAccruedRevenue(\n    vault: Address,\n    feeIdentifier: string\n  ): Promise<SteerResponse<{ amount0: bigint; amount1: bigint }>> {\n    try {\n      const [amount0, amount1] = await Promise.all([\n        this.publicClient.readContract({\n          address: vault,\n          abi: VAULT_FEES_ABI,\n          functionName: 'accruedFees0',\n          args: [feeIdentifier],\n        }),\n        this.publicClient.readContract({\n          address: vault,\n          abi: VAULT_FEES_ABI,\n          functionName: 'accruedFees1',\n          args: [feeIdentifier],\n        }),\n      ]);\n\n      return {\n        data: { amount0, amount1 },\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n\n  /**\n   * Gets a summary of accrued revenue for all configured fee identifiers in a vault\n   * @param vault The vault address\n   * @returns Promise resolving to a list of fee identifiers and their accrued amounts\n   */\n  public async getVaultRevenueSummary(\n    vault: Address\n  ): Promise<SteerResponse<{ feeIdentifier: string; amount0: bigint; amount1: bigint }[]>> {\n    try {\n      const feesResponse = await this.getFees(vault);\n      if (!feesResponse.success || !feesResponse.data) {\n        throw new Error(feesResponse.error || 'Failed to fetch vault fees configuration');\n      }\n\n      const summary = await Promise.all(\n        feesResponse.data.map(async (fee) => {\n          const revenue = await this.getAccruedRevenue(vault, fee.feeIdentifier);\n          return {\n            feeIdentifier: fee.feeIdentifier,\n            amount0: revenue.data?.amount0 ?? 0n,\n            amount1: revenue.data?.amount1 ?? 0n,\n          };\n        })\n      );\n\n      return {\n        data: summary,\n        status: 200,\n        success: true,\n      };\n    } catch (error) {\n      return {\n        data: null,\n        status: 500,\n        success: false,\n        error: error instanceof Error ? error.message : 'Unknown error occurred',\n      };\n    }\n  }\n}\n","import type { Address, Hex } from 'viem';\nimport type { SupportedProtocol } from '../types.js';\n\n/** A signer-neutral EVM transaction that can be consumed by a UI or CLI. */\nexport interface EncodedEvmTransaction {\n  readonly chainId: number;\n  readonly to: Address;\n  readonly data: Hex;\n  readonly value: bigint;\n}\n\n/** Common envelope around a protocol-specific pool lifecycle action. */\nexport interface PreparedPoolAction<\n  Kind extends string,\n  Identity,\n  Expected,\n  Preflight,\n> {\n  readonly schemaVersion: 1;\n  readonly kind: Kind;\n  readonly protocol: SupportedProtocol;\n  readonly transaction: EncodedEvmTransaction;\n  readonly identity: Identity;\n  readonly expected: Expected;\n  readonly preflight: Preflight;\n}\n\nexport interface PoolActionSimulation {\n  readonly transaction: EncodedEvmTransaction;\n  readonly blockNumber: bigint;\n  readonly returnData: Hex | null;\n  readonly gasEstimate: bigint;\n}\n\nexport type PoolActionOutcome =\n  | 'created'\n  | 'created-and-initialized'\n  | 'initialized-existing'\n  | 'already-initialized-matching'\n  | 'already-initialized-different-price'\n  | 'initialized-then-price-moved'\n  | 'not-initialized'\n  | 'wrong-deployment'\n  | 'verification-unavailable'\n  | 'reverted';\n\nexport interface PoolActionVerification<Identity, State, Evidence> {\n  readonly verified: boolean;\n  readonly outcome: PoolActionOutcome;\n  readonly blockNumber: bigint;\n  readonly identity: Identity;\n  readonly state: State | null;\n  readonly evidence: Evidence;\n  readonly warnings: readonly string[];\n}\n\nexport const PREPARED_POOL_ACTION_SERIALIZATION_VERSION = 1 as const;\n\nconst BIGINT_TAG = '__steer_pool_lifecycle_bigint__';\n\ntype AnyPreparedPoolAction = PreparedPoolAction<string, unknown, unknown, unknown>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Serialize a prepared action in a versioned JSON envelope. Bigints use an\n * explicit tag so ordinary decimal strings remain distinguishable on decode.\n */\nexport function serializePreparedPoolAction(action: AnyPreparedPoolAction, space = 2): string {\n  if (!isRecord(action) || action.schemaVersion !== 1 || typeof action.kind !== 'string') {\n    throw new TypeError('Prepared pool action must be a schema-version-1 object');\n  }\n\n  return JSON.stringify(\n    {\n      serializationVersion: PREPARED_POOL_ACTION_SERIALIZATION_VERSION,\n      action,\n    },\n    (_key, value: unknown) => {\n      if (typeof value === 'bigint') {\n        return { [BIGINT_TAG]: value.toString() };\n      }\n      if (\n        typeof value === 'undefined' ||\n        typeof value === 'function' ||\n        typeof value === 'symbol'\n      ) {\n        throw new TypeError('Prepared pool action contains a non-JSON value');\n      }\n      if (typeof value === 'number' && !Number.isFinite(value)) {\n        throw new TypeError('Prepared pool action contains a non-finite number');\n      }\n      return value;\n    },\n    space\n  );\n}\n\n/** Parse a versioned serialized action; protocol adapters must validate its shape. */\nexport function deserializePreparedPoolAction(serialized: string): unknown {\n  if (typeof serialized !== 'string') {\n    throw new TypeError('Serialized prepared pool action must be a string');\n  }\n\n  const envelope: unknown = JSON.parse(serialized, (_key, value: unknown) => {\n    if (isRecord(value) && Object.keys(value).length === 1 && BIGINT_TAG in value) {\n      const encoded = value[BIGINT_TAG];\n      if (typeof encoded !== 'string' || !/^-?(0|[1-9][0-9]*)$/.test(encoded)) {\n        throw new TypeError('Serialized prepared pool action contains an invalid bigint');\n      }\n      return BigInt(encoded);\n    }\n    return value;\n  });\n\n  if (\n    !isRecord(envelope) ||\n    envelope.serializationVersion !== PREPARED_POOL_ACTION_SERIALIZATION_VERSION ||\n    !isRecord(envelope.action)\n  ) {\n    throw new TypeError('Serialized prepared pool action envelope is invalid or unsupported');\n  }\n\n  return envelope.action;\n}\n","export type CheckedRegistry<Value> = Readonly<Partial<Record<string, Value>>>;\n\n/** Build a frozen string-keyed index and fail closed on every duplicate key. */\nexport function buildCheckedRegistry<Value>(\n  values: readonly Value[],\n  keyOf: (value: Value) => string,\n  duplicateLabel: string\n): CheckedRegistry<Value> {\n  const registry: Record<string, Value> = Object.create(null) as Record<string, Value>;\n\n  for (const value of values) {\n    const key = keyOf(value);\n    if (Object.prototype.hasOwnProperty.call(registry, key)) {\n      throw new Error(`Duplicate ${duplicateLabel}: ${key}`);\n    }\n    registry[key] = value;\n  }\n\n  return Object.freeze(registry);\n}\n","import { getAddress, type Address } from 'viem';\nimport { ChainId, Protocol } from '../../const/chain.js';\nimport type { SupportedProtocol } from '../../types.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { buildCheckedRegistry, type CheckedRegistry } from './registry.js';\n\nexport type AlgebraLifecycleVariant = 'legacy' | 'directional' | 'integral-v1' | 'integral-v2';\n\nexport type AlgebraLifecycleAdapter =\n  | 'algebra-legacy-pair-v1'\n  | 'algebra-directional-pair-v1'\n  | 'algebra-integral-pair-v1'\n  | 'algebra-integral-plugin-data-v2';\n\nexport interface AlgebraLifecycleProvenance {\n  readonly source: 'sdk-config' | 'official-deployment' | 'verified-explorer';\n  readonly urls: readonly [`https://${string}`, ...`https://${string}`[]];\n}\n\nexport interface AlgebraLifecycleDeployment {\n  readonly supported: true;\n  readonly schemaVersion: 1;\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n  readonly family: 'algebra';\n  readonly variant: AlgebraLifecycleVariant;\n  readonly adapter: AlgebraLifecycleAdapter;\n  readonly version: 1 | 2;\n  readonly factory: Address;\n  readonly createPool: 'pair' | 'pair-with-plugin-data';\n  readonly state: 'legacy-global-state' | 'directional-global-state' | 'integral-global-state';\n  /**\n   * Metadata only. An EOA must not call this entry point directly: the\n   * authoritative contract requires msg.sender to equal the custom deployer.\n   */\n  readonly customPoolEntryPoint?: Address;\n  readonly customPoolCreation: 'not-configured' | 'adapter-specific-deployer-required';\n  readonly provenance: AlgebraLifecycleProvenance;\n}\n\ntype DeploymentInput = Omit<\n  AlgebraLifecycleDeployment,\n  | 'supported'\n  | 'schemaVersion'\n  | 'family'\n  | 'adapter'\n  | 'version'\n  | 'createPool'\n  | 'state'\n  | 'customPoolCreation'\n  | 'provenance'\n> & {\n  readonly factory: string;\n  readonly customPoolEntryPoint?: string;\n  readonly variant: AlgebraLifecycleVariant;\n};\n\nconst SDK_CONFIG_URL =\n  'https://github.com/SteerProtocol/sdk/tree/2dfaa0ee00bb80be684206f73e67b8d35f8ce9ff/src/const/amm/configs/protocols' as const;\n\nfunction provenance(\n  ...urls: [`https://${string}`, ...`https://${string}`[]]\n): AlgebraLifecycleProvenance {\n  return Object.freeze({ source: 'sdk-config', urls: Object.freeze(urls) });\n}\n\nconst PROVENANCE_BY_VARIANT: Readonly<Record<AlgebraLifecycleVariant, AlgebraLifecycleProvenance>> =\n  Object.freeze({\n    legacy: provenance(\n      SDK_CONFIG_URL,\n      'https://github.com/cryptoalgebra/Algebra/blob/11fff534a351d92b816f81953d0ad70de4ef35e9/src/core/contracts/interfaces/IAlgebraFactory.sol'\n    ),\n    directional: provenance(\n      SDK_CONFIG_URL,\n      'https://github.com/cryptoalgebra/Algebra/blob/ab8ea842204839802524f762b751ef835eb79ec3/src/core/contracts/interfaces/IAlgebraFactory.sol',\n      'https://github.com/cryptoalgebra/Algebra/blob/ab8ea842204839802524f762b751ef835eb79ec3/src/core/contracts/interfaces/pool/IAlgebraPoolState.sol'\n    ),\n    'integral-v1': provenance(\n      SDK_CONFIG_URL,\n      'https://github.com/cryptoalgebra/Algebra/blob/3eae63f432a889fca5b000e9bd61078c6f923995/src/core/contracts/interfaces/IAlgebraFactory.sol'\n    ),\n    'integral-v2': provenance(\n      SDK_CONFIG_URL,\n      'https://github.com/cryptoalgebra/Algebra/blob/62f01348af24b96d7d16f6b56fbaa61e512ba1c5/src/core/contracts/interfaces/IAlgebraFactory.sol',\n      'https://github.com/cryptoalgebra/Algebra/blob/62f01348af24b96d7d16f6b56fbaa61e512ba1c5/src/periphery/contracts/interfaces/IAlgebraCustomPoolEntryPoint.sol'\n    ),\n  });\n\nfunction deployment(input: DeploymentInput): AlgebraLifecycleDeployment {\n  const shape =\n    input.variant === 'directional'\n      ? {\n          adapter: 'algebra-directional-pair-v1' as const,\n          version: 1 as const,\n          createPool: 'pair' as const,\n          state: 'directional-global-state' as const,\n        }\n      : input.variant === 'integral-v1'\n        ? {\n            adapter: 'algebra-integral-pair-v1' as const,\n            version: 1 as const,\n            createPool: 'pair' as const,\n            state: 'integral-global-state' as const,\n          }\n        : input.variant === 'integral-v2'\n          ? {\n              adapter: 'algebra-integral-plugin-data-v2' as const,\n              version: 2 as const,\n              createPool: 'pair-with-plugin-data' as const,\n              state: 'integral-global-state' as const,\n            }\n          : {\n              adapter: 'algebra-legacy-pair-v1' as const,\n              version: 1 as const,\n              createPool: 'pair' as const,\n              state: 'legacy-global-state' as const,\n            };\n\n  return Object.freeze({\n    supported: true,\n    schemaVersion: 1,\n    family: 'algebra',\n    chainId: input.chainId,\n    protocol: input.protocol,\n    variant: input.variant,\n    ...shape,\n    factory: getAddress(input.factory),\n    ...(input.customPoolEntryPoint\n      ? { customPoolEntryPoint: getAddress(input.customPoolEntryPoint) }\n      : {}),\n    customPoolCreation: input.customPoolEntryPoint\n      ? 'adapter-specific-deployer-required'\n      : 'not-configured',\n    provenance: PROVENANCE_BY_VARIANT[input.variant],\n  });\n}\n\n/**\n * Explicit lifecycle capabilities for every Algebra-family protocol/chain pair\n * currently present in the SDK AMM registry. Subgraph presence is never used as\n * a runtime fallback.\n */\nexport const ALGEBRA_LIFECYCLE_DEPLOYMENTS: readonly AlgebraLifecycleDeployment[] = Object.freeze([\n  deployment({\n    chainId: ChainId.Polygon,\n    protocol: Protocol.QuickSwap,\n    variant: 'legacy',\n    factory: '0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28',\n  }),\n  deployment({\n    chainId: ChainId.PolygonzkEVM,\n    protocol: Protocol.QuickSwap,\n    variant: 'legacy',\n    factory: '0x4B9f4d2435Ef65559567e5DbFC1BbB37abC43B57',\n  }),\n  deployment({\n    chainId: ChainId.Zircuit,\n    protocol: Protocol.Ocelex,\n    variant: 'legacy',\n    factory: '0x03057ae6294292b299a1863420edD65e0197AFEf',\n  }),\n  deployment({\n    chainId: ChainId.Arbitrum,\n    protocol: Protocol.Camelot,\n    variant: 'directional',\n    factory: '0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B',\n  }),\n  deployment({\n    chainId: ChainId.Apechain,\n    protocol: Protocol.Camelot,\n    variant: 'directional',\n    factory: '0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B',\n  }),\n  deployment({\n    chainId: ChainId.Linea,\n    protocol: Protocol.Lynex,\n    variant: 'legacy',\n    factory: '0x622b2c98123D303ae067DB4925CD6282B3A08D0F',\n  }),\n  deployment({\n    chainId: ChainId.BSC,\n    protocol: Protocol.Thena,\n    variant: 'legacy',\n    factory: '0x306F06C147f064A010530292A1EB6737c3e378e4',\n  }),\n  deployment({\n    chainId: ChainId.Metis,\n    protocol: Protocol.Hercules,\n    variant: 'directional',\n    factory: '0xC5BfA92f27dF36d268422EE314a1387bB5ffB06A',\n  }),\n  deployment({\n    chainId: ChainId.XLayer,\n    protocol: Protocol.QuickSwapAlgebra,\n    variant: 'legacy',\n    factory: '0xd2480162Aa7F02Ead7BF4C127465446150D58452',\n  }),\n  deployment({\n    chainId: ChainId.Moonbeam,\n    protocol: Protocol.StellaSwap,\n    variant: 'legacy',\n    factory: '0xabE1655110112D0E45EF91e94f8d757e4ddBA59C',\n  }),\n\n  deployment({\n    chainId: ChainId.Mode,\n    protocol: Protocol.Kim,\n    variant: 'integral-v1',\n    factory: '0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5',\n  }),\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.Kim,\n    variant: 'integral-v1',\n    factory: '0x2F0d41f94d5D1550b79A83D2fe85C82d68c5a3ca',\n  }),\n  deployment({\n    chainId: ChainId.Telos,\n    protocol: Protocol.Swapsicle,\n    variant: 'integral-v1',\n    factory: '0xA09BAbf9A48003ae9b9333966a8Bda94d820D0d9',\n  }),\n  deployment({\n    chainId: ChainId.Blast,\n    protocol: Protocol.Fenix,\n    variant: 'integral-v1',\n    factory: '0x7a44CD060afC1B6F4c80A2B9b37f4473E74E25Df',\n  }),\n  deployment({\n    chainId: ChainId.Taiko,\n    protocol: Protocol.Henjin,\n    variant: 'integral-v1',\n    factory: '0x42B08e7a9211482d3643a126a7dF1895448d3509',\n    customPoolEntryPoint: '0x441013A52DDedc8D02eB9B90F7A555F6848188b5',\n  }),\n  deployment({\n    chainId: ChainId.Sonic,\n    protocol: Protocol.SilverSwap,\n    variant: 'integral-v1',\n    factory: '0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76',\n  }),\n  deployment({\n    chainId: ChainId.Nibiru,\n    protocol: Protocol.SilverSwap,\n    variant: 'integral-v1',\n    factory: '0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76',\n  }),\n  deployment({\n    chainId: ChainId.Zeta,\n    protocol: Protocol.Beam,\n    variant: 'integral-v1',\n    factory: '0x28b5244B6CA7Cb07f2f7F40edE944c07C2395603',\n  }),\n  deployment({\n    chainId: ChainId.Core,\n    protocol: Protocol.Glyph,\n    variant: 'integral-v1',\n    factory: '0x74EfE55beA4988e7D92D03EFd8ddB8BF8b7bD597',\n  }),\n  deployment({\n    chainId: ChainId.Hyperevm,\n    protocol: Protocol.Nest,\n    variant: 'integral-v1',\n    factory: '0xF77Bd082c627aA54591cF2f2EaA811fd1AB3b1F3',\n  }),\n\n  deployment({\n    chainId: ChainId.Soneium,\n    protocol: Protocol.QuickSwapIntegral,\n    variant: 'integral-v2',\n    factory: '0x8Ff309F68F6Caf77a78E9C20d2Af7Ed4bE2D7093',\n  }),\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.QuickSwapIntegral,\n    variant: 'integral-v2',\n    factory: '0xC5396866754799B9720125B104AE01d935Ab9C7b',\n    customPoolEntryPoint: '0xb9ce7698cE3dCf21cc88bf7dCc1fE20C85E4226E',\n  }),\n  deployment({\n    chainId: ChainId.Polygon,\n    protocol: Protocol.QuickSwapIntegral,\n    variant: 'integral-v2',\n    factory: '0x134c1dBE4860A9cAaf89002574fFe814772D9904',\n    customPoolEntryPoint: '0xfcfE065bc131Fa8Bb31A227b2fF4F0EC47D3F1a2',\n  }),\n  deployment({\n    chainId: ChainId.Bera,\n    protocol: Protocol.Wasabee,\n    variant: 'integral-v2',\n    factory: '0x7d53327D78EFD0b463bd8d7dc938C52402323b95',\n  }),\n  deployment({\n    chainId: ChainId.Ronin,\n    protocol: Protocol.KatanaIntegral,\n    variant: 'integral-v2',\n    factory: '0x7ecaf729C6FFb04448aA89A722cA370724BF70De',\n  }),\n  deployment({\n    chainId: ChainId.Avalanche,\n    protocol: Protocol.Blackhole,\n    variant: 'integral-v2',\n    factory: '0x512eb749541B7cf294be882D636218c84a5e9E5F',\n  }),\n  deployment({\n    chainId: ChainId.Mainnet,\n    protocol: Protocol.Cypher,\n    variant: 'integral-v2',\n    factory: '0xfb8Ed3485EfA29a0e4bed93351dD51B59fC4b0f0',\n    customPoolEntryPoint: '0x79616564DB0294ecBa5912f1cE985FD1c11eeF51',\n  }),\n  deployment({\n    chainId: ChainId.Flare,\n    protocol: Protocol.SparkIntegral,\n    variant: 'integral-v2',\n    factory: '0x805488DaA81c1b9e7C5cE3f1DCeA28F21448EC6A',\n  }),\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.Hydrex,\n    variant: 'integral-v2',\n    factory: '0x36077D39cdC65E1e3FB65810430E5b2c4D5fA29E',\n  }),\n]);\n\nfunction key(chainId: number, protocol: SupportedProtocol): string {\n  return `${chainId}:${protocol}`;\n}\n\nconst BY_KEY: CheckedRegistry<AlgebraLifecycleDeployment> = buildCheckedRegistry(\n  ALGEBRA_LIFECYCLE_DEPLOYMENTS,\n  (item) => key(item.chainId, item.protocol),\n  'Algebra lifecycle deployment'\n);\n\nexport function resolveAlgebraLifecycleDeployment(params: {\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n}): AlgebraLifecycleDeployment | undefined {\n  return BY_KEY[key(params.chainId, params.protocol)];\n}\n\n/** Validate external capability metadata and return its canonical frozen entry. */\nexport function validateAlgebraLifecycleDeployment(value: unknown): AlgebraLifecycleDeployment {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      'Algebra lifecycle deployment must be an object.'\n    );\n  }\n\n  const candidate = value as Partial<AlgebraLifecycleDeployment>;\n  if (!Number.isSafeInteger(candidate.chainId) || typeof candidate.protocol !== 'string') {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      'Algebra lifecycle deployment chainId and protocol are invalid.'\n    );\n  }\n\n  const configured = resolveAlgebraLifecycleDeployment({\n    chainId: Number(candidate.chainId),\n    protocol: candidate.protocol as SupportedProtocol,\n  });\n  let matches = false;\n  try {\n    const candidateEntryPoint = candidate.customPoolEntryPoint\n      ? getAddress(candidate.customPoolEntryPoint)\n      : undefined;\n    const configuredEntryPoint = configured?.customPoolEntryPoint;\n    matches =\n      configured !== undefined &&\n      candidate.supported === true &&\n      candidate.schemaVersion === configured.schemaVersion &&\n      candidate.family === configured.family &&\n      candidate.variant === configured.variant &&\n      candidate.adapter === configured.adapter &&\n      candidate.version === configured.version &&\n      getAddress(candidate.factory as Address) === configured.factory &&\n      candidate.createPool === configured.createPool &&\n      candidate.state === configured.state &&\n      candidateEntryPoint === configuredEntryPoint &&\n      candidate.customPoolCreation === configured.customPoolCreation;\n  } catch {\n    // The common fail-closed error below is the public runtime boundary.\n  }\n\n  if (!matches || !configured) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `Algebra lifecycle deployment is not configured for chain ${String(candidate.chainId)} and protocol ${String(candidate.protocol)}.`\n    );\n  }\n  return configured;\n}\n","import { getAddress, type Address, type Hex } from 'viem';\nimport { ChainId, Protocol } from '../../const/chain.js';\nimport type { SupportedProtocol } from '../../types.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { buildCheckedRegistry, type CheckedRegistry } from './registry.js';\n\nexport interface AerodromeSlipstreamLifecycleDeployment {\n  readonly supported: true;\n  readonly schemaVersion: 1;\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n  readonly family: 'aerodrome-slipstream';\n  readonly adapter: 'aerodrome-slipstream-factory-v1';\n  readonly version: 1;\n  readonly generation: 1 | 2 | 3;\n  /** Only this generation may create new pools through the public lifecycle API. */\n  readonly latest: boolean;\n  readonly factory: Address;\n  readonly factoryRuntimeCodeHash: Hex;\n  readonly poolImplementation: Address;\n  readonly poolImplementationRuntimeCodeHash: Hex;\n  readonly poolProxyRuntimeCodeHash: Hex;\n  readonly factoryRegistry: Address;\n  readonly voter: Address;\n  /** V2 and V3 retain this immutable duplicate guard against the original factory. */\n  readonly legacyCLFactory: Address | null;\n  readonly sourceVerification: Readonly<{\n    readonly sourceRevision: `0x${string}`;\n    readonly compilerVersion: '0.7.6+commit.7338295f';\n    readonly optimizer: Readonly<{ readonly enabled: true; readonly runs: 200 }>;\n    readonly executableRuntimeMatch: true;\n    readonly immutableAnchors: Readonly<{\n      readonly factoryRegistry: Address;\n      readonly voter: Address;\n      readonly poolImplementation: Address;\n      readonly legacyCLFactory: Address | null;\n    }>;\n  }>;\n  readonly provenance: Readonly<{\n    source: 'official-deployment';\n    urls: readonly [`https://${string}`, ...`https://${string}`[]];\n  }>;\n}\n\nconst factoryRegistry = getAddress('0x5C3F18F06CC09CA1910767A34a20F771039E37C0');\nconst voter = getAddress('0x16613524e02aD97edfef371Bc883F2f5D6c480A5');\nconst originalFactory = getAddress('0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A');\n\nfunction deployment(input: Omit<AerodromeSlipstreamLifecycleDeployment, 'supported' | 'schemaVersion' | 'family' | 'adapter' | 'version'>): AerodromeSlipstreamLifecycleDeployment {\n  return Object.freeze({\n    supported: true,\n    schemaVersion: 1,\n    family: 'aerodrome-slipstream',\n    adapter: 'aerodrome-slipstream-factory-v1',\n    version: 1,\n    ...input,\n  });\n}\n\nexport const AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS = Object.freeze([\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.Aerodrome,\n    generation: 1,\n    latest: false,\n    factory: originalFactory,\n    factoryRuntimeCodeHash:\n      '0x7340cf80843bd721bcaefbfc050e38304cb4174c239e6e914e3056f27f39b11c',\n    poolImplementation: getAddress('0xeC8E5342B19977B4eF8892e02D8DAEcfa1315831'),\n    poolImplementationRuntimeCodeHash:\n      '0x772fb5c610b40a122036f544e5b9b5bce6becb19db9524331289d1aaed2d5888',\n    poolProxyRuntimeCodeHash:\n      '0xacd6710f7037ad095b1e4d5f8ee5b2681069cb4dd316e77e4e0cb8f85716a2a1',\n    factoryRegistry,\n    voter,\n    legacyCLFactory: null,\n    sourceVerification: Object.freeze({\n      sourceRevision: '0x4ef07edcf5aaac5c22bcef6718c77e0416e7e472',\n      compilerVersion: '0.7.6+commit.7338295f',\n      optimizer: Object.freeze({ enabled: true, runs: 200 }),\n      executableRuntimeMatch: true,\n      immutableAnchors: Object.freeze({\n        factoryRegistry,\n        voter,\n        poolImplementation: getAddress('0xeC8E5342B19977B4eF8892e02D8DAEcfa1315831'),\n        legacyCLFactory: null,\n      }),\n    }),\n    provenance: Object.freeze({\n      source: 'official-deployment',\n      urls: Object.freeze([\n        'https://github.com/aerodrome-finance/slipstream/commit/37eead2c7e5302a204dec78bfa0775bbb8ff48a2',\n        'https://github.com/aerodrome-finance/slipstream/blob/4ef07edcf5aaac5c22bcef6718c77e0416e7e472/contracts/core/CLFactory.sol',\n        'https://github.com/aerodrome-finance/slipstream/blob/4ef07edcf5aaac5c22bcef6718c77e0416e7e472/contracts/core/CLPool.sol',\n        'https://basescan.org/address/0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A#code',\n      ] as const),\n    }),\n  }),\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.AerodromeV2,\n    generation: 2,\n    latest: false,\n    factory: getAddress('0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a'),\n    factoryRuntimeCodeHash:\n      '0x0e72100f63ce8e32c95370fa9636d38c8cf434a820f2a7a69985e50930d2cb85',\n    poolImplementation: getAddress('0x942e97a4c6FdC38B4CD1c0298D37d81fDD8E5A16'),\n    poolImplementationRuntimeCodeHash:\n      '0x916bc5496cc07ea86289bc3a08a90f93dcae34686be6634f6e89ef260c3df4fa',\n    poolProxyRuntimeCodeHash:\n      '0x18308290b554b22918ea53c7e4e49eb871181d182749bf9e3a65ef949d3be808',\n    factoryRegistry,\n    voter,\n    legacyCLFactory: originalFactory,\n    sourceVerification: Object.freeze({\n      sourceRevision: '0xaa539f4cdb59212aaf846cce60f6ac5e9470c157',\n      compilerVersion: '0.7.6+commit.7338295f',\n      optimizer: Object.freeze({ enabled: true, runs: 200 }),\n      executableRuntimeMatch: true,\n      immutableAnchors: Object.freeze({\n        factoryRegistry,\n        voter,\n        poolImplementation: getAddress('0x942e97a4c6FdC38B4CD1c0298D37d81fDD8E5A16'),\n        legacyCLFactory: originalFactory,\n      }),\n    }),\n    provenance: Object.freeze({\n      source: 'official-deployment',\n      urls: Object.freeze([\n        'https://github.com/aerodrome-finance/slipstream/commit/aa539f4cdb59212aaf846cce60f6ac5e9470c157',\n        'https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/contracts/core/CLFactory.sol',\n        'https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/contracts/core/CLPool.sol',\n        'https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/script/constants/output/DeployCL-Base-Gauge-Caps.json',\n        'https://basescan.org/address/0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a#code',\n      ] as const),\n    }),\n  }),\n  deployment({\n    chainId: ChainId.Base,\n    protocol: Protocol.AerodromeV3,\n    generation: 3,\n    latest: true,\n    factory: getAddress('0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef'),\n    factoryRuntimeCodeHash:\n      '0x4961963494e47f363617ab9a0f3999a28b33c519e51392952db06350cce700bd',\n    poolImplementation: getAddress('0xc770898522D2A9c8Da7A10D63989b6b58305B665'),\n    poolImplementationRuntimeCodeHash:\n      '0xe63484f408c701770737a3c40e435c8183c66b1663f3a8777ce44dd73aff339b',\n    poolProxyRuntimeCodeHash:\n      '0xad8972486d67a48db1f32f254a4c2f4be28df0b5f399559d1e7cd8fbcfbedc96',\n    factoryRegistry,\n    voter,\n    legacyCLFactory: originalFactory,\n    sourceVerification: Object.freeze({\n      sourceRevision: '0x618c88df58f1fa271e9b3bc6bc476a4c37d068dd',\n      compilerVersion: '0.7.6+commit.7338295f',\n      optimizer: Object.freeze({ enabled: true, runs: 200 }),\n      executableRuntimeMatch: true,\n      immutableAnchors: Object.freeze({\n        factoryRegistry,\n        voter,\n        poolImplementation: getAddress('0xc770898522D2A9c8Da7A10D63989b6b58305B665'),\n        legacyCLFactory: originalFactory,\n      }),\n    }),\n    provenance: Object.freeze({\n      source: 'official-deployment',\n      urls: Object.freeze([\n        'https://github.com/aerodrome-finance/slipstream/commit/618c88df58f1fa271e9b3bc6bc476a4c37d068dd',\n        'https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/contracts/core/CLFactory.sol',\n        'https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/contracts/core/CLPool.sol',\n        'https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/script/constants/output/DeployCL-Base-MinUnstake.json',\n        'https://basescan.org/address/0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef#code',\n      ] as const),\n    }),\n  }),\n] as const);\n\nconst registry: CheckedRegistry<AerodromeSlipstreamLifecycleDeployment> = buildCheckedRegistry(\n  AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS,\n  (item) => `${item.chainId}:${item.protocol}`,\n  'Aerodrome Slipstream lifecycle deployment'\n);\n\nexport function resolveAerodromeSlipstreamLifecycleDeployment(params: {\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n}): AerodromeSlipstreamLifecycleDeployment | undefined {\n  return registry[`${params.chainId}:${params.protocol}`];\n}\n\n/** Resolve the only factory generation that is eligible for a new pool deployment. */\nexport function resolveLatestAerodromeSlipstreamLifecycleDeployment(\n  chainId: number\n): AerodromeSlipstreamLifecycleDeployment | undefined {\n  return AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS.find(\n    (item) => item.chainId === chainId && item.latest\n  );\n}\n\nexport function assertLatestAerodromeSlipstreamLifecycleDeployment(\n  value: AerodromeSlipstreamLifecycleDeployment\n): AerodromeSlipstreamLifecycleDeployment {\n  const configured = validateAerodromeSlipstreamLifecycleDeployment(value);\n  if (!configured.latest) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `Aerodrome Slipstream generation ${configured.generation} is read/verification-only; new pools must use the latest generation.`\n    );\n  }\n  return configured;\n}\n\n/** Reject mutable or forged deployment metadata at every public boundary. */\nexport function validateAerodromeSlipstreamLifecycleDeployment(\n  value: unknown\n): AerodromeSlipstreamLifecycleDeployment {\n  const candidate = value as Partial<AerodromeSlipstreamLifecycleDeployment>;\n  const configured =\n    typeof candidate?.chainId === 'number' && typeof candidate.protocol === 'string'\n      ? resolveAerodromeSlipstreamLifecycleDeployment({\n          chainId: candidate.chainId,\n          protocol: candidate.protocol as SupportedProtocol,\n        })\n      : undefined;\n  try {\n    if (\n      configured &&\n      candidate.supported === true &&\n      candidate.schemaVersion === configured.schemaVersion &&\n      candidate.family === configured.family &&\n      candidate.adapter === configured.adapter &&\n      candidate.version === configured.version &&\n      candidate.generation === configured.generation &&\n      candidate.latest === configured.latest &&\n      getAddress(candidate.factory as Address) === configured.factory &&\n      candidate.factoryRuntimeCodeHash === configured.factoryRuntimeCodeHash &&\n      getAddress(candidate.poolImplementation as Address) === configured.poolImplementation &&\n      candidate.poolImplementationRuntimeCodeHash === configured.poolImplementationRuntimeCodeHash &&\n      candidate.poolProxyRuntimeCodeHash === configured.poolProxyRuntimeCodeHash &&\n      getAddress(candidate.factoryRegistry as Address) === configured.factoryRegistry &&\n      getAddress(candidate.voter as Address) === configured.voter &&\n      (configured.legacyCLFactory === null\n        ? candidate.legacyCLFactory === null\n        : getAddress(candidate.legacyCLFactory as Address) === configured.legacyCLFactory)\n    )\n      return configured;\n  } catch {\n    // Fall through to the shared fail-closed error.\n  }\n  throw new PoolLifecycleError(\n    'UNSUPPORTED_DEPLOYMENT',\n    `Aerodrome Slipstream lifecycle deployment is not configured for chain ${String(candidate?.chainId)} and protocol ${String(candidate?.protocol)}.`\n  );\n}\n","import { getAddress, type Address, type Hex } from 'viem';\nimport { ChainId, Protocol } from '../../const/chain.js';\nimport type { SupportedProtocol } from '../../types.js';\nimport { buildCheckedRegistry } from './registry.js';\n\nexport type V3LifecycleDeploymentProvenance = {\n  readonly source: 'sdk-config' | 'official-deployment' | 'verified-explorer';\n  readonly urls: readonly `https://${string}`[];\n};\n\ntype V3LifecycleDeploymentCommon = {\n  readonly supported: true;\n  readonly schemaVersion: 1;\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n  readonly family: 'uniswap-v3-compatible';\n  readonly version: 1;\n  readonly factory: Address;\n  readonly poolInitCodeHash?: Hex;\n  readonly provenance: V3LifecycleDeploymentProvenance;\n  readonly startBlock?: bigint;\n};\n\nexport type V3AtomicLifecycleDeployment = V3LifecycleDeploymentCommon & {\n  readonly adapter: 'pool-initializer-v1';\n  readonly initializer: Address;\n  readonly atomicCreateAndInitialize: true;\n};\n\nexport type V3FactoryLifecycleDeployment = V3LifecycleDeploymentCommon & {\n  readonly adapter: 'v3-factory-v1';\n  readonly initializer: null;\n  readonly atomicCreateAndInitialize: false;\n};\n\nexport type V3LifecycleDeployment = V3AtomicLifecycleDeployment | V3FactoryLifecycleDeployment;\n\nexport type ResolveV3LifecycleDeploymentParams = {\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n};\n\nconst STANDARD_V3_POOL_INIT_CODE_HASH =\n  '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54' as const;\n\nconst SDK_CONFIG_ROOT =\n  'https://github.com/SteerProtocol/sdk/blob/2dfaa0ee00bb80be684206f73e67b8d35f8ce9ff/src/const/amm/configs/protocols' as const;\nconst UNISWAP_DEPLOYMENTS = 'https://developers.uniswap.org/docs/protocols/v3/deployments' as const;\nconst UNISWAP_GOVERNANCE_DEPLOYMENTS =\n  'https://gov.uniswap.org/t/official-uniswap-v3-deployments-list/24323' as const;\nconst SUSHI_DEPLOYMENTS =\n  'https://unpkg.com/sushi@6.5.1/_esm/evm/config/features/sushiswap-v3.js' as const;\nconst PANCAKE_DEPLOYMENTS = 'https://developer.pancakeswap.finance/contracts/v3/addresses' as const;\n\nfunction deploymentKey(chainId: number, protocol: SupportedProtocol): string {\n  return `${chainId}:${protocol}`;\n}\n\nfunction provenance(\n  source: V3LifecycleDeploymentProvenance['source'],\n  ...urls: readonly `https://${string}`[]\n): V3LifecycleDeploymentProvenance {\n  return Object.freeze({ source, urls: Object.freeze(urls) });\n}\n\nfunction sdkConfigUrl(file: string): `https://${string}` {\n  return `${SDK_CONFIG_ROOT}/${file}.ts`;\n}\n\nfunction atomic(\n  params: Omit<\n    V3AtomicLifecycleDeployment,\n    | 'supported'\n    | 'schemaVersion'\n    | 'family'\n    | 'adapter'\n    | 'version'\n    | 'atomicCreateAndInitialize'\n    | 'factory'\n    | 'initializer'\n  > & {\n    readonly factory: string;\n    readonly initializer: string;\n  }\n): V3AtomicLifecycleDeployment {\n  return Object.freeze({\n    supported: true,\n    schemaVersion: 1,\n    family: 'uniswap-v3-compatible',\n    adapter: 'pool-initializer-v1',\n    version: 1,\n    atomicCreateAndInitialize: true,\n    ...params,\n    factory: getAddress(params.factory.toLowerCase()),\n    initializer: getAddress(params.initializer.toLowerCase()),\n  });\n}\n\nfunction factoryOnly(\n  params: Omit<\n    V3FactoryLifecycleDeployment,\n    | 'supported'\n    | 'schemaVersion'\n    | 'family'\n    | 'adapter'\n    | 'version'\n    | 'atomicCreateAndInitialize'\n    | 'initializer'\n    | 'factory'\n  > & { readonly factory: string }\n): V3FactoryLifecycleDeployment {\n  return Object.freeze({\n    supported: true,\n    schemaVersion: 1,\n    family: 'uniswap-v3-compatible',\n    adapter: 'v3-factory-v1',\n    version: 1,\n    atomicCreateAndInitialize: false,\n    initializer: null,\n    ...params,\n    factory: getAddress(params.factory.toLowerCase()),\n  });\n}\n\nconst uniswapProvenance = provenance(\n  'official-deployment',\n  UNISWAP_DEPLOYMENTS,\n  UNISWAP_GOVERNANCE_DEPLOYMENTS\n);\nconst sushiProvenance = provenance('official-deployment', SUSHI_DEPLOYMENTS);\nconst pancakeProvenance = provenance('official-deployment', PANCAKE_DEPLOYMENTS);\n\nconst deployments: readonly V3LifecycleDeployment[] = [\n  // Canonical Uniswap V3 deployments, including the official Base\n  // NonfungiblePositionManager now reflected in the SDK protocol metadata.\n  atomic({\n    chainId: ChainId.Mainnet,\n    protocol: Protocol.Uniswap,\n    factory: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    initializer: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Polygon,\n    protocol: Protocol.Uniswap,\n    factory: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    initializer: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Optimism,\n    protocol: Protocol.Uniswap,\n    factory: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    initializer: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Arbitrum,\n    protocol: Protocol.Uniswap,\n    factory: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    initializer: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.BSC,\n    protocol: Protocol.Uniswap,\n    factory: '0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7',\n    initializer: '0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Celo,\n    protocol: Protocol.Uniswap,\n    factory: '0xAfE208a311B21f13EF87E33A90049fC17A7acDEc',\n    initializer: '0x3d79EdAaBC0EaB6F08ED885C05Fc0B014290D95A',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Rootstock,\n    protocol: Protocol.Uniswap,\n    factory: '0xaF37EC98A00FD63689CF3060BF3B6784E00caD82',\n    initializer: '0x9d9386c042F194B460Ec424a1e57ACDE25f5C4b1',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Base,\n    protocol: Protocol.Uniswap,\n    factory: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',\n    initializer: '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Filecoin,\n    protocol: Protocol.Uniswap,\n    factory: '0xB4C47eD546Fc31E26470a186eC2C5F19eF09BA41',\n    initializer: '0x4cd986dD509fbB6A695aE971d5C56c8795f640ee',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Sonic,\n    protocol: Protocol.Uniswap,\n    factory: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n    initializer: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Unichain,\n    protocol: Protocol.Uniswap,\n    factory: '0x1f98400000000000000000000000000000000003',\n    initializer: '0x943e6e07a7e8e791dafc44083e54041d743c46e9',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Telos,\n    protocol: Protocol.Uniswap,\n    factory: '0xcb2436774C3e191c85056d248EF4260ce5f27A9D',\n    initializer: '0x743E03cceB4af2efA3CC76838f6E8B50B63F184c',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Saga,\n    protocol: Protocol.Uniswap,\n    factory: '0x454050C4c9190390981Ac4b8d5AFcd7aC65eEffa',\n    initializer: '0xdD489C75be1039ec7d843A6aC2Fd658350B067Cf',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Nibiru,\n    protocol: Protocol.Uniswap,\n    factory: '0x346239972d1fa486FC4a521031BC81bFB7D6e8a4',\n    initializer: '0xEFdE184f4b5d79f7c3b7Efc0388d829ff9af0050',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Robinhood,\n    protocol: Protocol.Uniswap,\n    factory: '0x1f7d7550b1b028f7571e69a784071f0205fd2efa',\n    initializer: '0x73991a25c818bf1f1128deaab1492d45638de0d3',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: uniswapProvenance,\n  }),\n\n  // Sushi V3 deployment data comes from Sushi's published SDK manifest. Robinhood\n  // is a newer deployment and remains additionally anchored to its verified explorers.\n  atomic({\n    chainId: ChainId.Polygon,\n    protocol: Protocol.Sushi,\n    factory: '0x917933899c6a5F8E37F31E19f92CdBFF7e8FF0e2',\n    initializer: '0xb7402ee99f0a008e461098ac3a27f4957df89a40',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Arbitrum,\n    protocol: Protocol.Sushi,\n    factory: '0x1af415a1EbA07a4986a52B6f2e7dE7003D82231e',\n    initializer: '0xf0cbce1942a68beb3d1b73f0dd86c8dcc363ef49',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Optimism,\n    protocol: Protocol.Sushi,\n    factory: '0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0',\n    initializer: '0x1af415a1eba07a4986a52b6f2e7de7003d82231e',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.BSC,\n    protocol: Protocol.Sushi,\n    factory: '0x126555dd55a39328F69400d6aE4F782Bd4C34ABb',\n    initializer: '0xf70c086618dcf2b1a461311275e00d6b722ef914',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Avalanche,\n    protocol: Protocol.Sushi,\n    factory: '0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715',\n    initializer: '0x18350b048ab366ed601ffdbc669110ecb36016f3',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Thundercore,\n    protocol: Protocol.Sushi,\n    factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    initializer: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.PolygonzkEVM,\n    protocol: Protocol.Sushi,\n    factory: '0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506',\n    initializer: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Base,\n    protocol: Protocol.Sushi,\n    factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    initializer: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Linea,\n    protocol: Protocol.Sushi,\n    factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    initializer: '0x80c7dd17b01855a6d2347444a0fcc36136a314de',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Blast,\n    protocol: Protocol.Sushi,\n    factory: '0x7680D4B43f3d1d54d6cfEeB2169463bFa7a6cf0d',\n    initializer: '0x51edb3e5bce8618b77b60215f84ad3db14709051',\n    poolInitCodeHash: '0x8e13daee7f5a62e37e71bf852bcd44e7d16b90617ed2b17c24c2ee62411c5bae',\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Rootstock,\n    protocol: Protocol.Sushi,\n    factory: '0x46B3fDF7b5CDe91Ac049936bF0bDb12c5d22202e',\n    initializer: '0x0389879e0156033202c44bf784ac18fc02edee4f',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Filecoin,\n    protocol: Protocol.Sushi,\n    factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4',\n    initializer: '0xf4d73326c13a4fc5fd7a064217e12780e9bd62c3',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Hemi,\n    protocol: Protocol.Sushi,\n    factory: '0xCdBCd51a5E8728E0AF4895ce5771b7d17fF71959',\n    initializer: '0xe43ca1dee3f0fc1e2df73a0745674545f11a59f5',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Katana,\n    protocol: Protocol.Sushi,\n    factory: '0x203e8740894c8955cB8950759876d7E7E45E04c1',\n    initializer: '0x2659c6085d26144117d904c46b48b6d180393d27',\n    poolInitCodeHash: '0xe040f12c7cee3904b78f24f8fc395629c2e69525c2815da7a659f7483e378ecb',\n    provenance: sushiProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Robinhood,\n    protocol: Protocol.Sushi,\n    factory: '0xe51960f1b45f1c9fb6d166e6a884f866fc70433b',\n    initializer: '0x51d0e5188afe12d502e29d982d20c190e7816107',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: provenance(\n      'verified-explorer',\n      'https://robinhoodchain.blockscout.com/address/0xe51960f1b45f1c9fb6d166e6a884f866fc70433b',\n      'https://robinhoodchain.blockscout.com/address/0x51d0e5188afe12d502e29d982d20c190e7816107'\n    ),\n    startBlock: 6_292_626n,\n  }),\n  atomic({\n    chainId: ChainId.Mainnet,\n    protocol: Protocol.Sushi,\n    factory: '0xbaceb8ec6b9355dfc0269c18bac9d6e2bdc29c4f',\n    initializer: '0x2214a42d8e2a1d20635c2cb0664422c528b6a432',\n    poolInitCodeHash: STANDARD_V3_POOL_INIT_CODE_HASH,\n    provenance: sushiProvenance,\n  }),\n\n  // Pancake V3 retains the V3 PoolInitializer interface even though its core\n  // deployment bytecode and deterministic pool-address details are adapter-specific.\n  atomic({\n    chainId: ChainId.BSC,\n    protocol: Protocol.PancakeSwap,\n    factory: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n    initializer: '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364',\n    provenance: pancakeProvenance,\n  }),\n  atomic({\n    chainId: ChainId.Arbitrum,\n    protocol: Protocol.PancakeSwap,\n    factory: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',\n    initializer: '0x46A15B0b27311cedF172AB29E4f4766fbE7F4364',\n    provenance: pancakeProvenance,\n  }),\n\n  // Other explicitly configured V3-family peripheries.\n  atomic({\n    chainId: ChainId.Evmos,\n    protocol: Protocol.Forge,\n    factory: '0xf544365e7065966f190155F629cE0182fC68Eaa2',\n    initializer: '0x5fE5dAAa011673289847dA4f76d63246DDB2965d',\n    provenance: provenance('sdk-config', sdkConfigUrl('forge')),\n  }),\n  atomic({\n    chainId: ChainId.Arbitrum,\n    protocol: Protocol.Horiza,\n    factory: '0x5b1C257B88537d1Ce2AF55a1760336288CcD28B6',\n    initializer: '0x39f16045432dc7cb6160269724821459b35938f9',\n    provenance: provenance('sdk-config', sdkConfigUrl('horiza')),\n  }),\n  atomic({\n    chainId: ChainId.Metis,\n    protocol: Protocol.Maia,\n    factory: '0xf5fd18Cd5325904cC7141cB9Daca1F2F964B9927',\n    initializer: '0x1fc37a909cB3997f96cE395B3Ee9ac268C9bCcdb',\n    provenance: provenance('sdk-config', sdkConfigUrl('maia')),\n  }),\n  atomic({\n    chainId: ChainId.Linea,\n    protocol: Protocol.MetaVault,\n    factory: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n    initializer: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n    provenance: provenance('sdk-config', sdkConfigUrl('metavault')),\n  }),\n  atomic({\n    chainId: ChainId.Scroll,\n    protocol: Protocol.MetaVault,\n    factory: '0x9367c561915f9D062aFE3b57B18e30dEC62b8488',\n    initializer: '0x5979C5315625276ff99a56f95eE5cC44293e7b36',\n    provenance: provenance('sdk-config', sdkConfigUrl('metavault')),\n  }),\n  atomic({\n    chainId: ChainId.Manta,\n    protocol: Protocol.QuickSwapUniv3,\n    factory: '0x56c2162254b0E4417288786eE402c2B41d4e181e',\n    initializer: '0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff',\n    provenance: provenance('sdk-config', sdkConfigUrl('quickswap-univ3')),\n  }),\n  atomic({\n    chainId: ChainId.AstarZkevm,\n    protocol: Protocol.QuickSwapUniv3,\n    factory: '0x56c2162254b0E4417288786eE402c2B41d4e181e',\n    initializer: '0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd',\n    provenance: provenance('sdk-config', sdkConfigUrl('quickswap-univ3')),\n  }),\n  atomic({\n    chainId: ChainId.Bittensor,\n    protocol: Protocol.BittensorUniV3,\n    factory: '0xfB30AE7542a5E8A5BC134128c0c9dEb4646a2508',\n    initializer: '0x32aF22F550bB1E9dd1382BEaBb0E3e6bb12fA549',\n    provenance: provenance('sdk-config', sdkConfigUrl('bittensor-univ3')),\n  }),\n\n  // The SDK has a canonical V3 factory binding for these pairs but no compatible\n  // atomic initializer metadata. Expose createPool only; callers initialize the\n  // returned pool through the separately validated direct-pool path.\n  factoryOnly({\n    chainId: ChainId.Astar,\n    protocol: Protocol.ArthSwap,\n    factory: '0x69E92b56e4BF4C0FFa2cFB087c7EA47E846a7244',\n    provenance: provenance('sdk-config', sdkConfigUrl('arthswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.AstarZkevm,\n    protocol: Protocol.ArthSwap,\n    factory: '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720',\n    provenance: provenance('sdk-config', sdkConfigUrl('arthswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Base,\n    protocol: Protocol.BaseSwap,\n    factory: '0x38015D05f4fEC8AFe15D7cc0386a126574e8077B',\n    provenance: provenance('sdk-config', sdkConfigUrl('baseswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Base,\n    protocol: Protocol.BaseX,\n    factory: '0xdC323d16C451819890805737997F4Ede96b95e3e',\n    provenance: provenance('sdk-config', sdkConfigUrl('basex')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Moonbeam,\n    protocol: Protocol.BeamSwap,\n    factory: '0xD118fa707147c54387B738F54838Ea5dD4196E71',\n    provenance: provenance('sdk-config', sdkConfigUrl('beamswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Mantle,\n    protocol: Protocol.Crust,\n    factory: '0xe67a97d7e55256F33fA0B1465d31E6CED36065d0',\n    provenance: provenance('sdk-config', sdkConfigUrl('crust')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Taiko,\n    protocol: Protocol.Dodo,\n    factory: '0x78172691DD3B8ADa7aEbd9bFfB487FB11D735DB2',\n    provenance: provenance('sdk-config', sdkConfigUrl('dodo')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Sei,\n    protocol: Protocol.DragonSwap,\n    factory: '0x179D9a5592Bc77050796F7be28058c51cA575df4',\n    provenance: provenance('sdk-config', sdkConfigUrl('dragonswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Zeta,\n    protocol: Protocol.Eddy,\n    factory: '0x67AA6B2b715937Edc1Eb4D3b7B5d5dCD1fd93E8C',\n    provenance: provenance('sdk-config', sdkConfigUrl('eddy')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Scroll,\n    protocol: Protocol.Equilibre,\n    factory: '0x952aC46B2586737df679e836d9B980E43E12B2d8',\n    provenance: provenance('sdk-config', sdkConfigUrl('equilibre')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Mantle,\n    protocol: Protocol.FusionX,\n    factory: '0x530d2766D1988CC1c000C8b7d00334c14B69AD71',\n    poolInitCodeHash: '0x1bce652aaa6528355d7a339037433a20cd28410e3967635ba8d2ddb037440dbf',\n    provenance: provenance('sdk-config', sdkConfigUrl('fusionx')),\n  }),\n  factoryOnly({\n    chainId: ChainId.TataraTestnet,\n    protocol: Protocol.Katana,\n    factory: '0x9B3336186a38E1b6c21955d112dbb0343Ee061eE',\n    provenance: provenance('sdk-config', sdkConfigUrl('katana')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Kava,\n    protocol: Protocol.Kinetix,\n    factory: '0x2dBB6254231C5569B6A4313c6C1F5Fe1340b35C2',\n    provenance: provenance('sdk-config', sdkConfigUrl('kinetix')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Base,\n    protocol: Protocol.Kinetix,\n    factory: '0xdDF5a3259a88Ab79D5530eB3eB14c1C92CD97FCf',\n    provenance: provenance('sdk-config', sdkConfigUrl('kinetix')),\n  }),\n  factoryOnly({\n    chainId: ChainId.BeraChainBartio,\n    protocol: Protocol.Kodiak,\n    factory: '0x217Cd80795EfCa5025d47023da5c03a24fA95356',\n    provenance: provenance('sdk-config', sdkConfigUrl('kodiak')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Bera,\n    protocol: Protocol.Kodiak,\n    factory: '0xD84CBf0B02636E7f53dB9E5e45A616E05d710990',\n    provenance: provenance('sdk-config', sdkConfigUrl('kodiak')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Soneium,\n    protocol: Protocol.Kyo,\n    factory: '0x137841043180BBA8EF52828F9030D1b7fE065F95',\n    provenance: provenance('sdk-config', sdkConfigUrl('kyo')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Linea,\n    protocol: Protocol.LineHub,\n    factory: '0x6c379d538F2F7cb642851e154A8E572D63238DF4',\n    provenance: provenance('sdk-config', sdkConfigUrl('linehub')),\n  }),\n  factoryOnly({\n    chainId: ChainId.ZklinkNova,\n    protocol: Protocol.NovaSwap,\n    factory: '0x9f94c91b178F5bc9fCcA3e5428b09A3d01CE5AC6',\n    provenance: provenance('sdk-config', sdkConfigUrl('novaswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.OkxTestnet,\n    protocol: Protocol.QuickSwapUniv3,\n    factory: '0x56c2162254b0E4417288786eE402c2B41d4e181e',\n    provenance: provenance('sdk-config', sdkConfigUrl('quickswap-univ3')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Sei,\n    protocol: Protocol.Sailor,\n    factory: '0x137841043180BBA8EF52828F9030D1b7fE065F95',\n    provenance: provenance('sdk-config', sdkConfigUrl('sailor')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Flare,\n    protocol: Protocol.Spark,\n    factory: '0xb3fB4f96175f6f9D716c17744e5A6d4BA9da8176',\n    provenance: provenance('sdk-config', sdkConfigUrl('spark')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Flare,\n    protocol: Protocol.Spark32,\n    factory: '0x8A2578d23d4C532cC9A98FaD91C0523f5efDE652',\n    provenance: provenance('sdk-config', sdkConfigUrl('spark32')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Sonic,\n    protocol: Protocol.SpookySwap,\n    factory: '0x3D91B700252e0E3eE7805d12e048a988Ab69C8ad',\n    provenance: provenance('sdk-config', sdkConfigUrl('spookyswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Mode,\n    protocol: Protocol.SupSwap,\n    factory: '0xa0b018Fe0d00ed075fb9b0eEe26d25cf72e1F693',\n    provenance: provenance('sdk-config', sdkConfigUrl('supswap')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Mode,\n    protocol: Protocol.SwapMode,\n    factory: '0x6E36FC34eA123044F278d3a9F3819027B21c9c32',\n    provenance: provenance('sdk-config', sdkConfigUrl('swapmode')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Fantom,\n    protocol: Protocol.Thick,\n    factory: '0xE6dA85feb3B4E0d6AEd95c41a125fba859bB9d24',\n    provenance: provenance('sdk-config', sdkConfigUrl('thick')),\n  }),\n  factoryOnly({\n    chainId: ChainId.Blast,\n    protocol: Protocol.Thruster,\n    factory: '0x71b08f13B3c3aF35aAdEb3949AFEb1ded1016127',\n    poolInitCodeHash: '0xd0c3a51b16dbc778f000c620eaabeecd33b33a80bd145e1f7cbc0d4de335193d',\n    provenance: provenance('sdk-config', sdkConfigUrl('thruster')),\n  }),\n];\n\n/** Explicit, fail-closed V3 create/initialize deployment allowlist. */\nexport const V3_LIFECYCLE_DEPLOYMENTS: Readonly<\n  Partial<Record<string, V3LifecycleDeployment>>\n> = buildCheckedRegistry(\n  deployments,\n  (entry) => deploymentKey(entry.chainId, entry.protocol),\n  'V3 lifecycle deployment'\n);\n\n/**\n * Protocols whose current SDK configuration is intentionally inventoried by\n * the V3 lifecycle registry. Adding a factory for one of these protocols must\n * also add an explicit lifecycle capability entry.\n */\nexport const V3_CONFIG_PROTOCOLS: readonly SupportedProtocol[] = Object.freeze([\n  Protocol.ArthSwap,\n  Protocol.BaseSwap,\n  Protocol.BaseX,\n  Protocol.BeamSwap,\n  Protocol.BittensorUniV3,\n  Protocol.Crust,\n  Protocol.Dodo,\n  Protocol.DragonSwap,\n  Protocol.Eddy,\n  Protocol.Equilibre,\n  Protocol.Forge,\n  Protocol.FusionX,\n  Protocol.Horiza,\n  Protocol.Katana,\n  Protocol.Kinetix,\n  Protocol.Kodiak,\n  Protocol.Kyo,\n  Protocol.LineHub,\n  Protocol.Maia,\n  Protocol.MetaVault,\n  Protocol.NovaSwap,\n  Protocol.PancakeSwap,\n  Protocol.QuickSwapUniv3,\n  Protocol.Sailor,\n  Protocol.Spark,\n  Protocol.Spark32,\n  Protocol.SpookySwap,\n  Protocol.SupSwap,\n  Protocol.Sushi,\n  Protocol.SwapMode,\n  Protocol.Thick,\n  Protocol.Thruster,\n  Protocol.Uniswap,\n]);\n\nexport function resolveV3LifecycleDeployment(\n  params: ResolveV3LifecycleDeploymentParams\n): V3LifecycleDeployment | undefined {\n  return V3_LIFECYCLE_DEPLOYMENTS[deploymentKey(params.chainId, params.protocol)];\n}\n","import { getAddress, type Address } from 'viem';\nimport { ChainId, Protocol } from '../../const/chain.js';\nimport type { SupportedProtocol } from '../../types.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { buildCheckedRegistry } from './registry.js';\n\nexport interface V4LifecycleDeploymentProvenance {\n  readonly source: 'sdk-config' | 'official-deployment' | 'verified-explorer';\n  readonly urls: readonly `https://${string}`[];\n}\n\nexport type V4LifecycleDeploymentId =\n  `uniswap-v4:${number}:${Protocol.UniswapV4}:${Lowercase<Address>}:${Lowercase<Address>}:pool-manager-initialize-v1:v1`;\n\nexport type V4LifecycleDeploymentByIdRegistry = Readonly<\n  Partial<Record<string, V4LifecycleDeployment>>\n>;\n\n/** A PoolManager/StateView pair explicitly approved for lifecycle writes. */\nexport interface V4LifecycleDeployment {\n  readonly supported: true;\n  readonly schemaVersion: 1;\n  readonly deploymentId: V4LifecycleDeploymentId;\n  readonly chainId: number;\n  readonly protocol: Protocol.UniswapV4;\n  readonly family: 'uniswap-v4';\n  readonly adapter: 'pool-manager-initialize-v1';\n  readonly version: 1;\n  readonly poolManager: Address;\n  readonly stateView: Address;\n  readonly provenance: V4LifecycleDeploymentProvenance;\n  /** Earliest PoolManager event block from the official V4 subgraph manifest. */\n  readonly startBlock: bigint;\n}\n\nexport interface ResolveV4LifecycleDeploymentParams {\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n}\n\nconst OFFICIAL_DEPLOYMENTS_URL = 'https://developers.uniswap.org/deployments.json' as const;\n\nexport function getV4LifecycleDeploymentId(params: {\n  readonly chainId: number;\n  readonly protocol: Protocol.UniswapV4;\n  readonly poolManager: Address;\n  readonly stateView: Address;\n  readonly adapter: 'pool-manager-initialize-v1';\n  readonly version: 1;\n}): V4LifecycleDeploymentId {\n  const poolManager = getAddress(params.poolManager).toLowerCase() as Lowercase<Address>;\n  const stateView = getAddress(params.stateView).toLowerCase() as Lowercase<Address>;\n  return `uniswap-v4:${params.chainId}:${params.protocol}:${poolManager}:${stateView}:${params.adapter}:v${params.version}`;\n}\n\nfunction deployment(\n  chainId: number,\n  poolManager: Address,\n  stateView: Address,\n  startBlock: bigint\n): V4LifecycleDeployment {\n  const poolManagerAddress = getAddress(poolManager);\n  const stateViewAddress = getAddress(stateView);\n  const identity = {\n    chainId,\n    protocol: Protocol.UniswapV4,\n    poolManager: poolManagerAddress,\n    stateView: stateViewAddress,\n    adapter: 'pool-manager-initialize-v1' as const,\n    version: 1 as const,\n  } as const;\n  return Object.freeze({\n    supported: true,\n    schemaVersion: 1,\n    deploymentId: getV4LifecycleDeploymentId(identity),\n    chainId,\n    protocol: Protocol.UniswapV4,\n    family: 'uniswap-v4',\n    adapter: identity.adapter,\n    version: identity.version,\n    poolManager: poolManagerAddress,\n    stateView: stateViewAddress,\n    startBlock,\n    provenance: Object.freeze({\n      source: 'official-deployment',\n      urls: Object.freeze([OFFICIAL_DEPLOYMENTS_URL]),\n    }),\n  });\n}\n\n/**\n * Explicit lifecycle-write registry. Entries are not inferred from discovery\n * configuration so a newly discovered deployment remains unsupported until it\n * is deliberately reviewed and versioned here.\n */\nexport const CURRENT_V4_LIFECYCLE_DEPLOYMENTS: readonly V4LifecycleDeployment[] = Object.freeze([\n  deployment(\n    ChainId.Mainnet,\n    '0x000000000004444c5dc75cB358380D2e3dE08A90',\n    '0x7ffe42c4a5deea5b0fec41c94c136cf115597227',\n    21_688_329n\n  ),\n  deployment(\n    ChainId.BSC,\n    '0x28e2ea090877bf75740558f6bfb36a5ffee9e9df',\n    '0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4',\n    45_970_610n\n  ),\n  deployment(\n    ChainId.Unichain,\n    '0x1f98400000000000000000000000000000000004',\n    '0x86e8631a016f9068c3f085faf484ee3f5fdee8f2',\n    25_500n\n  ),\n  deployment(\n    ChainId.Robinhood,\n    '0x8366a39cc670b4001a1121b8f6a443a643e40951',\n    '0xf3334192d15450cdd385c8b70e03f9a6bd9e673b',\n    9_070n\n  ),\n  deployment(\n    ChainId.Base,\n    '0x498581ff718922c3f8e6a244956af099b2652b2b',\n    '0xa3c0c9b65bad0b08107aa264b0f3db444b867a71',\n    25_350_988n\n  ),\n  deployment(\n    ChainId.Arbitrum,\n    '0x360e68faccca8ca495c1b759fd9eee466db9fb32',\n    '0x76fd297e2d437cd7f76d50f01afe6160f86e9990',\n    297_842_872n\n  ),\n]);\n\n/**\n * Every approved V4 deployment, including historical managers. When a current\n * deployment changes, retain the former entry here so existing plans remain\n * independently resolvable by deploymentId.\n */\nexport const V4_LIFECYCLE_DEPLOYMENTS: readonly V4LifecycleDeployment[] = Object.freeze([\n  ...CURRENT_V4_LIFECYCLE_DEPLOYMENTS,\n]);\n\nfunction deploymentKey(chainId: number, protocol: SupportedProtocol): string {\n  return `${chainId}:${protocol}`;\n}\n\nexport const V4_LIFECYCLE_DEPLOYMENTS_BY_ID: V4LifecycleDeploymentByIdRegistry =\n  buildCheckedRegistry(\n    V4_LIFECYCLE_DEPLOYMENTS,\n    (entry) => entry.deploymentId,\n    'V4 lifecycle deployment id'\n  );\n\nconst CURRENT_DEPLOYMENTS_BY_KEY: Readonly<\n  Partial<Record<string, V4LifecycleDeployment>>\n> = buildCheckedRegistry(\n  CURRENT_V4_LIFECYCLE_DEPLOYMENTS,\n  (entry) => deploymentKey(entry.chainId, entry.protocol),\n  'current V4 lifecycle deployment'\n);\n\n/** Resolve the explicitly selected current-default deployment for a chain/protocol pair. */\nexport function resolveCurrentV4LifecycleDeployment(\n  params: ResolveV4LifecycleDeploymentParams\n): V4LifecycleDeployment | undefined {\n  return CURRENT_DEPLOYMENTS_BY_KEY[deploymentKey(params.chainId, params.protocol)];\n}\n\n/** Backwards-compatible alias; prefer the name that makes current-default semantics explicit. */\nexport const resolveV4LifecycleDeployment = resolveCurrentV4LifecycleDeployment;\n\n/** Resolve an exact current or historical deployment without consulting defaults. */\nexport function resolveV4LifecycleDeploymentById(\n  deploymentId: string\n): V4LifecycleDeployment | undefined {\n  return V4_LIFECYCLE_DEPLOYMENTS_BY_ID[deploymentId];\n}\n\n/**\n * Validate capability metadata supplied across a UI/CLI boundary and return\n * the canonical frozen registry entry.\n */\nexport function validateV4LifecycleDeployment(value: unknown): V4LifecycleDeployment {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n    throw new PoolLifecycleError('UNSUPPORTED_DEPLOYMENT', 'V4 deployment must be an object.');\n  }\n  const candidate = value as Partial<V4LifecycleDeployment>;\n  if (\n    typeof candidate.deploymentId !== 'string' ||\n    !Number.isSafeInteger(candidate.chainId) ||\n    typeof candidate.protocol !== 'string'\n  ) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      'V4 deployment id, chainId, and protocol are invalid.'\n    );\n  }\n\n  const configured = resolveV4LifecycleDeploymentById(candidate.deploymentId);\n  let matches = false;\n  try {\n    matches =\n      configured !== undefined &&\n      candidate.supported === true &&\n      candidate.deploymentId === configured.deploymentId &&\n      candidate.schemaVersion === configured.schemaVersion &&\n      candidate.chainId === configured.chainId &&\n      candidate.protocol === configured.protocol &&\n      candidate.family === configured.family &&\n      candidate.adapter === configured.adapter &&\n      candidate.version === configured.version &&\n      getAddress(candidate.poolManager as Address) === configured.poolManager &&\n      getAddress(candidate.stateView as Address) === configured.stateView &&\n      candidate.startBlock === configured.startBlock;\n  } catch {\n    // The common fail-closed error below is the public runtime boundary.\n  }\n  if (!matches || !configured) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `V4 lifecycle deployment ${String(candidate.deploymentId)} is not configured.`\n    );\n  }\n  return configured;\n}\n","import type { SupportedProtocol } from '../types.js';\nimport {\n  ALGEBRA_LIFECYCLE_DEPLOYMENTS,\n  type AlgebraLifecycleDeployment,\n} from './capabilities/algebra.js';\nimport {\n  AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS,\n  type AerodromeSlipstreamLifecycleDeployment,\n} from './capabilities/aerodrome-slipstream.js';\nimport {\n  V3_LIFECYCLE_DEPLOYMENTS,\n  type V3LifecycleDeployment,\n} from './capabilities/v3.js';\nimport {\n  CURRENT_V4_LIFECYCLE_DEPLOYMENTS,\n  type V4LifecycleDeployment,\n} from './capabilities/v4.js';\nimport { buildCheckedRegistry } from './capabilities/registry.js';\n\nexport * from './capabilities/algebra.js';\nexport * from './capabilities/aerodrome-slipstream.js';\nexport * from './capabilities/v3.js';\nexport * from './capabilities/v4.js';\n\nexport type SupportedPoolLifecycleDeployment =\n  | V3LifecycleDeployment\n  | V4LifecycleDeployment\n  | AlgebraLifecycleDeployment\n  | AerodromeSlipstreamLifecycleDeployment;\n\nexport type UnsupportedPoolLifecycleDeployment = {\n  readonly supported: false;\n  readonly schemaVersion: 1;\n  readonly family: 'unsupported';\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n  readonly reason: 'deployment-not-configured';\n};\n\nexport type PoolLifecycleDeploymentResult =\n  | SupportedPoolLifecycleDeployment\n  | UnsupportedPoolLifecycleDeployment;\n\nexport type ResolvePoolLifecycleDeploymentParams = {\n  readonly chainId: number;\n  readonly protocol: SupportedProtocol;\n};\n\nexport type PoolLifecycleDeploymentRegistry = Readonly<\n  Partial<Record<string, SupportedPoolLifecycleDeployment>>\n>;\n\nfunction deploymentKey(deployment: ResolvePoolLifecycleDeploymentParams): string {\n  return `${deployment.chainId}:${deployment.protocol}`;\n}\n\nfunction buildLifecycleRegistry(): PoolLifecycleDeploymentRegistry {\n  const v3Deployments = Object.values(V3_LIFECYCLE_DEPLOYMENTS).filter(\n    (deployment): deployment is V3LifecycleDeployment => deployment !== undefined\n  );\n  const deployments: readonly SupportedPoolLifecycleDeployment[] = [\n    ...v3Deployments,\n    ...CURRENT_V4_LIFECYCLE_DEPLOYMENTS,\n    ...ALGEBRA_LIFECYCLE_DEPLOYMENTS,\n    ...AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS,\n  ];\n\n  return buildCheckedRegistry(deployments, deploymentKey, 'pool lifecycle deployment');\n}\n\n/**\n * Collision-checked current-default deployments, independent of discovery.\n * Historical V4 entries remain available through V4_LIFECYCLE_DEPLOYMENTS and\n * its deployment-id resolver instead of competing for this chain/protocol key.\n */\nexport const POOL_LIFECYCLE_DEPLOYMENTS = buildLifecycleRegistry();\n\n/**\n * Resolve only explicitly versioned lifecycle capabilities. Discovery and\n * subgraph metadata are never an implicit fallback for transaction building.\n */\nexport function resolvePoolLifecycleDeployment(\n  params: ResolvePoolLifecycleDeploymentParams\n): PoolLifecycleDeploymentResult {\n  const deployment = POOL_LIFECYCLE_DEPLOYMENTS[deploymentKey(params)];\n  if (deployment) return deployment;\n\n  return Object.freeze({\n    supported: false,\n    schemaVersion: 1,\n    family: 'unsupported',\n    chainId: params.chainId,\n    protocol: params.protocol,\n    reason: 'deployment-not-configured',\n  });\n}\n","import { parseAbi } from 'viem';\n\nexport const algebraPairFactoryAbi = parseAbi([\n  'event Pool(address indexed token0,address indexed token1,address pool)',\n  'function poolDeployer() view returns (address)',\n  'function poolByPair(address tokenA,address tokenB) view returns (address pool)',\n  'function createPool(address tokenA,address tokenB) returns (address pool)',\n]);\n\nexport const algebraIntegralPluginDataFactoryAbi = parseAbi([\n  'event Pool(address indexed token0,address indexed token1,address pool)',\n  'event CustomPool(address indexed deployer,address indexed token0,address indexed token1,address pool)',\n  'function poolDeployer() view returns (address)',\n  'function poolByPair(address tokenA,address tokenB) view returns (address pool)',\n  'function createPool(address tokenA,address tokenB,bytes data) returns (address pool)',\n  'function defaultConfigurationForPool() view returns (uint16 communityFee,int24 tickSpacing,uint16 fee)',\n  'function defaultPluginFactory() view returns (address)',\n]);\n\nexport const algebraIntegralPairFactoryAbi = parseAbi([\n  'event Pool(address indexed token0,address indexed token1,address pool)',\n  'event CustomPool(address indexed deployer,address indexed token0,address indexed token1,address pool)',\n  'function poolDeployer() view returns (address)',\n  'function poolByPair(address tokenA,address tokenB) view returns (address pool)',\n  'function createPool(address tokenA,address tokenB) returns (address pool)',\n  // Integral v1 revisions disagree on the combined configuration getter.\n  // These scalar getters are the common lifecycle-safe surface.\n  'function defaultTickspacing() view returns (int24)',\n  'function defaultFee() view returns (uint16)',\n  'function defaultPluginFactory() view returns (address)',\n]);\n\nexport const algebraPoolBaseAbi = parseAbi([\n  'event Initialize(uint160 price,int24 tick)',\n  'function factory() view returns (address)',\n  'function token0() view returns (address)',\n  'function token1() view returns (address)',\n  'function tickSpacing() view returns (int24)',\n  'function initialize(uint160 initialPrice)',\n]);\n\nexport const algebraLegacyPoolStateAbi = parseAbi([\n  'function globalState() view returns (uint160 price,int24 tick,int24 prevInitializedTick,uint16 fee,uint16 timepointIndex,uint8 communityFee,bool unlocked)',\n]);\n\nexport const algebraDirectionalPoolStateAbi = parseAbi([\n  'function globalState() view returns (uint160 price,int24 tick,uint16 feeZto,uint16 feeOtz,uint16 timepointIndex,uint8 communityFeeToken0,uint8 communityFeeToken1,bool unlocked)',\n]);\n\nexport const algebraIntegralPoolStateAbi = parseAbi([\n  'function globalState() view returns (uint160 price,int24 tick,uint16 lastFee,uint8 pluginConfig,uint16 communityFee,bool unlocked)',\n  'function plugin() view returns (address)',\n]);\n\n/**\n * Kept separate from standard pool creation. Calling this directly from an EOA\n * is invalid because the entry point requires msg.sender == deployer.\n */\nexport const algebraCustomPoolEntryPointAbi = parseAbi([\n  'function factory() view returns (address)',\n  'function createCustomPool(address deployer,address creator,address tokenA,address tokenB,bytes data) returns (address customPool)',\n]);\n","import { parseAbi } from 'viem';\n\n/** Exact Base Aerodrome Slipstream CLFactory lifecycle surface. */\nexport const aerodromeSlipstreamFactoryAbi = parseAbi([\n  'event PoolCreated(address indexed token0,address indexed token1,int24 indexed tickSpacing,address pool)',\n  'function getPool(address tokenA,address tokenB,int24 tickSpacing) view returns (address pool)',\n  'function tickSpacingToFee(int24 tickSpacing) view returns (uint24 fee)',\n  'function poolImplementation() view returns (address)',\n  'function factoryRegistry() view returns (address)',\n  'function voter() view returns (address)',\n  'function legacyCLFactory() view returns (address)',\n  'function isPool(address pool) view returns (bool)',\n  'function createPool(address tokenA,address tokenB,int24 tickSpacing,uint160 sqrtPriceX96) returns (address pool)',\n]);\n\n/** Exact Aerodrome Slipstream CLPool lifecycle read and event surface. */\nexport const aerodromeSlipstreamPoolAbi = parseAbi([\n  'event Initialize(uint160 sqrtPriceX96,int24 tick)',\n  'function factory() view returns (address)',\n  'function token0() view returns (address)',\n  'function token1() view returns (address)',\n  'function tickSpacing() view returns (int24)',\n  'function slot0() view returns (uint160 sqrtPriceX96,int24 tick,uint16 observationIndex,uint16 observationCardinality,uint16 observationCardinalityNext,bool unlocked)',\n]);\n","import type { Abi } from 'viem';\n\n/** Minimal canonical Uniswap V3-compatible factory ABI used by pool lifecycle flows. */\nexport const v3FactoryAbi = [\n  {\n    type: 'function',\n    name: 'createPool',\n    stateMutability: 'nonpayable',\n    inputs: [\n      { name: 'tokenA', type: 'address' },\n      { name: 'tokenB', type: 'address' },\n      { name: 'fee', type: 'uint24' },\n    ],\n    outputs: [{ name: 'pool', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'getPool',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'tokenA', type: 'address' },\n      { name: 'tokenB', type: 'address' },\n      { name: 'fee', type: 'uint24' },\n    ],\n    outputs: [{ name: 'pool', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'feeAmountTickSpacing',\n    stateMutability: 'view',\n    inputs: [{ name: 'fee', type: 'uint24' }],\n    outputs: [{ name: 'tickSpacing', type: 'int24' }],\n  },\n  {\n    type: 'event',\n    name: 'PoolCreated',\n    inputs: [\n      { name: 'token0', type: 'address', indexed: true },\n      { name: 'token1', type: 'address', indexed: true },\n      { name: 'fee', type: 'uint24', indexed: true },\n      { name: 'tickSpacing', type: 'int24', indexed: false },\n      { name: 'pool', type: 'address', indexed: false },\n    ],\n  },\n] as const satisfies Abi;\n\n/** Minimal PoolInitializer/NonfungiblePositionManager ABI used for atomic V3 setup. */\nexport const v3PoolInitializerAbi = [\n  {\n    type: 'function',\n    name: 'createAndInitializePoolIfNecessary',\n    stateMutability: 'payable',\n    inputs: [\n      { name: 'token0', type: 'address' },\n      { name: 'token1', type: 'address' },\n      { name: 'fee', type: 'uint24' },\n      { name: 'sqrtPriceX96', type: 'uint160' },\n    ],\n    outputs: [{ name: 'pool', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'factory',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'address' }],\n  },\n] as const satisfies Abi;\n\n/** Minimal canonical V3 pool ABI needed to initialize and verify a deployment. */\nexport const v3PoolAbi = [\n  {\n    type: 'function',\n    name: 'initialize',\n    stateMutability: 'nonpayable',\n    inputs: [{ name: 'sqrtPriceX96', type: 'uint160' }],\n    outputs: [],\n  },\n  {\n    type: 'function',\n    name: 'factory',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'token0',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'token1',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'address' }],\n  },\n  {\n    type: 'function',\n    name: 'fee',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'uint24' }],\n  },\n  {\n    type: 'function',\n    name: 'tickSpacing',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [{ name: '', type: 'int24' }],\n  },\n  {\n    type: 'function',\n    name: 'slot0',\n    stateMutability: 'view',\n    inputs: [],\n    outputs: [\n      { name: 'sqrtPriceX96', type: 'uint160' },\n      { name: 'tick', type: 'int24' },\n      { name: 'observationIndex', type: 'uint16' },\n      { name: 'observationCardinality', type: 'uint16' },\n      { name: 'observationCardinalityNext', type: 'uint16' },\n      { name: 'feeProtocol', type: 'uint8' },\n      { name: 'unlocked', type: 'bool' },\n    ],\n  },\n  {\n    type: 'event',\n    name: 'Initialize',\n    inputs: [\n      { name: 'sqrtPriceX96', type: 'uint160', indexed: false },\n      { name: 'tick', type: 'int24', indexed: false },\n    ],\n  },\n] as const satisfies Abi;\n","import { getAddress, isAddress } from 'viem';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport type { AlgebraInitialPrice, AlgebraPoolKey, AlgebraPoolKeyInput } from './types.js';\n\nexport function canonicalizeAlgebraPoolKey(input: AlgebraPoolKeyInput): AlgebraPoolKey {\n  if (!isAddress(input.tokenA, { strict: true }) || !isAddress(input.tokenB, { strict: true })) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Algebra tokens must be valid EVM addresses.');\n  }\n  const tokenA = getAddress(input.tokenA);\n  const tokenB = getAddress(input.tokenB);\n  if (\n    tokenA === '0x0000000000000000000000000000000000000000' ||\n    tokenB === '0x0000000000000000000000000000000000000000' ||\n    tokenA === tokenB\n  ) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Algebra tokens must be distinct and non-zero.');\n  }\n  return BigInt(tokenA) < BigInt(tokenB)\n    ? { token0: tokenA, token1: tokenB }\n    : { token0: tokenB, token1: tokenA };\n}\n\nexport function assertAlgebraInitialPrice(\n  key: AlgebraPoolKey,\n  price: AlgebraInitialPrice\n): AlgebraInitialPrice {\n  const priceKey = canonicalizeAlgebraPoolKey({ tokenA: price.token0, tokenB: price.token1 });\n  if (priceKey.token0 !== key.token0 || priceKey.token1 !== key.token1) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Algebra price tokens do not match the pool key.'\n    );\n  }\n  validateSqrtPriceX96(price.sqrtPriceX96);\n  return { token0: key.token0, token1: key.token1, sqrtPriceX96: price.sqrtPriceX96 };\n}\n","import { getAddress, type Address, type Hex, type PublicClient } from 'viem';\nimport {\n  algebraCustomPoolEntryPointAbi,\n  algebraDirectionalPoolStateAbi,\n  algebraIntegralPairFactoryAbi,\n  algebraIntegralPluginDataFactoryAbi,\n  algebraIntegralPoolStateAbi,\n  algebraLegacyPoolStateAbi,\n  algebraPairFactoryAbi,\n  algebraPoolBaseAbi,\n} from '../abis/algebra.js';\nimport {\n  validateAlgebraLifecycleDeployment,\n  type AlgebraLifecycleDeployment,\n} from '../capabilities/algebra.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { canonicalizeAlgebraPoolKey } from './key.js';\nimport type { AlgebraPoolKeyInput, AlgebraPoolSnapshot } from './types.js';\n\nconst ZERO = getAddress('0x0000000000000000000000000000000000000000');\n\nexport interface InspectAlgebraPoolParams {\n  readonly publicClient: PublicClient;\n  readonly deployment: AlgebraLifecycleDeployment;\n  readonly key: AlgebraPoolKeyInput;\n  readonly blockNumber?: bigint;\n}\n\nexport interface InspectAlgebraCustomPoolEntryPointParams {\n  readonly publicClient: PublicClient;\n  readonly deployment: AlgebraLifecycleDeployment;\n  readonly blockNumber?: bigint;\n}\n\nasync function requireCode(\n  client: PublicClient,\n  address: Address,\n  label: string,\n  blockNumber: bigint\n): Promise<void> {\n  const code: Hex | undefined = await client.getCode({ address, blockNumber });\n  if (!code || code === '0x') {\n    throw new PoolLifecycleError(\n      'CONTRACT_NOT_DEPLOYED',\n      `${label} ${address} has no bytecode at block ${blockNumber}.`\n    );\n  }\n}\n\n/** Verify configured custom-pool routing without claiming a generic deployer ABI. */\nexport async function inspectAlgebraCustomPoolEntryPoint(\n  params: InspectAlgebraCustomPoolEntryPointParams\n): Promise<{\n  readonly blockNumber: bigint;\n  readonly entryPoint: Address;\n  readonly factory: Address;\n}> {\n  const deployment = validateAlgebraLifecycleDeployment(params.deployment);\n  if (!deployment.customPoolEntryPoint) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `No custom Algebra entry point is configured for chain ${deployment.chainId} and protocol ${deployment.protocol}.`\n    );\n  }\n  const chainId = await params.publicClient.getChainId();\n  if (chainId !== deployment.chainId) {\n    throw new PoolLifecycleError(\n      'CHAIN_MISMATCH',\n      `Public client chain ${chainId} does not match Algebra deployment chain ${deployment.chainId}.`\n    );\n  }\n  const blockNumber = params.blockNumber ?? (await params.publicClient.getBlockNumber());\n  const entryPoint = deployment.customPoolEntryPoint;\n  const factory = deployment.factory;\n  await requireCode(\n    params.publicClient,\n    entryPoint,\n    'Algebra custom pool entry point',\n    blockNumber\n  );\n  const entryFactory = getAddress(\n    await params.publicClient.readContract({\n      address: entryPoint,\n      abi: algebraCustomPoolEntryPointAbi,\n      functionName: 'factory',\n      blockNumber,\n    })\n  );\n  if (entryFactory !== factory) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Algebra entry point factory ${entryFactory} does not match ${factory}.`\n    );\n  }\n  return { blockNumber, entryPoint, factory };\n}\n\nexport async function inspectAlgebraPool(\n  params: InspectAlgebraPoolParams\n): Promise<AlgebraPoolSnapshot> {\n  const { publicClient } = params;\n  const deployment = validateAlgebraLifecycleDeployment(params.deployment);\n  const key = canonicalizeAlgebraPoolKey(params.key);\n  const chainId = await publicClient.getChainId();\n  if (chainId !== deployment.chainId) {\n    throw new PoolLifecycleError(\n      'CHAIN_MISMATCH',\n      `Public client chain ${chainId} does not match Algebra deployment chain ${deployment.chainId}.`\n    );\n  }\n  const blockNumber = params.blockNumber ?? (await publicClient.getBlockNumber());\n  const factory = getAddress(deployment.factory);\n  await Promise.all([\n    requireCode(publicClient, factory, 'Algebra factory', blockNumber),\n    requireCode(publicClient, key.token0, 'token0', blockNumber),\n    requireCode(publicClient, key.token1, 'token1', blockNumber),\n  ]);\n\n  const factoryAbi =\n    deployment.createPool === 'pair-with-plugin-data'\n      ? algebraIntegralPluginDataFactoryAbi\n      : deployment.variant === 'integral-v1'\n        ? algebraIntegralPairFactoryAbi\n        : algebraPairFactoryAbi;\n  const [poolRaw, poolDeployerRaw] = await Promise.all([\n    publicClient.readContract({\n      address: factory,\n      abi: factoryAbi,\n      functionName: 'poolByPair',\n      args: [key.token0, key.token1],\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: factory,\n      abi: factoryAbi,\n      functionName: 'poolDeployer',\n      blockNumber,\n    }),\n  ]);\n  const poolDeployer = getAddress(poolDeployerRaw as Address);\n  if (poolDeployer === ZERO)\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Algebra factory ${factory} reports a zero pool deployer.`\n    );\n  await requireCode(publicClient, poolDeployer, 'Algebra pool deployer', blockNumber);\n\n  let defaultTickSpacing: number | null = null;\n  let defaultFee: number | null = null;\n  if (deployment.variant === 'integral-v1') {\n    const [tickSpacing, fee] = await Promise.all([\n      publicClient.readContract({\n        address: factory,\n        abi: algebraIntegralPairFactoryAbi,\n        functionName: 'defaultTickspacing',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: factory,\n        abi: algebraIntegralPairFactoryAbi,\n        functionName: 'defaultFee',\n        blockNumber,\n      }),\n    ]);\n    defaultTickSpacing = Number(tickSpacing);\n    defaultFee = Number(fee);\n  } else if (deployment.variant === 'integral-v2') {\n    const configuration = await publicClient.readContract({\n      address: factory,\n      abi: algebraIntegralPluginDataFactoryAbi,\n      functionName: 'defaultConfigurationForPool',\n      blockNumber,\n    });\n    defaultTickSpacing = Number(configuration[1]);\n    defaultFee = Number(configuration[2]);\n  }\n  if (\n    defaultTickSpacing !== null &&\n    (!Number.isInteger(defaultTickSpacing) || defaultTickSpacing <= 0)\n  ) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Algebra factory ${factory} reports invalid default tick spacing.`\n    );\n  }\n\n  const poolAddress = getAddress(poolRaw as Address);\n  if (poolAddress === ZERO) {\n    return {\n      schemaVersion: 1,\n      blockNumber,\n      deployment,\n      key,\n      status: 'absent',\n      poolAddress: null,\n      sqrtPriceX96: 0n,\n      tick: null,\n      tickSpacing: defaultTickSpacing,\n      fee: defaultFee,\n      directionalFee: null,\n      plugin: null,\n      pluginConfig: null,\n      unlocked: null,\n    };\n  }\n\n  await requireCode(publicClient, poolAddress, 'Algebra pool', blockNumber);\n  const [actualFactoryRaw, token0Raw, token1Raw, tickSpacingRaw] = await Promise.all([\n    publicClient.readContract({\n      address: poolAddress,\n      abi: algebraPoolBaseAbi,\n      functionName: 'factory',\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: poolAddress,\n      abi: algebraPoolBaseAbi,\n      functionName: 'token0',\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: poolAddress,\n      abi: algebraPoolBaseAbi,\n      functionName: 'token1',\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: poolAddress,\n      abi: algebraPoolBaseAbi,\n      functionName: 'tickSpacing',\n      blockNumber,\n    }),\n  ]);\n  if (\n    getAddress(actualFactoryRaw) !== factory ||\n    getAddress(token0Raw) !== key.token0 ||\n    getAddress(token1Raw) !== key.token1\n  ) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Pool ${poolAddress} does not match the configured Algebra deployment and token pair.`\n    );\n  }\n  const tickSpacing = Number(tickSpacingRaw);\n\n  let sqrtPriceX96: bigint;\n  let tick: number;\n  let fee: number | null = null;\n  let directionalFee: { zeroToOne: number; oneToZero: number } | null = null;\n  let plugin: Address | null = null;\n  let pluginConfig: number | null = null;\n  let unlocked: boolean;\n  if (deployment.state === 'directional-global-state') {\n    const state = await publicClient.readContract({\n      address: poolAddress,\n      abi: algebraDirectionalPoolStateAbi,\n      functionName: 'globalState',\n      blockNumber,\n    });\n    sqrtPriceX96 = state[0];\n    tick = Number(state[1]);\n    directionalFee = { zeroToOne: Number(state[2]), oneToZero: Number(state[3]) };\n    unlocked = state[7];\n  } else if (deployment.state === 'integral-global-state') {\n    const [state, pluginRaw] = await Promise.all([\n      publicClient.readContract({\n        address: poolAddress,\n        abi: algebraIntegralPoolStateAbi,\n        functionName: 'globalState',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: algebraIntegralPoolStateAbi,\n        functionName: 'plugin',\n        blockNumber,\n      }),\n    ]);\n    sqrtPriceX96 = state[0];\n    tick = Number(state[1]);\n    fee = Number(state[2]);\n    pluginConfig = Number(state[3]);\n    unlocked = state[5];\n    const pluginAddress = getAddress(pluginRaw);\n    plugin = pluginAddress === ZERO ? null : pluginAddress;\n  } else {\n    const state = await publicClient.readContract({\n      address: poolAddress,\n      abi: algebraLegacyPoolStateAbi,\n      functionName: 'globalState',\n      blockNumber,\n    });\n    sqrtPriceX96 = state[0];\n    tick = Number(state[1]);\n    fee = Number(state[3]);\n    unlocked = state[6];\n  }\n\n  const uninitializedIntegralPool =\n    deployment.variant.startsWith('integral') && sqrtPriceX96 === 0n && tickSpacing === 0;\n  if (!Number.isInteger(tickSpacing) || (tickSpacing <= 0 && !uninitializedIntegralPool)) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Pool ${poolAddress} reports invalid tick spacing.`\n    );\n  }\n\n  return {\n    schemaVersion: 1,\n    blockNumber,\n    deployment,\n    key,\n    status: sqrtPriceX96 === 0n ? 'uninitialized' : 'initialized',\n    poolAddress,\n    sqrtPriceX96,\n    tick,\n    tickSpacing,\n    fee,\n    directionalFee,\n    plugin,\n    pluginConfig,\n    unlocked,\n  };\n}\n","import { encodeFunctionData, getAddress, type Hex } from 'viem';\nimport {\n  algebraIntegralPairFactoryAbi,\n  algebraIntegralPluginDataFactoryAbi,\n  algebraPairFactoryAbi,\n  algebraPoolBaseAbi,\n} from '../abis/algebra.js';\nimport {\n  validateAlgebraLifecycleDeployment,\n  type AlgebraLifecycleDeployment,\n} from '../capabilities/algebra.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectAlgebraPool, type InspectAlgebraPoolParams } from './inspect.js';\nimport { assertAlgebraInitialPrice, canonicalizeAlgebraPoolKey } from './key.js';\nimport type {\n  AlgebraInitialPrice,\n  AlgebraPoolIdentity,\n  AlgebraPoolKeyInput,\n  AlgebraPoolSnapshot,\n  AlgebraPreflightSummary,\n  PreparedAlgebraCreatePoolAction,\n  PreparedAlgebraInitializePoolAction,\n} from './types.js';\n\nconst ZERO_ADDRESS = getAddress('0x0000000000000000000000000000000000000000');\n\ninterface BuildBase {\n  readonly deployment: AlgebraLifecycleDeployment;\n  readonly key: AlgebraPoolKeyInput;\n  readonly preflight: AlgebraPoolSnapshot;\n}\n\nexport interface BuildAlgebraCreatePoolTransactionParams extends BuildBase {\n  readonly pluginData?: Hex;\n}\n\nexport interface BuildAlgebraInitializePoolTransactionParams extends BuildBase {\n  readonly initialPrice: AlgebraInitialPrice;\n}\n\nfunction assertPreflight(\n  deployment: AlgebraLifecycleDeployment,\n  key: ReturnType<typeof canonicalizeAlgebraPoolKey>,\n  snapshot: AlgebraPoolSnapshot\n): void {\n  let matches = false;\n  try {\n    const snapshotDeployment = validateAlgebraLifecycleDeployment(snapshot.deployment);\n    matches =\n      snapshot.schemaVersion === 1 &&\n      typeof snapshot.blockNumber === 'bigint' &&\n      snapshot.blockNumber >= 0n &&\n      snapshotDeployment === deployment &&\n      snapshot.key.token0 === key.token0 &&\n      snapshot.key.token1 === key.token1 &&\n      (snapshot.status === 'absent' ||\n        snapshot.status === 'uninitialized' ||\n        snapshot.status === 'initialized');\n  } catch {\n    // The uniform invalid-input error below is the public action boundary.\n  }\n  if (!matches) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Algebra preflight does not match the requested deployment and token pair.'\n    );\n  }\n\n  if (snapshot.status === 'absent') {\n    if (snapshot.poolAddress !== null || snapshot.sqrtPriceX96 !== 0n || snapshot.tick !== null) {\n      throw new PoolLifecycleError('INVALID_INPUT', 'Absent Algebra preflight is inconsistent.');\n    }\n    return;\n  }\n  if (!snapshot.poolAddress || getAddress(snapshot.poolAddress) === ZERO_ADDRESS) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Algebra preflight pool address is invalid.');\n  }\n  if (snapshot.status === 'uninitialized' && snapshot.sqrtPriceX96 !== 0n) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Uninitialized Algebra preflight must have zero sqrtPriceX96.'\n    );\n  }\n}\n\nfunction summary(snapshot: AlgebraPoolSnapshot): AlgebraPreflightSummary {\n  return {\n    blockNumber: snapshot.blockNumber,\n    status: snapshot.status,\n    poolAddress: snapshot.poolAddress,\n    sqrtPriceX96: snapshot.sqrtPriceX96,\n  };\n}\n\nfunction identity(\n  deployment: AlgebraLifecycleDeployment,\n  key: ReturnType<typeof canonicalizeAlgebraPoolKey>,\n  poolAddress: AlgebraPoolSnapshot['poolAddress']\n): AlgebraPoolIdentity {\n  return {\n    family: 'algebra',\n    adapter: deployment.adapter,\n    version: deployment.version,\n    variant: deployment.variant,\n    chainId: deployment.chainId,\n    factory: getAddress(deployment.factory),\n    key,\n    poolAddress,\n  };\n}\n\n/** Build the version-specific standard-pool factory call without signing it. */\nexport function buildAlgebraCreatePoolTransaction(\n  params: BuildAlgebraCreatePoolTransactionParams\n): PreparedAlgebraCreatePoolAction {\n  const deployment = validateAlgebraLifecycleDeployment(params.deployment);\n  const key = canonicalizeAlgebraPoolKey(params.key);\n  assertPreflight(deployment, key, params.preflight);\n  if (params.preflight.status !== 'absent') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `Algebra pool already exists at ${params.preflight.poolAddress}.`\n    );\n  }\n  const pluginData = params.pluginData ?? '0x';\n  if (deployment.createPool === 'pair' && pluginData !== '0x') {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      `${deployment.variant} pool creation does not accept plugin data.`\n    );\n  }\n  const data =\n    deployment.createPool === 'pair-with-plugin-data'\n      ? encodeFunctionData({\n          abi: algebraIntegralPluginDataFactoryAbi,\n          functionName: 'createPool',\n          args: [key.token0, key.token1, pluginData],\n        })\n      : encodeFunctionData({\n          abi:\n            deployment.variant === 'integral-v1'\n              ? algebraIntegralPairFactoryAbi\n              : algebraPairFactoryAbi,\n          functionName: 'createPool',\n          args: [key.token0, key.token1],\n        });\n  return {\n    schemaVersion: 1,\n    kind: 'algebra-create',\n    protocol: deployment.protocol,\n    transaction: {\n      chainId: deployment.chainId,\n      to: deployment.factory,\n      data,\n      value: 0n,\n    },\n    identity: identity(deployment, key, null),\n    expected: { sqrtPriceX96: null, pluginData },\n    preflight: summary(params.preflight),\n  };\n}\n\n/** Build a direct initialization call bound to an inspected, uninitialized pool. */\nexport function buildAlgebraInitializePoolTransaction(\n  params: BuildAlgebraInitializePoolTransactionParams\n): PreparedAlgebraInitializePoolAction {\n  const deployment = validateAlgebraLifecycleDeployment(params.deployment);\n  const key = canonicalizeAlgebraPoolKey(params.key);\n  const price = assertAlgebraInitialPrice(key, params.initialPrice);\n  assertPreflight(deployment, key, params.preflight);\n  if (params.preflight.status !== 'uninitialized' || !params.preflight.poolAddress) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Algebra initialization requires an inspected, uninitialized factory pool.'\n    );\n  }\n  const poolAddress = getAddress(params.preflight.poolAddress);\n  return {\n    schemaVersion: 1,\n    kind: 'algebra-initialize',\n    protocol: deployment.protocol,\n    transaction: {\n      chainId: deployment.chainId,\n      to: poolAddress,\n      data: encodeFunctionData({\n        abi: algebraPoolBaseAbi,\n        functionName: 'initialize',\n        args: [price.sqrtPriceX96],\n      }),\n      value: 0n,\n    },\n    identity: identity(deployment, key, poolAddress),\n    expected: { sqrtPriceX96: price.sqrtPriceX96, pluginData: null },\n    preflight: summary(params.preflight),\n  };\n}\n\nexport type PrepareAlgebraPoolResult =\n  | {\n      readonly status: 'ready-create';\n      readonly snapshot: AlgebraPoolSnapshot;\n      readonly action: PreparedAlgebraCreatePoolAction;\n    }\n  | {\n      readonly status: 'ready-initialize';\n      readonly snapshot: AlgebraPoolSnapshot;\n      readonly action: PreparedAlgebraInitializePoolAction;\n    }\n  | {\n      readonly status: 'already-initialized-matching';\n      readonly snapshot: AlgebraPoolSnapshot;\n      readonly action: null;\n    };\n\n/**\n * Prepare the next honest lifecycle step. Creation and initialization remain\n * separate when the SDK has no proven atomic initializer deployment.\n */\nexport async function prepareAlgebraPool(\n  params: Omit<InspectAlgebraPoolParams, 'blockNumber'> & {\n    readonly initialPrice: AlgebraInitialPrice;\n    readonly pluginData?: Hex;\n    readonly blockNumber?: bigint;\n  }\n): Promise<PrepareAlgebraPoolResult> {\n  const snapshot = await inspectAlgebraPool(params);\n  if (snapshot.status === 'absent') {\n    return {\n      status: 'ready-create',\n      snapshot,\n      action: buildAlgebraCreatePoolTransaction({\n        deployment: snapshot.deployment,\n        key: params.key,\n        preflight: snapshot,\n        pluginData: params.pluginData,\n      }),\n    };\n  }\n  if (snapshot.status === 'uninitialized') {\n    return {\n      status: 'ready-initialize',\n      snapshot,\n      action: buildAlgebraInitializePoolTransaction({\n        deployment: snapshot.deployment,\n        key: params.key,\n        preflight: snapshot,\n        initialPrice: params.initialPrice,\n      }),\n    };\n  }\n  const expected = assertAlgebraInitialPrice(snapshot.key, params.initialPrice);\n  if (snapshot.sqrtPriceX96 !== expected.sqrtPriceX96) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `Algebra pool ${snapshot.poolAddress} is already initialized at a different price.`\n    );\n  }\n  return { status: 'already-initialized-matching', snapshot, action: null };\n}\n","import { encodeFunctionData, getAddress, isAddress, type Address, type Hex } from 'viem';\nimport {\n  algebraIntegralPairFactoryAbi,\n  algebraIntegralPluginDataFactoryAbi,\n  algebraPairFactoryAbi,\n  algebraPoolBaseAbi,\n} from '../abis/algebra.js';\nimport {\n  resolveAlgebraLifecycleDeployment,\n  type AlgebraLifecycleDeployment,\n} from '../capabilities/algebra.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport type { PoolActionSimulation, PoolActionVerification, PreparedPoolAction } from '../types.js';\nimport { deserializePreparedPoolAction } from '../types.js';\n\nexport interface AlgebraPoolKeyInput {\n  readonly tokenA: Address;\n  readonly tokenB: Address;\n}\n\nexport interface AlgebraPoolKey {\n  readonly token0: Address;\n  readonly token1: Address;\n}\n\nexport interface AlgebraInitialPrice extends AlgebraPoolKey {\n  readonly sqrtPriceX96: bigint;\n}\n\nexport interface AlgebraPoolSnapshot {\n  readonly schemaVersion: 1;\n  readonly blockNumber: bigint;\n  readonly deployment: AlgebraLifecycleDeployment;\n  readonly key: AlgebraPoolKey;\n  readonly status: 'absent' | 'uninitialized' | 'initialized';\n  readonly poolAddress: Address | null;\n  readonly sqrtPriceX96: bigint;\n  readonly tick: number | null;\n  readonly tickSpacing: number | null;\n  readonly fee: number | null;\n  readonly directionalFee: Readonly<{ zeroToOne: number; oneToZero: number }> | null;\n  readonly plugin: Address | null;\n  readonly pluginConfig: number | null;\n  readonly unlocked: boolean | null;\n}\n\nexport interface AlgebraPoolIdentity {\n  readonly family: 'algebra';\n  readonly adapter: AlgebraLifecycleDeployment['adapter'];\n  readonly version: 1 | 2;\n  readonly variant: AlgebraLifecycleDeployment['variant'];\n  readonly chainId: number;\n  readonly factory: Address;\n  readonly key: AlgebraPoolKey;\n  readonly poolAddress: Address | null;\n}\n\nexport interface AlgebraPreflightSummary {\n  readonly blockNumber: bigint;\n  readonly status: AlgebraPoolSnapshot['status'];\n  readonly poolAddress: Address | null;\n  readonly sqrtPriceX96: bigint;\n}\n\nexport type PreparedAlgebraCreatePoolAction = PreparedPoolAction<\n  'algebra-create',\n  AlgebraPoolIdentity,\n  { readonly sqrtPriceX96: null; readonly pluginData: Hex },\n  AlgebraPreflightSummary\n>;\n\nexport type PreparedAlgebraInitializePoolAction = PreparedPoolAction<\n  'algebra-initialize',\n  AlgebraPoolIdentity,\n  { readonly sqrtPriceX96: bigint; readonly pluginData: null },\n  AlgebraPreflightSummary\n>;\n\nexport type PreparedAlgebraPoolAction =\n  | PreparedAlgebraCreatePoolAction\n  | PreparedAlgebraInitializePoolAction;\n\nexport interface AlgebraPoolActionSimulation extends PoolActionSimulation {\n  readonly returnedPoolAddress: Address | null;\n}\n\nexport interface AlgebraReceiptEvidence {\n  readonly receiptStatus: 'success' | 'reverted';\n  readonly poolCreated: Readonly<{ poolAddress: Address; logIndex: number }> | null;\n  readonly initialization: Readonly<{\n    poolAddress: Address;\n    sqrtPriceX96: bigint;\n    tick: number;\n    logIndex: number;\n  }> | null;\n}\n\nexport type AlgebraPoolActionVerification = PoolActionVerification<\n  AlgebraPoolIdentity,\n  AlgebraPoolSnapshot,\n  AlgebraReceiptEvidence\n>;\n\nfunction invalid(message: string): never {\n  throw new PoolLifecycleError('INVALID_INPUT', message);\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n  if (!value || typeof value !== 'object' || Array.isArray(value))\n    return invalid(`${label} must be an object.`);\n  return value as Record<string, unknown>;\n}\n\nfunction address(value: unknown, label: string, nullable = false): Address | null {\n  if (nullable && value === null) return null;\n  if (typeof value !== 'string' || !isAddress(value, { strict: true }))\n    return invalid(`${label} must be a valid address.`);\n  const result = getAddress(value);\n  if (result === '0x0000000000000000000000000000000000000000')\n    return invalid(`${label} must not be zero.`);\n  return result;\n}\n\nfunction hex(value: unknown, label: string): Hex {\n  if (typeof value !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value))\n    return invalid(`${label} must be hex bytes.`);\n  return value as Hex;\n}\n\nfunction key(value: unknown): AlgebraPoolKey {\n  const item = record(value, 'Algebra key');\n  const token0 = address(item.token0, 'Algebra token0') as Address;\n  const token1 = address(item.token1, 'Algebra token1') as Address;\n  if (BigInt(token0) >= BigInt(token1))\n    return invalid('Algebra tokens must be canonically ordered and distinct.');\n  return { token0, token1 };\n}\n\n/** Re-derive target and calldata after a plan crosses a UI/CLI/JSON boundary. */\nexport function validatePreparedAlgebraPoolAction(value: unknown): AlgebraLifecycleDeployment {\n  const action = record(value, 'Prepared Algebra action');\n  if (\n    action.schemaVersion !== 1 ||\n    (action.kind !== 'algebra-create' && action.kind !== 'algebra-initialize')\n  ) {\n    return invalid('Prepared Algebra action kind or schema version is unsupported.');\n  }\n  if (typeof action.protocol !== 'string')\n    return invalid('Algebra action protocol must be a string.');\n  const tx = record(action.transaction, 'Algebra transaction');\n  if (!Number.isSafeInteger(tx.chainId) || Number(tx.chainId) <= 0)\n    return invalid('Algebra chainId must be a positive safe integer.');\n  if (tx.value !== 0n) return invalid('Algebra lifecycle transactions must have zero value.');\n  const to = address(tx.to, 'Algebra transaction target') as Address;\n  const data = hex(tx.data, 'Algebra calldata');\n  const deployment = resolveAlgebraLifecycleDeployment({\n    chainId: Number(tx.chainId),\n    protocol: action.protocol as PreparedAlgebraPoolAction['protocol'],\n  });\n  if (!deployment) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `No Algebra lifecycle deployment is configured for chain ${tx.chainId} and protocol ${action.protocol}.`\n    );\n  }\n\n  const identity = record(action.identity, 'Algebra identity');\n  const poolKey = key(identity.key);\n  if (\n    identity.family !== 'algebra' ||\n    identity.adapter !== deployment.adapter ||\n    identity.version !== deployment.version ||\n    identity.variant !== deployment.variant ||\n    identity.chainId !== deployment.chainId ||\n    address(identity.factory, 'Algebra identity factory') !== getAddress(deployment.factory)\n  )\n    return invalid('Algebra identity does not match the configured deployment.');\n\n  const expected = record(action.expected, 'Algebra expectation');\n  const preflight = record(action.preflight, 'Algebra preflight');\n  if (typeof preflight.blockNumber !== 'bigint' || preflight.blockNumber < 0n) {\n    return invalid('Algebra preflight blockNumber must be a non-negative bigint.');\n  }\n  let expectedTo: Address;\n  let expectedData: Hex;\n  if (action.kind === 'algebra-create') {\n    if (\n      identity.poolAddress !== null ||\n      expected.sqrtPriceX96 !== null ||\n      preflight.status !== 'absent' ||\n      preflight.poolAddress !== null ||\n      preflight.sqrtPriceX96 !== 0n\n    )\n      return invalid('Algebra create cannot bind an existing pool or price.');\n    const pluginData = hex(expected.pluginData, 'Algebra plugin data');\n    expectedTo = getAddress(deployment.factory);\n    expectedData =\n      deployment.createPool === 'pair-with-plugin-data'\n        ? encodeFunctionData({\n            abi: algebraIntegralPluginDataFactoryAbi,\n            functionName: 'createPool',\n            args: [poolKey.token0, poolKey.token1, pluginData],\n          })\n        : encodeFunctionData({\n            abi:\n              deployment.variant === 'integral-v1'\n                ? algebraIntegralPairFactoryAbi\n                : algebraPairFactoryAbi,\n            functionName: 'createPool',\n            args: [poolKey.token0, poolKey.token1],\n          });\n  } else {\n    const pool = address(identity.poolAddress, 'Algebra pool address') as Address;\n    if (\n      expected.pluginData !== null ||\n      typeof expected.sqrtPriceX96 !== 'bigint' ||\n      preflight.status !== 'uninitialized' ||\n      address(preflight.poolAddress, 'Algebra preflight pool') !== pool ||\n      preflight.sqrtPriceX96 !== 0n\n    )\n      return invalid('Algebra initialize expectation is invalid.');\n    try {\n      validateSqrtPriceX96(expected.sqrtPriceX96);\n    } catch (error) {\n      return invalid(error instanceof Error ? error.message : 'Invalid Algebra price.');\n    }\n    expectedTo = pool;\n    expectedData = encodeFunctionData({\n      abi: algebraPoolBaseAbi,\n      functionName: 'initialize',\n      args: [expected.sqrtPriceX96],\n    });\n  }\n  if (to !== expectedTo || data.toLowerCase() !== expectedData.toLowerCase())\n    return invalid('Algebra transaction does not match its trusted deployment and expectation.');\n  return deployment;\n}\n\nexport function deserializePreparedAlgebraPoolAction(\n  serialized: string\n): PreparedAlgebraPoolAction {\n  const action = deserializePreparedPoolAction(serialized);\n  validatePreparedAlgebraPoolAction(action);\n  return action as PreparedAlgebraPoolAction;\n}\n","import { decodeFunctionResult, getAddress, isAddress, type Address, type PublicClient } from 'viem';\nimport {\n  algebraIntegralPairFactoryAbi,\n  algebraIntegralPluginDataFactoryAbi,\n  algebraPairFactoryAbi,\n} from '../abis/algebra.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectAlgebraPool } from './inspect.js';\nimport {\n  validatePreparedAlgebraPoolAction,\n  type AlgebraPoolActionSimulation,\n  type PreparedAlgebraPoolAction,\n} from './types.js';\n\nexport interface SimulateAlgebraPoolActionParams {\n  readonly publicClient: PublicClient;\n  readonly account: Address;\n  readonly action: PreparedAlgebraPoolAction;\n  readonly blockNumber?: bigint;\n}\n\nexport async function simulateAlgebraPoolAction(\n  params: SimulateAlgebraPoolActionParams\n): Promise<AlgebraPoolActionSimulation> {\n  if (\n    !isAddress(params.account, { strict: true }) ||\n    getAddress(params.account) === '0x0000000000000000000000000000000000000000'\n  ) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Simulation account must be a valid non-zero address.'\n    );\n  }\n  const deployment = validatePreparedAlgebraPoolAction(params.action);\n  const blockNumber = params.blockNumber ?? (await params.publicClient.getBlockNumber());\n  const snapshot = await inspectAlgebraPool({\n    publicClient: params.publicClient,\n    deployment,\n    key: { tokenA: params.action.identity.key.token0, tokenB: params.action.identity.key.token1 },\n    blockNumber,\n  });\n  if (params.action.kind === 'algebra-create' && snapshot.status !== 'absent') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `Algebra pool already exists at ${snapshot.poolAddress}; refresh the action.`\n    );\n  }\n  if (\n    params.action.kind === 'algebra-initialize' &&\n    (snapshot.status !== 'uninitialized' ||\n      snapshot.poolAddress !== params.action.identity.poolAddress)\n  ) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Algebra pool is no longer the uninitialized factory pool bound to this action.'\n    );\n  }\n  const account = getAddress(params.account);\n  const request = {\n    account,\n    to: params.action.transaction.to,\n    data: params.action.transaction.data,\n    value: params.action.transaction.value,\n    blockNumber,\n  } as const;\n  try {\n    const [call, gasEstimate] = await Promise.all([\n      params.publicClient.call({ ...request, batch: false }),\n      params.publicClient.estimateGas(request),\n    ]);\n    let returnedPoolAddress: Address | null = null;\n    if (params.action.kind === 'algebra-create') {\n      if (!call.data || call.data === '0x')\n        throw new PoolLifecycleError(\n          'SIMULATION_FAILED',\n          'Algebra create returned no pool address.'\n        );\n      const abi =\n        deployment.createPool === 'pair-with-plugin-data'\n          ? algebraIntegralPluginDataFactoryAbi\n          : deployment.variant === 'integral-v1'\n            ? algebraIntegralPairFactoryAbi\n            : algebraPairFactoryAbi;\n      returnedPoolAddress = getAddress(\n        decodeFunctionResult({ abi, functionName: 'createPool', data: call.data })\n      );\n      if (returnedPoolAddress === '0x0000000000000000000000000000000000000000') {\n        throw new PoolLifecycleError(\n          'SIMULATION_FAILED',\n          'Algebra create simulation returned the zero pool address.'\n        );\n      }\n    }\n    return {\n      transaction: params.action.transaction,\n      blockNumber,\n      returnData: call.data ?? null,\n      returnedPoolAddress,\n      gasEstimate,\n    };\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) throw error;\n    throw new PoolLifecycleError(\n      'SIMULATION_FAILED',\n      error instanceof Error ? error.message : 'Algebra simulation failed.',\n      error\n    );\n  }\n}\n","import {\n  decodeEventLog,\n  getAddress,\n  type PublicClient,\n  type Transaction,\n  type TransactionReceipt,\n} from 'viem';\nimport { algebraPairFactoryAbi, algebraPoolBaseAbi } from '../abis/algebra.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectAlgebraPool } from './inspect.js';\nimport {\n  validatePreparedAlgebraPoolAction,\n  type AlgebraPoolActionVerification,\n  type AlgebraPoolIdentity,\n  type AlgebraPoolSnapshot,\n  type AlgebraReceiptEvidence,\n  type PreparedAlgebraPoolAction,\n} from './types.js';\n\nexport interface VerifyAlgebraPoolActionParams {\n  readonly publicClient: PublicClient;\n  readonly action: PreparedAlgebraPoolAction;\n  readonly receipt: TransactionReceipt;\n}\n\nfunction assertReceiptLog(\n  log: TransactionReceipt['logs'][number],\n  receipt: TransactionReceipt\n): void {\n  if (\n    log.transactionHash !== receipt.transactionHash ||\n    log.blockHash !== receipt.blockHash ||\n    log.blockNumber !== receipt.blockNumber ||\n    log.transactionIndex !== receipt.transactionIndex ||\n    log.removed !== false\n  )\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Algebra lifecycle log does not belong to the canonical receipt.'\n    );\n}\n\nexport function decodeAlgebraPoolActionReceipt(\n  action: PreparedAlgebraPoolAction,\n  receipt: TransactionReceipt\n): AlgebraReceiptEvidence {\n  validatePreparedAlgebraPoolAction(action);\n  const created: NonNullable<AlgebraReceiptEvidence['poolCreated']>[] = [];\n  const initialized: NonNullable<AlgebraReceiptEvidence['initialization']>[] = [];\n  for (const log of receipt.logs) {\n    if (getAddress(log.address) === action.identity.factory) {\n      try {\n        const decoded = decodeEventLog({\n          abi: algebraPairFactoryAbi,\n          eventName: 'Pool',\n          data: log.data,\n          topics: log.topics,\n        });\n        if (\n          getAddress(decoded.args.token0) === action.identity.key.token0 &&\n          getAddress(decoded.args.token1) === action.identity.key.token1\n        ) {\n          assertReceiptLog(log, receipt);\n          created.push({ poolAddress: getAddress(decoded.args.pool), logIndex: log.logIndex });\n        }\n      } catch (error) {\n        if (error instanceof PoolLifecycleError) throw error;\n      }\n    }\n    if (\n      action.kind !== 'algebra-initialize' ||\n      action.identity.poolAddress === null ||\n      getAddress(log.address) !== action.identity.poolAddress\n    ) {\n      continue;\n    }\n    try {\n      const decoded = decodeEventLog({\n        abi: algebraPoolBaseAbi,\n        eventName: 'Initialize',\n        data: log.data,\n        topics: log.topics,\n      });\n      assertReceiptLog(log, receipt);\n      initialized.push({\n        poolAddress: getAddress(log.address),\n        sqrtPriceX96: decoded.args.price,\n        tick: Number(decoded.args.tick),\n        logIndex: log.logIndex,\n      });\n    } catch (error) {\n      if (error instanceof PoolLifecycleError) throw error;\n    }\n  }\n  if (created.length > 1 || initialized.length > 1) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Receipt contains duplicate matching Algebra lifecycle events.'\n    );\n  }\n  return {\n    receiptStatus: receipt.status,\n    poolCreated: created[0] ?? null,\n    initialization: initialized[0] ?? null,\n  };\n}\n\nfunction result(\n  action: PreparedAlgebraPoolAction,\n  evidence: AlgebraReceiptEvidence,\n  snapshot: AlgebraPoolSnapshot | null,\n  blockNumber: bigint\n): AlgebraPoolActionVerification {\n  const identity: AlgebraPoolIdentity = {\n    ...action.identity,\n    poolAddress: snapshot?.poolAddress ?? action.identity.poolAddress,\n  };\n  if (evidence.receiptStatus === 'reverted')\n    return {\n      verified: false,\n      outcome: 'reverted',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: [],\n    };\n  if (!snapshot || snapshot.status === 'absent' || !snapshot.poolAddress)\n    return {\n      verified: false,\n      outcome: 'not-initialized',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: [],\n    };\n  if (action.kind === 'algebra-create') {\n    if (!evidence.poolCreated || evidence.poolCreated.poolAddress !== snapshot.poolAddress) {\n      return {\n        verified: false,\n        outcome: 'wrong-deployment',\n        blockNumber,\n        identity,\n        state: snapshot,\n        evidence,\n        warnings: ['Pool event does not match the factory pool at the receipt block.'],\n      };\n    }\n    return {\n      verified: true,\n      outcome: 'created',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings:\n        snapshot.status === 'initialized'\n          ? ['Pool was initialized by another call in the same block.']\n          : [],\n    };\n  }\n  const initialization = evidence.initialization;\n  if (!initialization || initialization.poolAddress !== snapshot.poolAddress) {\n    return {\n      verified: false,\n      outcome: 'not-initialized',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Receipt contains no Initialize event for the expected Algebra pool.'],\n    };\n  }\n  if (initialization.sqrtPriceX96 !== action.expected.sqrtPriceX96) {\n    return {\n      verified: false,\n      outcome: 'already-initialized-different-price',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Initialize event used a different price.'],\n    };\n  }\n  if (snapshot.status !== 'initialized')\n    return {\n      verified: false,\n      outcome: 'not-initialized',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: [],\n    };\n  if (snapshot.sqrtPriceX96 !== action.expected.sqrtPriceX96) {\n    return {\n      verified: true,\n      outcome: 'initialized-then-price-moved',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Pool price moved after initialization in the receipt block.'],\n    };\n  }\n  return {\n    verified: true,\n    outcome: 'initialized-existing',\n    blockNumber,\n    identity,\n    state: snapshot,\n    evidence,\n    warnings: [],\n  };\n}\n\nfunction unavailable(\n  action: PreparedAlgebraPoolAction,\n  receipt: TransactionReceipt,\n  warning: string\n): AlgebraPoolActionVerification {\n  return {\n    verified: false,\n    outcome: 'verification-unavailable',\n    blockNumber: receipt.blockNumber,\n    identity: action.identity,\n    state: null,\n    evidence: { receiptStatus: receipt.status, poolCreated: null, initialization: null },\n    warnings: [warning],\n  };\n}\n\nexport async function verifyAlgebraPoolAction(\n  params: VerifyAlgebraPoolActionParams\n): Promise<AlgebraPoolActionVerification> {\n  const deployment = validatePreparedAlgebraPoolAction(params.action);\n  let chainId: number;\n  let transaction: Transaction;\n  let receipt: TransactionReceipt;\n  try {\n    [chainId, transaction, receipt] = await Promise.all([\n      params.publicClient.getChainId(),\n      params.publicClient.getTransaction({ hash: params.receipt.transactionHash }),\n      params.publicClient.getTransactionReceipt({ hash: params.receipt.transactionHash }),\n    ]);\n  } catch (error) {\n    return unavailable(\n      params.action,\n      params.receipt,\n      error instanceof Error ? error.message : 'Could not load canonical transaction evidence.'\n    );\n  }\n  const expectedTarget = getAddress(params.action.transaction.to);\n  const bound =\n    chainId === params.action.transaction.chainId &&\n    params.receipt.transactionHash === receipt.transactionHash &&\n    params.receipt.blockHash === receipt.blockHash &&\n    params.receipt.blockNumber === receipt.blockNumber &&\n    params.receipt.transactionIndex === receipt.transactionIndex &&\n    params.receipt.status === receipt.status &&\n    receipt.to !== null &&\n    getAddress(receipt.to) === expectedTarget &&\n    transaction.to !== null &&\n    getAddress(transaction.to) === expectedTarget &&\n    transaction.hash === params.receipt.transactionHash &&\n    transaction.hash === receipt.transactionHash &&\n    transaction.input.toLowerCase() === params.action.transaction.data.toLowerCase() &&\n    transaction.value === params.action.transaction.value &&\n    transaction.blockHash === receipt.blockHash &&\n    transaction.blockNumber === receipt.blockNumber &&\n    transaction.transactionIndex === receipt.transactionIndex &&\n    getAddress(transaction.from) === getAddress(receipt.from);\n  if (!bound) {\n    return {\n      ...unavailable(\n        params.action,\n        receipt,\n        'Receipt, transaction, client, or prepared action do not match.'\n      ),\n      outcome: 'wrong-deployment',\n    };\n  }\n  let evidence: AlgebraReceiptEvidence;\n  try {\n    evidence = decodeAlgebraPoolActionReceipt(params.action, receipt);\n  } catch (error) {\n    return {\n      ...unavailable(\n        params.action,\n        receipt,\n        error instanceof Error ? error.message : 'Receipt evidence is invalid.'\n      ),\n      outcome: 'wrong-deployment',\n    };\n  }\n  try {\n    const blockBefore = await params.publicClient.getBlock({\n      blockNumber: receipt.blockNumber,\n      includeTransactions: false,\n    });\n    if (blockBefore.hash !== receipt.blockHash)\n      return unavailable(params.action, receipt, 'Receipt block is no longer canonical.');\n    if (receipt.status === 'reverted')\n      return result(params.action, evidence, null, receipt.blockNumber);\n    const snapshot = await inspectAlgebraPool({\n      publicClient: params.publicClient,\n      deployment,\n      key: { tokenA: params.action.identity.key.token0, tokenB: params.action.identity.key.token1 },\n      blockNumber: receipt.blockNumber,\n    });\n    const blockAfter = await params.publicClient.getBlock({\n      blockNumber: receipt.blockNumber,\n      includeTransactions: false,\n    });\n    if (blockAfter.hash !== receipt.blockHash)\n      return unavailable(params.action, receipt, 'Receipt block changed during verification.');\n    return result(params.action, evidence, snapshot, receipt.blockNumber);\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) {\n      return {\n        ...unavailable(params.action, receipt, error.message),\n        outcome: 'wrong-deployment',\n        evidence,\n      };\n    }\n    return {\n      ...unavailable(\n        params.action,\n        receipt,\n        error instanceof Error ? error.message : 'Pool state verification failed.'\n      ),\n      evidence,\n    };\n  }\n}\n","import { getAddress, type Address } from 'viem';\nimport { PoolLifecycleError } from '../errors.js';\n\nexport interface AerodromeSlipstreamPoolKeyInput {\n  readonly tokenA: Address;\n  readonly tokenB: Address;\n  readonly tickSpacing: number;\n}\n\nexport interface AerodromeSlipstreamPoolKey {\n  readonly token0: Address;\n  readonly token1: Address;\n  readonly tickSpacing: number;\n}\n\nexport function canonicalizeAerodromeSlipstreamPoolKey(\n  key: AerodromeSlipstreamPoolKeyInput\n): AerodromeSlipstreamPoolKey {\n  let tokenA: Address;\n  let tokenB: Address;\n  try {\n    tokenA = getAddress(key.tokenA);\n    tokenB = getAddress(key.tokenB);\n  } catch {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Slipstream pool tokens must be valid addresses.');\n  }\n  if (tokenA === tokenB || tokenA === '0x0000000000000000000000000000000000000000' || tokenB === '0x0000000000000000000000000000000000000000') {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Slipstream pool tokens must be distinct non-zero addresses.');\n  }\n  if (!Number.isSafeInteger(key.tickSpacing) || key.tickSpacing <= 0 || key.tickSpacing >= 16_384) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Slipstream tick spacing must be an int24 between 1 and 16383.');\n  }\n  return BigInt(tokenA) < BigInt(tokenB)\n    ? { token0: tokenA, token1: tokenB, tickSpacing: key.tickSpacing }\n    : { token0: tokenB, token1: tokenA, tickSpacing: key.tickSpacing };\n}\n\nexport function assertAerodromeSlipstreamInitialPrice(value: bigint): bigint {\n  if (typeof value !== 'bigint' || value <= 0n || value >= 1n << 160n) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Slipstream sqrtPriceX96 must be a non-zero uint160.');\n  }\n  return value;\n}\n","import { encodeFunctionData, getAddress, isAddress, type Address, type Hex } from 'viem';\nimport { aerodromeSlipstreamFactoryAbi } from '../abis/aerodrome-slipstream.js';\nimport {\n  resolveAerodromeSlipstreamLifecycleDeployment,\n  type AerodromeSlipstreamLifecycleDeployment,\n} from '../capabilities/aerodrome-slipstream.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport type { PoolActionSimulation, PoolActionVerification, PreparedPoolAction } from '../types.js';\nimport { deserializePreparedPoolAction } from '../types.js';\nimport { assertAerodromeSlipstreamInitialPrice, canonicalizeAerodromeSlipstreamPoolKey, type AerodromeSlipstreamPoolKey } from './key.js';\n\nexport interface AerodromeSlipstreamPoolSnapshot {\n  readonly schemaVersion: 1;\n  readonly blockNumber: bigint;\n  readonly deployment: AerodromeSlipstreamLifecycleDeployment;\n  readonly key: AerodromeSlipstreamPoolKey;\n  readonly enabledFee: number;\n  readonly status: 'absent' | 'initialized';\n  readonly poolAddress: Address | null;\n  readonly sqrtPriceX96: bigint;\n  readonly tick: number | null;\n}\n\nexport interface AerodromeSlipstreamPoolIdentity {\n  readonly family: 'aerodrome-slipstream';\n  readonly adapter: 'aerodrome-slipstream-factory-v1';\n  readonly version: 1;\n  readonly chainId: number;\n  readonly factory: Address;\n  readonly key: AerodromeSlipstreamPoolKey;\n  readonly poolAddress: null;\n}\n\nexport type VerifiedAerodromeSlipstreamPoolIdentity = Omit<\n  AerodromeSlipstreamPoolIdentity,\n  'poolAddress'\n> & { readonly poolAddress: Address | null };\n\nexport type PreparedAerodromeSlipstreamCreateAndInitializeAction = PreparedPoolAction<\n  'aerodrome-slipstream-create-and-initialize',\n  AerodromeSlipstreamPoolIdentity,\n  { readonly sqrtPriceX96: bigint },\n  { readonly blockNumber: bigint; readonly status: 'absent'; readonly poolAddress: null }\n>;\n\nexport type AerodromeSlipstreamPoolActionSimulation = PoolActionSimulation & {\n  readonly returnedPoolAddress: Address;\n};\n\nexport interface AerodromeSlipstreamReceiptEvidence {\n  readonly receiptStatus: 'success' | 'reverted';\n  readonly poolCreated: Readonly<{ poolAddress: Address; logIndex: number }> | null;\n  readonly initialization: Readonly<{ poolAddress: Address; sqrtPriceX96: bigint; tick: number; logIndex: number }> | null;\n}\n\nexport type AerodromeSlipstreamPoolActionVerification = PoolActionVerification<\n  VerifiedAerodromeSlipstreamPoolIdentity,\n  AerodromeSlipstreamPoolSnapshot,\n  AerodromeSlipstreamReceiptEvidence\n>;\n\nfunction invalid(message: string): never {\n  throw new PoolLifecycleError('INVALID_INPUT', message);\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n  if (!value || typeof value !== 'object' || Array.isArray(value)) return invalid(`${label} must be an object.`);\n  return value as Record<string, unknown>;\n}\n\nfunction nonZeroAddress(value: unknown, label: string): Address {\n  if (typeof value !== 'string' || !isAddress(value, { strict: true })) return invalid(`${label} must be a valid address.`);\n  const address = getAddress(value);\n  if (address === '0x0000000000000000000000000000000000000000') return invalid(`${label} must not be zero.`);\n  return address;\n}\n\nfunction hex(value: unknown, label: string): Hex {\n  if (typeof value !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) return invalid(`${label} must be hex bytes.`);\n  return value as Hex;\n}\n\n/** Re-derive all trusted calldata after a plan crosses a JSON boundary. */\nexport function validatePreparedAerodromeSlipstreamPoolAction(\n  value: unknown\n): AerodromeSlipstreamLifecycleDeployment {\n  const action = record(value, 'Prepared Slipstream action');\n  if (action.schemaVersion !== 1 || action.kind !== 'aerodrome-slipstream-create-and-initialize' || typeof action.protocol !== 'string') {\n    return invalid('Slipstream action kind, protocol, or schema version is unsupported.');\n  }\n  const transaction = record(action.transaction, 'Slipstream transaction');\n  if (!Number.isSafeInteger(transaction.chainId) || Number(transaction.chainId) <= 0 || transaction.value !== 0n) {\n    return invalid('Slipstream transaction chainId or value is invalid.');\n  }\n  const deployment = resolveAerodromeSlipstreamLifecycleDeployment({\n    chainId: Number(transaction.chainId),\n    protocol: action.protocol as PreparedAerodromeSlipstreamCreateAndInitializeAction['protocol'],\n  });\n  if (!deployment) throw new PoolLifecycleError('UNSUPPORTED_DEPLOYMENT', 'No Slipstream lifecycle deployment is configured for this action.');\n  const identity = record(action.identity, 'Slipstream identity');\n  const key = canonicalizeAerodromeSlipstreamPoolKey({\n    tokenA: nonZeroAddress(record(identity.key, 'Slipstream key').token0, 'Slipstream token0'),\n    tokenB: nonZeroAddress(record(identity.key, 'Slipstream key').token1, 'Slipstream token1'),\n    tickSpacing: Number(record(identity.key, 'Slipstream key').tickSpacing),\n  });\n  if (identity.family !== deployment.family || identity.adapter !== deployment.adapter || identity.version !== deployment.version || identity.chainId !== deployment.chainId || nonZeroAddress(identity.factory, 'Slipstream factory') !== deployment.factory || identity.poolAddress !== null) {\n    return invalid('Slipstream identity does not match the configured deployment.');\n  }\n  const expected = record(action.expected, 'Slipstream expectation');\n  const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(expected.sqrtPriceX96 as bigint);\n  const preflight = record(action.preflight, 'Slipstream preflight');\n  if (typeof preflight.blockNumber !== 'bigint' || preflight.blockNumber < 0n || preflight.status !== 'absent' || preflight.poolAddress !== null) {\n    return invalid('Slipstream action must be bound to an absent pool preflight.');\n  }\n  const expectedData = encodeFunctionData({\n    abi: aerodromeSlipstreamFactoryAbi,\n    functionName: 'createPool',\n    args: [key.token0, key.token1, key.tickSpacing, sqrtPriceX96],\n  });\n  if (nonZeroAddress(transaction.to, 'Slipstream transaction target') !== deployment.factory || hex(transaction.data, 'Slipstream transaction calldata').toLowerCase() !== expectedData.toLowerCase()) {\n    return invalid('Slipstream transaction does not match its trusted deployment and expectation.');\n  }\n  return deployment;\n}\n\nexport function deserializePreparedAerodromeSlipstreamPoolAction(\n  serialized: string\n): PreparedAerodromeSlipstreamCreateAndInitializeAction {\n  const action = deserializePreparedPoolAction(serialized);\n  validatePreparedAerodromeSlipstreamPoolAction(action);\n  return action as PreparedAerodromeSlipstreamCreateAndInitializeAction;\n}\n","import { getAddress, keccak256, type Address, type Hex, type PublicClient } from 'viem';\nimport { aerodromeSlipstreamFactoryAbi, aerodromeSlipstreamPoolAbi } from '../abis/aerodrome-slipstream.js';\nimport { validateAerodromeSlipstreamLifecycleDeployment, type AerodromeSlipstreamLifecycleDeployment } from '../capabilities/aerodrome-slipstream.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { canonicalizeAerodromeSlipstreamPoolKey, type AerodromeSlipstreamPoolKeyInput } from './key.js';\nimport type { AerodromeSlipstreamPoolSnapshot } from './types.js';\n\nconst ZERO = getAddress('0x0000000000000000000000000000000000000000');\n\nasync function requireRuntimeHash(client: PublicClient, address: Address, expected: Hex, label: string, blockNumber: bigint): Promise<void> {\n  const code = await client.getCode({ address, blockNumber });\n  if (!code || code === '0x') throw new PoolLifecycleError('CONTRACT_NOT_DEPLOYED', `${label} ${address} has no bytecode at block ${blockNumber}.`);\n  if (keccak256(code) !== expected) throw new PoolLifecycleError('DEPLOYMENT_MISMATCH', `${label} ${address} runtime hash does not match the configured deployment.`);\n}\n\nasync function requireCode(client: PublicClient, address: Address, label: string, blockNumber: bigint): Promise<void> {\n  const code = await client.getCode({ address, blockNumber });\n  if (!code || code === '0x') throw new PoolLifecycleError('CONTRACT_NOT_DEPLOYED', `${label} ${address} has no bytecode at block ${blockNumber}.`);\n}\n\nexport async function inspectAerodromeSlipstreamPool(params: {\n  readonly publicClient: PublicClient;\n  readonly deployment: AerodromeSlipstreamLifecycleDeployment;\n  readonly key: AerodromeSlipstreamPoolKeyInput;\n  readonly blockNumber?: bigint;\n}): Promise<AerodromeSlipstreamPoolSnapshot> {\n  const deployment = validateAerodromeSlipstreamLifecycleDeployment(params.deployment);\n  const key = canonicalizeAerodromeSlipstreamPoolKey(params.key);\n  if ((await params.publicClient.getChainId()) !== deployment.chainId) {\n    throw new PoolLifecycleError('CHAIN_MISMATCH', `Public client chain does not match Slipstream deployment chain ${deployment.chainId}.`);\n  }\n  const blockNumber = params.blockNumber ?? (await params.publicClient.getBlockNumber());\n  await Promise.all([\n    requireRuntimeHash(params.publicClient, deployment.factory, deployment.factoryRuntimeCodeHash, 'Slipstream factory', blockNumber),\n    requireRuntimeHash(params.publicClient, deployment.poolImplementation, deployment.poolImplementationRuntimeCodeHash, 'Slipstream pool implementation', blockNumber),\n    requireCode(params.publicClient, key.token0, 'token0', blockNumber),\n    requireCode(params.publicClient, key.token1, 'token1', blockNumber),\n  ]);\n  const [implementation, factoryRegistry, voter, enabledFee, pool, legacyCLFactory] = await Promise.all([\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'poolImplementation', blockNumber }),\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'factoryRegistry', blockNumber }),\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'voter', blockNumber }),\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'tickSpacingToFee', args: [key.tickSpacing], blockNumber }),\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'getPool', args: [key.token0, key.token1, key.tickSpacing], blockNumber }),\n    deployment.legacyCLFactory === null\n      ? Promise.resolve(null)\n      : params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'legacyCLFactory', blockNumber }),\n  ]);\n  if (getAddress(implementation) !== deployment.poolImplementation || getAddress(factoryRegistry) !== deployment.factoryRegistry || getAddress(voter) !== deployment.voter || (deployment.legacyCLFactory !== null && getAddress(legacyCLFactory as Address) !== deployment.legacyCLFactory)) {\n    throw new PoolLifecycleError('DEPLOYMENT_MISMATCH', 'Slipstream factory immutable deployment references do not match configuration.');\n  }\n  const fee = Number(enabledFee);\n  if (!Number.isSafeInteger(fee) || fee <= 0) throw new PoolLifecycleError('INVALID_INPUT', `Slipstream tick spacing ${key.tickSpacing} is not enabled.`);\n  const poolAddress = getAddress(pool);\n  if (poolAddress === ZERO) return { schemaVersion: 1, blockNumber, deployment, key, enabledFee: fee, status: 'absent', poolAddress: null, sqrtPriceX96: 0n, tick: null };\n  const [isPool, actualFactory, token0, token1, tickSpacing, slot0] = await Promise.all([\n    params.publicClient.readContract({ address: deployment.factory, abi: aerodromeSlipstreamFactoryAbi, functionName: 'isPool', args: [poolAddress], blockNumber }),\n    params.publicClient.readContract({ address: poolAddress, abi: aerodromeSlipstreamPoolAbi, functionName: 'factory', blockNumber }),\n    params.publicClient.readContract({ address: poolAddress, abi: aerodromeSlipstreamPoolAbi, functionName: 'token0', blockNumber }),\n    params.publicClient.readContract({ address: poolAddress, abi: aerodromeSlipstreamPoolAbi, functionName: 'token1', blockNumber }),\n    params.publicClient.readContract({ address: poolAddress, abi: aerodromeSlipstreamPoolAbi, functionName: 'tickSpacing', blockNumber }),\n    params.publicClient.readContract({ address: poolAddress, abi: aerodromeSlipstreamPoolAbi, functionName: 'slot0', blockNumber }),\n  ]);\n  await requireRuntimeHash(params.publicClient, poolAddress, deployment.poolProxyRuntimeCodeHash, 'Slipstream pool proxy', blockNumber);\n  if (!isPool || getAddress(actualFactory) !== deployment.factory || getAddress(token0) !== key.token0 || getAddress(token1) !== key.token1 || Number(tickSpacing) !== key.tickSpacing || slot0[0] === 0n) {\n    throw new PoolLifecycleError('DEPLOYMENT_MISMATCH', `Slipstream pool ${poolAddress} does not match the configured factory, key, or initialized state.`);\n  }\n  return { schemaVersion: 1, blockNumber, deployment, key, enabledFee: fee, status: 'initialized', poolAddress, sqrtPriceX96: slot0[0], tick: Number(slot0[1]) };\n}\n","import { encodeFunctionData, getAddress, type PublicClient } from 'viem';\nimport { aerodromeSlipstreamFactoryAbi } from '../abis/aerodrome-slipstream.js';\nimport {\n  assertLatestAerodromeSlipstreamLifecycleDeployment,\n  resolveLatestAerodromeSlipstreamLifecycleDeployment,\n  type AerodromeSlipstreamLifecycleDeployment,\n} from '../capabilities/aerodrome-slipstream.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { assertAerodromeSlipstreamInitialPrice, canonicalizeAerodromeSlipstreamPoolKey, type AerodromeSlipstreamPoolKeyInput } from './key.js';\nimport { inspectAerodromeSlipstreamPool } from './inspect.js';\nimport type { AerodromeSlipstreamPoolSnapshot, PreparedAerodromeSlipstreamCreateAndInitializeAction } from './types.js';\n\nfunction assertAbsentPreflight(deployment: AerodromeSlipstreamLifecycleDeployment, key: ReturnType<typeof canonicalizeAerodromeSlipstreamPoolKey>, preflight: AerodromeSlipstreamPoolSnapshot): void {\n  if (preflight.schemaVersion !== 1 || preflight.deployment !== deployment || preflight.key.token0 !== key.token0 || preflight.key.token1 !== key.token1 || preflight.key.tickSpacing !== key.tickSpacing || preflight.status !== 'absent' || preflight.poolAddress !== null || preflight.sqrtPriceX96 !== 0n || preflight.tick !== null) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Slipstream preflight does not prove this pool key is absent.');\n  }\n}\n\nexport function buildAerodromeSlipstreamCreateAndInitializeTransaction(params: {\n  readonly deployment: AerodromeSlipstreamLifecycleDeployment;\n  readonly key: AerodromeSlipstreamPoolKeyInput;\n  readonly initialPrice: bigint;\n  readonly preflight: AerodromeSlipstreamPoolSnapshot;\n}): PreparedAerodromeSlipstreamCreateAndInitializeAction {\n  const deployment = assertLatestAerodromeSlipstreamLifecycleDeployment(params.deployment);\n  const key = canonicalizeAerodromeSlipstreamPoolKey(params.key);\n  const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(params.initialPrice);\n  assertAbsentPreflight(deployment, key, params.preflight);\n  return {\n    schemaVersion: 1,\n    kind: 'aerodrome-slipstream-create-and-initialize',\n    protocol: deployment.protocol,\n    transaction: { chainId: deployment.chainId, to: deployment.factory, data: encodeFunctionData({ abi: aerodromeSlipstreamFactoryAbi, functionName: 'createPool', args: [key.token0, key.token1, key.tickSpacing, sqrtPriceX96] }), value: 0n },\n    identity: { family: deployment.family, adapter: deployment.adapter, version: deployment.version, chainId: deployment.chainId, factory: getAddress(deployment.factory), key, poolAddress: null },\n    expected: { sqrtPriceX96 },\n    preflight: { blockNumber: params.preflight.blockNumber, status: 'absent', poolAddress: null },\n  };\n}\n\nexport async function prepareAerodromeSlipstreamPool(params: {\n  readonly publicClient: PublicClient;\n  readonly deployment: AerodromeSlipstreamLifecycleDeployment;\n  readonly key: AerodromeSlipstreamPoolKeyInput;\n  readonly initialPrice: bigint;\n  readonly blockNumber?: bigint;\n}): Promise<{ readonly status: 'ready'; readonly snapshot: AerodromeSlipstreamPoolSnapshot; readonly action: PreparedAerodromeSlipstreamCreateAndInitializeAction } | { readonly status: 'already-initialized-matching'; readonly snapshot: AerodromeSlipstreamPoolSnapshot; readonly action: null }> {\n  const deployment = assertLatestAerodromeSlipstreamLifecycleDeployment(params.deployment);\n  const snapshot = await inspectAerodromeSlipstreamPool({ ...params, deployment });\n  const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(params.initialPrice);\n  if (snapshot.status === 'absent') return { status: 'ready', snapshot, action: buildAerodromeSlipstreamCreateAndInitializeTransaction({ deployment: snapshot.deployment, key: params.key, initialPrice: sqrtPriceX96, preflight: snapshot }) };\n  if (snapshot.sqrtPriceX96 !== sqrtPriceX96) throw new PoolLifecycleError('POOL_STATE_MISMATCH', `Slipstream pool ${snapshot.poolAddress} is already initialized at a different price.`);\n  return { status: 'already-initialized-matching', snapshot, action: null };\n}\n\n/** Prepare a new pool only through the newest verified factory in this family. */\nexport async function prepareLatestAerodromeSlipstreamPool(params: {\n  readonly publicClient: PublicClient;\n  readonly chainId: number;\n  readonly key: AerodromeSlipstreamPoolKeyInput;\n  readonly initialPrice: bigint;\n  readonly blockNumber?: bigint;\n}): ReturnType<typeof prepareAerodromeSlipstreamPool> {\n  const deployment = resolveLatestAerodromeSlipstreamLifecycleDeployment(params.chainId);\n  if (!deployment) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `No latest Aerodrome Slipstream lifecycle deployment is configured for chain ${params.chainId}.`\n    );\n  }\n  return prepareAerodromeSlipstreamPool({ ...params, deployment });\n}\n","import { decodeFunctionResult, getAddress, isAddress, type Address, type PublicClient } from 'viem';\nimport { aerodromeSlipstreamFactoryAbi } from '../abis/aerodrome-slipstream.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectAerodromeSlipstreamPool } from './inspect.js';\nimport { validatePreparedAerodromeSlipstreamPoolAction, type AerodromeSlipstreamPoolActionSimulation, type PreparedAerodromeSlipstreamCreateAndInitializeAction } from './types.js';\n\nconst ZERO = getAddress('0x0000000000000000000000000000000000000000');\n\nexport async function simulateAerodromeSlipstreamPoolAction(params: {\n  readonly publicClient: PublicClient;\n  readonly account: Address;\n  readonly action: PreparedAerodromeSlipstreamCreateAndInitializeAction;\n  readonly blockNumber?: bigint;\n}): Promise<AerodromeSlipstreamPoolActionSimulation> {\n  if (!isAddress(params.account, { strict: true }) || getAddress(params.account) === ZERO) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'Simulation account must be a non-zero EVM address.');\n  }\n  const deployment = validatePreparedAerodromeSlipstreamPoolAction(params.action);\n  const blockNumber = params.blockNumber ?? (await params.publicClient.getBlockNumber());\n  const snapshot = await inspectAerodromeSlipstreamPool({ publicClient: params.publicClient, deployment, key: { tokenA: params.action.identity.key.token0, tokenB: params.action.identity.key.token1, tickSpacing: params.action.identity.key.tickSpacing }, blockNumber });\n  if (snapshot.status !== 'absent') throw new PoolLifecycleError('POOL_STATE_MISMATCH', `Slipstream pool already exists at ${snapshot.poolAddress}; refresh the action.`);\n  try {\n    const request = { account: getAddress(params.account), to: params.action.transaction.to, data: params.action.transaction.data, value: 0n, blockNumber } as const;\n    const [call, gasEstimate] = await Promise.all([params.publicClient.call({ ...request, batch: false }), params.publicClient.estimateGas(request)]);\n    if (!call.data || call.data === '0x') throw new PoolLifecycleError('SIMULATION_FAILED', 'Slipstream create simulation returned no pool address.');\n    return { transaction: params.action.transaction, blockNumber, returnData: call.data, returnedPoolAddress: getAddress(decodeFunctionResult({ abi: aerodromeSlipstreamFactoryAbi, functionName: 'createPool', data: call.data })), gasEstimate };\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) throw error;\n    throw new PoolLifecycleError('SIMULATION_FAILED', error instanceof Error ? error.message : 'Slipstream action simulation failed.', error);\n  }\n}\n","import { decodeEventLog, getAddress, type PublicClient, type TransactionReceipt } from 'viem';\nimport { aerodromeSlipstreamFactoryAbi, aerodromeSlipstreamPoolAbi } from '../abis/aerodrome-slipstream.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectAerodromeSlipstreamPool } from './inspect.js';\nimport { validatePreparedAerodromeSlipstreamPoolAction, type AerodromeSlipstreamPoolActionVerification, type AerodromeSlipstreamReceiptEvidence, type PreparedAerodromeSlipstreamCreateAndInitializeAction } from './types.js';\n\nfunction assertCanonicalLog(log: TransactionReceipt['logs'][number], receipt: TransactionReceipt): void {\n  if (log.transactionHash !== receipt.transactionHash || log.blockHash !== receipt.blockHash || log.blockNumber !== receipt.blockNumber || log.transactionIndex !== receipt.transactionIndex || log.removed !== false) {\n    throw new PoolLifecycleError('POOL_STATE_MISMATCH', 'Slipstream lifecycle log does not belong to the canonical receipt.');\n  }\n}\n\nexport function decodeAerodromeSlipstreamPoolActionReceipt(action: PreparedAerodromeSlipstreamCreateAndInitializeAction, receipt: TransactionReceipt): AerodromeSlipstreamReceiptEvidence {\n  validatePreparedAerodromeSlipstreamPoolAction(action);\n  const created: NonNullable<AerodromeSlipstreamReceiptEvidence['poolCreated']>[] = [];\n  const initialized: NonNullable<AerodromeSlipstreamReceiptEvidence['initialization']>[] = [];\n  for (const log of receipt.logs) {\n    if (getAddress(log.address) === action.identity.factory) {\n      try {\n        const event = decodeEventLog({ abi: aerodromeSlipstreamFactoryAbi, eventName: 'PoolCreated', data: log.data, topics: log.topics });\n        if (getAddress(event.args.token0) === action.identity.key.token0 && getAddress(event.args.token1) === action.identity.key.token1 && Number(event.args.tickSpacing) === action.identity.key.tickSpacing) {\n          assertCanonicalLog(log, receipt);\n          created.push({ poolAddress: getAddress(event.args.pool), logIndex: log.logIndex });\n        }\n      } catch (error) { if (error instanceof PoolLifecycleError) throw error; }\n    }\n    try {\n      const event = decodeEventLog({ abi: aerodromeSlipstreamPoolAbi, eventName: 'Initialize', data: log.data, topics: log.topics });\n      assertCanonicalLog(log, receipt);\n      initialized.push({ poolAddress: getAddress(log.address), sqrtPriceX96: event.args.sqrtPriceX96, tick: Number(event.args.tick), logIndex: log.logIndex });\n    } catch (error) { if (error instanceof PoolLifecycleError) throw error; }\n  }\n  if (created.length > 1 || initialized.length > 1) throw new PoolLifecycleError('POOL_STATE_MISMATCH', 'Receipt contains duplicate matching Slipstream lifecycle events.');\n  return { receiptStatus: receipt.status, poolCreated: created[0] ?? null, initialization: initialized[0] ?? null };\n}\n\nexport async function verifyAerodromeSlipstreamPoolAction(params: {\n  readonly publicClient: PublicClient;\n  readonly action: PreparedAerodromeSlipstreamCreateAndInitializeAction;\n  readonly receipt: TransactionReceipt;\n}): Promise<AerodromeSlipstreamPoolActionVerification> {\n  const deployment = validatePreparedAerodromeSlipstreamPoolAction(params.action);\n  let receipt: TransactionReceipt;\n  try {\n    const [chainId, transaction, canonical] = await Promise.all([\n      params.publicClient.getChainId(),\n      params.publicClient.getTransaction({ hash: params.receipt.transactionHash }),\n      params.publicClient.getTransactionReceipt({ hash: params.receipt.transactionHash }),\n    ]);\n    if (chainId !== deployment.chainId || canonical.transactionHash !== params.receipt.transactionHash || canonical.blockHash !== params.receipt.blockHash || transaction.to === null || transaction.value !== 0n || getAddress(transaction.to) !== params.action.transaction.to || transaction.input.toLowerCase() !== params.action.transaction.data.toLowerCase()) {\n      return { verified: false, outcome: 'wrong-deployment', blockNumber: params.receipt.blockNumber, identity: params.action.identity, state: null, evidence: { receiptStatus: params.receipt.status, poolCreated: null, initialization: null }, warnings: ['Canonical transaction does not match the prepared Slipstream action.'] };\n    }\n    receipt = canonical;\n  } catch (error) {\n    return { verified: false, outcome: 'verification-unavailable', blockNumber: params.receipt.blockNumber, identity: params.action.identity, state: null, evidence: { receiptStatus: params.receipt.status, poolCreated: null, initialization: null }, warnings: [error instanceof Error ? error.message : 'Could not load canonical transaction evidence.'] };\n  }\n  let evidence: AerodromeSlipstreamReceiptEvidence;\n  try { evidence = decodeAerodromeSlipstreamPoolActionReceipt(params.action, receipt); } catch (error) {\n    return { verified: false, outcome: 'wrong-deployment', blockNumber: receipt.blockNumber, identity: params.action.identity, state: null, evidence: { receiptStatus: receipt.status, poolCreated: null, initialization: null }, warnings: [error instanceof Error ? error.message : 'Invalid receipt evidence.'] };\n  }\n  if (receipt.status === 'reverted') return { verified: false, outcome: 'reverted', blockNumber: receipt.blockNumber, identity: params.action.identity, state: null, evidence, warnings: [] };\n  try {\n    const snapshot = await inspectAerodromeSlipstreamPool({ publicClient: params.publicClient, deployment, key: { tokenA: params.action.identity.key.token0, tokenB: params.action.identity.key.token1, tickSpacing: params.action.identity.key.tickSpacing }, blockNumber: receipt.blockNumber });\n    const identity = { ...params.action.identity, poolAddress: snapshot.poolAddress };\n    if (!evidence.poolCreated || !evidence.initialization || snapshot.status !== 'initialized' || evidence.poolCreated.poolAddress !== snapshot.poolAddress || evidence.initialization.poolAddress !== snapshot.poolAddress || evidence.initialization.sqrtPriceX96 !== params.action.expected.sqrtPriceX96) {\n      return { verified: false, outcome: 'wrong-deployment', blockNumber: receipt.blockNumber, identity, state: snapshot, evidence, warnings: ['Receipt evidence does not prove the expected atomic Slipstream lifecycle.'] };\n    }\n    return snapshot.sqrtPriceX96 === params.action.expected.sqrtPriceX96\n      ? { verified: true, outcome: 'created-and-initialized', blockNumber: receipt.blockNumber, identity, state: snapshot, evidence, warnings: [] }\n      : { verified: true, outcome: 'initialized-then-price-moved', blockNumber: receipt.blockNumber, identity, state: snapshot, evidence, warnings: ['Pool price moved after initialization in the receipt block.'] };\n  } catch (error) {\n    return { verified: false, outcome: 'wrong-deployment', blockNumber: receipt.blockNumber, identity: params.action.identity, state: null, evidence, warnings: [error instanceof Error ? error.message : 'Slipstream state verification failed.'] };\n  }\n}\n","import { encodeFunctionData, getAddress, isAddress, type Address } from 'viem';\nimport { v3FactoryAbi, v3PoolAbi, v3PoolInitializerAbi } from '../abis/v3.js';\nimport { resolveV3LifecycleDeployment, type V3LifecycleDeployment } from '../capabilities/v3.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport {\n  deserializePreparedPoolAction,\n  type PreparedPoolAction,\n  type PoolActionSimulation,\n  type PoolActionVerification,\n} from '../types.js';\n\nexport interface V3PoolKeyInput {\n  readonly tokenA: Address;\n  readonly tokenB: Address;\n  readonly fee: number;\n}\n\nexport interface V3PoolKey {\n  readonly token0: Address;\n  readonly token1: Address;\n  readonly fee: number;\n}\n\n/** A Q64.96 price bound to the canonical V3 token order. */\nexport interface V3InitialPrice {\n  readonly token0: Address;\n  readonly token1: Address;\n  readonly sqrtPriceX96: bigint;\n}\n\nexport type V3PoolStatus = 'absent' | 'uninitialized' | 'initialized';\n\ninterface V3PoolSnapshotBase {\n  readonly schemaVersion: 1;\n  readonly blockNumber: bigint;\n  readonly deployment: V3LifecycleDeployment;\n  readonly key: V3PoolKey;\n  readonly feeTickSpacing: number;\n  readonly tickSpacing: number;\n}\n\nexport interface V3AbsentPoolSnapshot extends V3PoolSnapshotBase {\n  readonly status: 'absent';\n  readonly poolAddress: null;\n  readonly sqrtPriceX96: 0n;\n  readonly tick: null;\n}\n\ninterface V3ExistingPoolSnapshotBase extends V3PoolSnapshotBase {\n  readonly poolAddress: Address;\n  readonly tick: number;\n}\n\nexport interface V3UninitializedPoolSnapshot extends V3ExistingPoolSnapshotBase {\n  readonly status: 'uninitialized';\n  readonly sqrtPriceX96: 0n;\n}\n\nexport interface V3InitializedPoolSnapshot extends V3ExistingPoolSnapshotBase {\n  readonly status: 'initialized';\n  readonly sqrtPriceX96: bigint;\n}\n\nexport type V3ExistingPoolSnapshot = V3UninitializedPoolSnapshot | V3InitializedPoolSnapshot;\n\n/** Pool lifecycle status and its address/price invariants are discriminated. */\nexport type V3PoolSnapshot =\n  | V3AbsentPoolSnapshot\n  | V3UninitializedPoolSnapshot\n  | V3InitializedPoolSnapshot;\n\nexport type V3PoolActionKind = 'v3-create' | 'v3-initialize' | 'v3-create-and-initialize';\n\ninterface V3PoolIdentityBase {\n  readonly family: 'uniswap-v3-compatible';\n  readonly adapter: V3LifecycleDeployment['adapter'];\n  readonly version: 1;\n  readonly chainId: number;\n  readonly factory: Address;\n  readonly initializer: Address | null;\n  readonly key: V3PoolKey;\n}\n\nexport interface V3CreatePoolIdentity extends V3PoolIdentityBase {\n  readonly poolAddress: null;\n}\n\nexport interface V3ExistingPoolIdentity extends V3PoolIdentityBase {\n  readonly poolAddress: Address;\n}\n\nexport interface V3PoolIdentity extends V3PoolIdentityBase {\n  readonly poolAddress: Address | null;\n}\n\nexport interface V3CreateExpectation {\n  readonly sqrtPriceX96: null;\n}\n\nexport interface V3InitializeExpectation {\n  readonly sqrtPriceX96: bigint;\n}\n\nexport type V3PreflightSummary =\n  | {\n      readonly blockNumber: bigint;\n      readonly status: 'absent';\n      readonly poolAddress: null;\n      readonly sqrtPriceX96: 0n;\n    }\n  | {\n      readonly blockNumber: bigint;\n      readonly status: 'uninitialized';\n      readonly poolAddress: Address;\n      readonly sqrtPriceX96: 0n;\n    }\n  | {\n      readonly blockNumber: bigint;\n      readonly status: 'initialized';\n      readonly poolAddress: Address;\n      readonly sqrtPriceX96: bigint;\n    };\n\nexport type V3AbsentPreflightSummary = Extract<V3PreflightSummary, { status: 'absent' }>;\nexport type V3UninitializedPreflightSummary = Extract<\n  V3PreflightSummary,\n  { status: 'uninitialized' }\n>;\nexport type V3InitializedPreflightSummary = Extract<V3PreflightSummary, { status: 'initialized' }>;\n\nexport type PreparedV3CreatePoolAction = PreparedPoolAction<\n  'v3-create',\n  V3CreatePoolIdentity,\n  V3CreateExpectation,\n  V3AbsentPreflightSummary\n> & { readonly preflight: V3AbsentPreflightSummary };\n\nexport type PreparedV3InitializePoolAction = PreparedPoolAction<\n  'v3-initialize',\n  V3ExistingPoolIdentity,\n  V3InitializeExpectation,\n  V3UninitializedPreflightSummary\n> & { readonly preflight: V3UninitializedPreflightSummary };\n\nexport type PreparedV3CreateAndInitializeAction = PreparedPoolAction<\n  'v3-create-and-initialize',\n  V3PoolIdentity,\n  V3InitializeExpectation,\n  V3AbsentPreflightSummary | V3UninitializedPreflightSummary\n> & {\n  readonly preflight: V3AbsentPreflightSummary | V3UninitializedPreflightSummary;\n};\n\nexport type PreparedV3PoolAction =\n  | PreparedV3CreatePoolAction\n  | PreparedV3InitializePoolAction\n  | PreparedV3CreateAndInitializeAction;\n\nexport interface V3PoolActionSimulation extends PoolActionSimulation {\n  readonly returnedPoolAddress: Address | null;\n}\n\nexport interface V3PoolCreatedEvidence {\n  readonly poolAddress: Address;\n  readonly token0: Address;\n  readonly token1: Address;\n  readonly fee: number;\n  readonly tickSpacing: number;\n  readonly logIndex: number;\n}\n\nexport interface V3PoolInitializedEvidence {\n  readonly poolAddress: Address;\n  readonly sqrtPriceX96: bigint;\n  readonly tick: number;\n  readonly logIndex: number;\n}\n\nexport interface V3ReceiptEvidence {\n  readonly receiptStatus: 'success' | 'reverted';\n  readonly poolCreated: V3PoolCreatedEvidence | null;\n  readonly initializations: readonly V3PoolInitializedEvidence[];\n}\n\nexport type V3PoolActionVerification = PoolActionVerification<\n  V3PoolIdentity,\n  V3PoolSnapshot,\n  V3ReceiptEvidence\n>;\n\nfunction invalidPreparedAction(message: string): never {\n  throw new PoolLifecycleError('INVALID_INPUT', message);\n}\n\nfunction asRecord(value: unknown, label: string): Record<string, unknown> {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n    return invalidPreparedAction(`${label} must be an object.`);\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction asAddress(value: unknown, label: string, allowZero = false): Address {\n  if (typeof value !== 'string' || !isAddress(value, { strict: true })) {\n    return invalidPreparedAction(`${label} must be a valid EVM address.`);\n  }\n  const address = getAddress(value);\n  if (!allowZero && address === '0x0000000000000000000000000000000000000000') {\n    return invalidPreparedAction(`${label} must not be the zero address.`);\n  }\n  return address;\n}\n\nfunction asNullableAddress(value: unknown, label: string): Address | null {\n  return value === null ? null : asAddress(value, label);\n}\n\nfunction asNonNegativeBigInt(value: unknown, label: string): bigint {\n  if (typeof value !== 'bigint' || value < 0n) {\n    return invalidPreparedAction(`${label} must be a non-negative bigint.`);\n  }\n  return value;\n}\n\nfunction asPoolKey(value: unknown): V3PoolKey {\n  const key = asRecord(value, 'V3 action identity key');\n  const token0 = asAddress(key.token0, 'V3 action token0');\n  const token1 = asAddress(key.token1, 'V3 action token1');\n  if (BigInt(token0) >= BigInt(token1)) {\n    return invalidPreparedAction('V3 action tokens must be distinct and canonically ordered.');\n  }\n  if (!Number.isSafeInteger(key.fee) || Number(key.fee) < 0 || Number(key.fee) >= 1_000_000) {\n    return invalidPreparedAction('V3 action fee must be an integer from 0 through 999999.');\n  }\n  return { token0, token1, fee: Number(key.fee) };\n}\n\nfunction asExpectedSqrtPrice(value: unknown): bigint {\n  const sqrtPriceX96 = asNonNegativeBigInt(value, 'V3 action expected sqrtPriceX96');\n  try {\n    return validateSqrtPriceX96(sqrtPriceX96);\n  } catch (error) {\n    return invalidPreparedAction(\n      error instanceof Error ? error.message : 'V3 action expected sqrtPriceX96 is invalid.'\n    );\n  }\n}\n\nfunction validatePreflight(value: unknown): V3PreflightSummary {\n  const preflight = asRecord(value, 'V3 action preflight');\n  const blockNumber = asNonNegativeBigInt(preflight.blockNumber, 'V3 preflight blockNumber');\n  const sqrtPriceX96 = asNonNegativeBigInt(preflight.sqrtPriceX96, 'V3 preflight sqrtPriceX96');\n\n  if (preflight.status === 'absent') {\n    if (preflight.poolAddress !== null || sqrtPriceX96 !== 0n) {\n      return invalidPreparedAction('An absent V3 preflight must have no pool and zero price.');\n    }\n    return { blockNumber, status: 'absent', poolAddress: null, sqrtPriceX96: 0n };\n  }\n\n  const poolAddress = asAddress(preflight.poolAddress, 'V3 preflight poolAddress');\n  if (preflight.status === 'uninitialized') {\n    if (sqrtPriceX96 !== 0n) {\n      return invalidPreparedAction('An uninitialized V3 preflight must have zero price.');\n    }\n    return { blockNumber, status: 'uninitialized', poolAddress, sqrtPriceX96: 0n };\n  }\n  if (preflight.status === 'initialized') {\n    asExpectedSqrtPrice(sqrtPriceX96);\n    return { blockNumber, status: 'initialized', poolAddress, sqrtPriceX96 };\n  }\n  return invalidPreparedAction('V3 action preflight status is unsupported.');\n}\n\n/**\n * Runtime validation for plans crossing JSON, UI/CLI, or signer boundaries.\n * It re-derives the exact target, value, and calldata from trusted capability\n * metadata plus the declared kind, key, and expectation.\n */\nexport function validatePreparedV3PoolAction(value: unknown): V3LifecycleDeployment {\n  const action = asRecord(value, 'Prepared V3 pool action');\n  if (action.schemaVersion !== 1) {\n    return invalidPreparedAction('Prepared V3 pool action schemaVersion is unsupported.');\n  }\n  if (\n    action.kind !== 'v3-create' &&\n    action.kind !== 'v3-initialize' &&\n    action.kind !== 'v3-create-and-initialize'\n  ) {\n    return invalidPreparedAction('Prepared V3 pool action kind is unsupported.');\n  }\n\n  const transaction = asRecord(action.transaction, 'V3 action transaction');\n  if (!Number.isSafeInteger(transaction.chainId) || Number(transaction.chainId) <= 0) {\n    return invalidPreparedAction('V3 action chainId must be a positive safe integer.');\n  }\n  const chainId = Number(transaction.chainId);\n  const to = asAddress(transaction.to, 'V3 action transaction target');\n  if (typeof transaction.data !== 'string' || !/^0x(?:[0-9a-fA-F]{2})+$/.test(transaction.data)) {\n    return invalidPreparedAction('V3 action calldata must be non-empty hex bytes.');\n  }\n  if (transaction.value !== 0n) {\n    return invalidPreparedAction('V3 pool lifecycle transactions must have zero value.');\n  }\n\n  if (typeof action.protocol !== 'string') {\n    return invalidPreparedAction('V3 action protocol must be a string.');\n  }\n  const deployment = resolveV3LifecycleDeployment({\n    chainId,\n    protocol: action.protocol as PreparedV3PoolAction['protocol'],\n  });\n  if (!deployment) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `No pool lifecycle deployment is configured for chain ${chainId} and protocol ${action.protocol}.`\n    );\n  }\n\n  const identity = asRecord(action.identity, 'V3 action identity');\n  const key = asPoolKey(identity.key);\n  if (\n    identity.family !== deployment.family ||\n    identity.adapter !== deployment.adapter ||\n    identity.version !== deployment.version ||\n    identity.chainId !== chainId ||\n    asAddress(identity.factory, 'V3 action factory') !== getAddress(deployment.factory) ||\n    asNullableAddress(identity.initializer, 'V3 action initializer') !==\n      (deployment.initializer === null ? null : getAddress(deployment.initializer))\n  ) {\n    return invalidPreparedAction('V3 action identity does not match the configured deployment.');\n  }\n\n  const expected = asRecord(action.expected, 'V3 action expectation');\n  const preflight = validatePreflight(action.preflight);\n  let expectedTo: Address;\n  let expectedData: `0x${string}`;\n\n  if (action.kind === 'v3-create') {\n    if (expected.sqrtPriceX96 !== null || identity.poolAddress !== null) {\n      return invalidPreparedAction('A V3 create action must expect no price and no existing pool.');\n    }\n    if (preflight.status !== 'absent') {\n      return invalidPreparedAction(\n        'A V3 create action requires an inspected absent-pool preflight.'\n      );\n    }\n    expectedTo = getAddress(deployment.factory);\n    expectedData = encodeFunctionData({\n      abi: v3FactoryAbi,\n      functionName: 'createPool',\n      args: [key.token0, key.token1, key.fee],\n    });\n  } else {\n    const sqrtPriceX96 = asExpectedSqrtPrice(expected.sqrtPriceX96);\n    if (action.kind === 'v3-initialize') {\n      const poolAddress = asAddress(identity.poolAddress, 'V3 initialize poolAddress');\n      if (\n        preflight.status !== 'uninitialized' ||\n        preflight.poolAddress !== poolAddress\n      ) {\n        return invalidPreparedAction(\n          'A V3 initialize action requires a matching uninitialized preflight.'\n        );\n      }\n      expectedTo = poolAddress;\n      expectedData = encodeFunctionData({\n        abi: v3PoolAbi,\n        functionName: 'initialize',\n        args: [sqrtPriceX96],\n      });\n    } else {\n      if (!deployment.atomicCreateAndInitialize) {\n        throw new PoolLifecycleError(\n          'UNSUPPORTED_DEPLOYMENT',\n          `V3 deployment ${chainId}:${action.protocol} has no configured atomic initializer.`\n        );\n      }\n      const poolAddress =\n        identity.poolAddress === null\n          ? null\n          : asAddress(identity.poolAddress, 'V3 create-and-initialize poolAddress');\n      if (preflight.status === 'initialized') {\n        return invalidPreparedAction(\n          'A V3 create-and-initialize action requires an absent or uninitialized preflight.'\n        );\n      }\n      if (\n        (preflight.status === 'absent' && poolAddress !== null) ||\n        (preflight.status === 'uninitialized' && preflight.poolAddress !== poolAddress)\n      ) {\n        return invalidPreparedAction(\n          'V3 create-and-initialize identity does not match its preflight.'\n        );\n      }\n      expectedTo = getAddress(deployment.initializer);\n      expectedData = encodeFunctionData({\n        abi: v3PoolInitializerAbi,\n        functionName: 'createAndInitializePoolIfNecessary',\n        args: [key.token0, key.token1, key.fee, sqrtPriceX96],\n      });\n    }\n  }\n\n  if (to !== expectedTo || transaction.data.toLowerCase() !== expectedData.toLowerCase()) {\n    return invalidPreparedAction(\n      'V3 action transaction does not match its kind, identity, and expectation.'\n    );\n  }\n\n  return deployment;\n}\n\n/** Assertion-form companion for consumers that need TypeScript narrowing. */\nexport function assertPreparedV3PoolAction(value: unknown): asserts value is PreparedV3PoolAction {\n  validatePreparedV3PoolAction(value);\n}\n\n/** Deserialize and fully validate a versioned V3 prepared action. */\nexport function deserializePreparedV3PoolAction(serialized: string): PreparedV3PoolAction {\n  let value: unknown;\n  try {\n    value = deserializePreparedPoolAction(serialized);\n  } catch (error) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      error instanceof Error ? error.message : 'Serialized V3 pool action is invalid.',\n      error\n    );\n  }\n  assertPreparedV3PoolAction(value);\n  return value;\n}\n","import { getAddress } from 'viem';\nimport { PoolLifecycleError } from '../errors.js';\nimport { sortErc20Pair, validateSqrtPriceX96 } from '../math.js';\nimport type { V3InitialPrice, V3PoolKey, V3PoolKeyInput } from './types.js';\n\nconst MAX_V3_FEE = 1_000_000;\n\n/** Validate and canonicalize a V3 key without assuming a hard-coded fee tier. */\nexport function canonicalizeV3PoolKey(input: V3PoolKeyInput): V3PoolKey {\n  if (!Number.isSafeInteger(input.fee) || input.fee < 0 || input.fee >= MAX_V3_FEE) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'V3 fee must be an integer from 0 through 999999; deployment support is checked onchain.'\n    );\n  }\n\n  let pair;\n  try {\n    pair = sortErc20Pair(input.tokenA, input.tokenB);\n  } catch (error) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      error instanceof Error ? error.message : 'Invalid V3 token pair.',\n      error\n    );\n  }\n\n  return { ...pair, fee: input.fee };\n}\n\n/** Ensure an initial price is bound to the same canonical token pair as a V3 key. */\nexport function assertV3InitialPrice(key: V3PoolKey, price: V3InitialPrice): V3InitialPrice {\n  try {\n    if (getAddress(price.token0) !== key.token0 || getAddress(price.token1) !== key.token1) {\n      throw new Error('Initial price token order does not match the canonical V3 pool key.');\n    }\n    validateSqrtPriceX96(price.sqrtPriceX96);\n  } catch (error) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      error instanceof Error ? error.message : 'Invalid V3 initial price.',\n      error\n    );\n  }\n\n  return {\n    token0: key.token0,\n    token1: key.token1,\n    sqrtPriceX96: price.sqrtPriceX96,\n  };\n}\n","import { getAddress, type Address, type Hex, type PublicClient } from 'viem';\nimport { v3FactoryAbi, v3PoolAbi, v3PoolInitializerAbi } from '../abis/v3.js';\nimport type { V3LifecycleDeployment } from '../capabilities/v3.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { canonicalizeV3PoolKey } from './key.js';\nimport type { V3PoolKeyInput, V3PoolSnapshot } from './types.js';\n\nconst ZERO_ADDRESS = getAddress('0x0000000000000000000000000000000000000000');\n\nexport interface InspectV3PoolParams {\n  publicClient: PublicClient;\n  deployment: V3LifecycleDeployment;\n  key: V3PoolKeyInput;\n  blockNumber?: bigint;\n}\n\nfunction hasCode(bytecode: Hex | undefined): boolean {\n  return bytecode !== undefined && bytecode !== '0x';\n}\n\nasync function requireContractCode(\n  publicClient: PublicClient,\n  address: Address,\n  label: string,\n  blockNumber: bigint\n): Promise<void> {\n  const bytecode = await publicClient.getCode({ address, blockNumber });\n  if (!hasCode(bytecode)) {\n    throw new PoolLifecycleError(\n      'CONTRACT_NOT_DEPLOYED',\n      `${label} ${address} has no bytecode at block ${blockNumber}.`\n    );\n  }\n}\n\n/**\n * Read a block-consistent V3 deployment and pool snapshot before building or\n * verifying a lifecycle transaction.\n */\nexport async function inspectV3Pool(params: InspectV3PoolParams): Promise<V3PoolSnapshot> {\n  const { publicClient, deployment } = params;\n  const key = canonicalizeV3PoolKey(params.key);\n  const activeChainId = await publicClient.getChainId();\n  if (activeChainId !== deployment.chainId) {\n    throw new PoolLifecycleError(\n      'CHAIN_MISMATCH',\n      `Public client chain ${activeChainId} does not match lifecycle deployment chain ${deployment.chainId}.`\n    );\n  }\n\n  const blockNumber = params.blockNumber ?? (await publicClient.getBlockNumber());\n  const factory = getAddress(deployment.factory);\n\n  await Promise.all([\n    requireContractCode(publicClient, factory, 'V3 factory', blockNumber),\n    ...(deployment.atomicCreateAndInitialize\n      ? [\n          requireContractCode(\n            publicClient,\n            getAddress(deployment.initializer),\n            'V3 initializer',\n            blockNumber\n          ),\n        ]\n      : []),\n    requireContractCode(publicClient, key.token0, 'token0', blockNumber),\n    requireContractCode(publicClient, key.token1, 'token1', blockNumber),\n  ]);\n\n  const [initializerFactoryResult, feeTickSpacingResult, poolResult] = await Promise.all([\n    deployment.atomicCreateAndInitialize\n      ? publicClient.readContract({\n          address: getAddress(deployment.initializer),\n          abi: v3PoolInitializerAbi,\n          functionName: 'factory',\n          blockNumber,\n        })\n      : Promise.resolve(null),\n    publicClient.readContract({\n      address: factory,\n      abi: v3FactoryAbi,\n      functionName: 'feeAmountTickSpacing',\n      args: [key.fee],\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: factory,\n      abi: v3FactoryAbi,\n      functionName: 'getPool',\n      args: [key.token0, key.token1, key.fee],\n      blockNumber,\n    }),\n  ]);\n\n  if (\n    deployment.atomicCreateAndInitialize &&\n    getAddress(initializerFactoryResult as Address) !== factory\n  ) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `V3 initializer factory ${getAddress(initializerFactoryResult as Address)} does not match configured factory ${factory}.`\n    );\n  }\n\n  const feeTickSpacing = Number(feeTickSpacingResult);\n  if (!Number.isInteger(feeTickSpacing) || feeTickSpacing <= 0) {\n    throw new PoolLifecycleError(\n      'DISABLED_FEE',\n      `V3 fee ${key.fee} is not enabled by factory ${factory}.`\n    );\n  }\n\n  const poolAddress = getAddress(poolResult);\n  if (poolAddress === ZERO_ADDRESS) {\n    return {\n      schemaVersion: 1,\n      blockNumber,\n      deployment,\n      key,\n      feeTickSpacing,\n      status: 'absent',\n      poolAddress: null,\n      sqrtPriceX96: 0n,\n      tick: null,\n      tickSpacing: feeTickSpacing,\n    };\n  }\n\n  await requireContractCode(publicClient, poolAddress, 'V3 pool', blockNumber);\n\n  const [actualFactoryResult, token0Result, token1Result, feeResult, tickSpacingResult, slot0] =\n    await Promise.all([\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'factory',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'token0',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'token1',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'fee',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'tickSpacing',\n        blockNumber,\n      }),\n      publicClient.readContract({\n        address: poolAddress,\n        abi: v3PoolAbi,\n        functionName: 'slot0',\n        blockNumber,\n      }),\n    ]);\n\n  const actualFactory = getAddress(actualFactoryResult);\n  const actualToken0 = getAddress(token0Result);\n  const actualToken1 = getAddress(token1Result);\n  const actualFee = Number(feeResult);\n  const tickSpacing = Number(tickSpacingResult);\n\n  if (\n    actualFactory !== factory ||\n    actualToken0 !== key.token0 ||\n    actualToken1 !== key.token1 ||\n    actualFee !== key.fee ||\n    tickSpacing !== feeTickSpacing\n  ) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Pool ${poolAddress} immutables do not match the configured V3 deployment and key.`\n    );\n  }\n\n  const sqrtPriceX96 = slot0[0];\n  const tick = Number(slot0[1]);\n\n  if (sqrtPriceX96 === 0n) {\n    return {\n      schemaVersion: 1,\n      blockNumber,\n      deployment,\n      key,\n      feeTickSpacing,\n      status: 'uninitialized',\n      poolAddress,\n      sqrtPriceX96: 0n,\n      tick,\n      tickSpacing,\n    };\n  }\n\n  return {\n    schemaVersion: 1,\n    blockNumber,\n    deployment,\n    key,\n    feeTickSpacing,\n    status: 'initialized',\n    poolAddress,\n    sqrtPriceX96,\n    tick,\n    tickSpacing,\n  };\n}\n","import { encodeFunctionData, getAddress, isAddress, type Address } from 'viem';\nimport { v3FactoryAbi, v3PoolAbi, v3PoolInitializerAbi } from '../abis/v3.js';\nimport {\n  resolveV3LifecycleDeployment,\n  type V3AtomicLifecycleDeployment,\n  type V3LifecycleDeployment,\n} from '../capabilities/v3.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport { inspectV3Pool, type InspectV3PoolParams } from './inspect.js';\nimport { assertV3InitialPrice, canonicalizeV3PoolKey } from './key.js';\nimport type {\n  PreparedV3CreateAndInitializeAction,\n  PreparedV3CreatePoolAction,\n  PreparedV3InitializePoolAction,\n  V3AbsentPoolSnapshot,\n  V3AbsentPreflightSummary,\n  V3CreatePoolIdentity,\n  V3ExistingPoolIdentity,\n  V3InitialPrice,\n  V3InitializedPoolSnapshot,\n  V3InitializedPreflightSummary,\n  V3PoolIdentity,\n  V3PoolKey,\n  V3PoolKeyInput,\n  V3PoolSnapshot,\n  V3PreflightSummary,\n  V3UninitializedPoolSnapshot,\n  V3UninitializedPreflightSummary,\n} from './types.js';\n\ninterface V3BuildBaseParams {\n  deployment: V3LifecycleDeployment;\n  key: V3PoolKeyInput;\n}\n\nexport interface BuildV3CreatePoolTransactionParams extends V3BuildBaseParams {\n  readonly preflight: V3AbsentPoolSnapshot;\n}\n\nexport interface BuildV3InitializePoolTransactionParams extends V3BuildBaseParams {\n  readonly preflight: V3UninitializedPoolSnapshot;\n  readonly initialPrice: V3InitialPrice;\n}\n\nexport interface BuildV3CreateAndInitializeTransactionParams\n  extends Omit<V3BuildBaseParams, 'deployment'> {\n  readonly deployment: V3AtomicLifecycleDeployment;\n  readonly preflight: V3AbsentPoolSnapshot | V3UninitializedPoolSnapshot;\n  readonly initialPrice: V3InitialPrice;\n}\n\nexport interface PrepareV3CreateAndInitializeParams\n  extends Omit<InspectV3PoolParams, 'deployment' | 'blockNumber'> {\n  readonly deployment: V3AtomicLifecycleDeployment;\n  initialPrice: V3InitialPrice;\n  blockNumber?: bigint;\n}\n\nexport interface PrepareV3CreatePoolParams extends Omit<InspectV3PoolParams, 'blockNumber'> {\n  blockNumber?: bigint;\n}\n\nexport interface PrepareV3InitializePoolParams extends Omit<InspectV3PoolParams, 'blockNumber'> {\n  initialPrice: V3InitialPrice;\n  blockNumber?: bigint;\n}\n\nexport type PrepareV3CreateAndInitializeResult =\n  | {\n      readonly status: 'ready';\n      readonly snapshot: V3PoolSnapshot;\n      readonly action: PreparedV3CreateAndInitializeAction;\n    }\n  | {\n      readonly status: 'already-initialized-matching';\n      readonly snapshot: V3PoolSnapshot;\n      readonly action: null;\n    };\n\nexport type PrepareV3CreatePoolResult =\n  | {\n      readonly status: 'ready';\n      readonly snapshot: V3PoolSnapshot;\n      readonly action: PreparedV3CreatePoolAction;\n    }\n  | {\n      readonly status: 'already-exists';\n      readonly snapshot: Exclude<V3PoolSnapshot, { status: 'absent' }>;\n      readonly action: null;\n    };\n\nexport type PrepareV3InitializePoolResult =\n  | {\n      readonly status: 'ready';\n      readonly snapshot: V3UninitializedPoolSnapshot;\n      readonly action: PreparedV3InitializePoolAction;\n    }\n  | {\n      readonly status: 'already-initialized-matching';\n      readonly snapshot: Extract<V3PoolSnapshot, { status: 'initialized' }>;\n      readonly action: null;\n    };\n\nfunction preflightSummary(preflight: V3AbsentPoolSnapshot): V3AbsentPreflightSummary;\nfunction preflightSummary(preflight: V3UninitializedPoolSnapshot): V3UninitializedPreflightSummary;\nfunction preflightSummary(preflight: V3InitializedPoolSnapshot): V3InitializedPreflightSummary;\nfunction preflightSummary(\n  preflight: V3AbsentPoolSnapshot | V3UninitializedPoolSnapshot\n): V3AbsentPreflightSummary | V3UninitializedPreflightSummary;\nfunction preflightSummary(preflight: V3PoolSnapshot): V3PreflightSummary {\n  if (preflight.status === 'absent') {\n    return {\n      blockNumber: preflight.blockNumber,\n      status: 'absent',\n      poolAddress: null,\n      sqrtPriceX96: 0n,\n    };\n  }\n  if (preflight.status === 'uninitialized') {\n    return {\n      blockNumber: preflight.blockNumber,\n      status: 'uninitialized',\n      poolAddress: preflight.poolAddress,\n      sqrtPriceX96: 0n,\n    };\n  }\n  return {\n    blockNumber: preflight.blockNumber,\n    status: 'initialized',\n    poolAddress: preflight.poolAddress,\n    sqrtPriceX96: preflight.sqrtPriceX96,\n  };\n}\n\nfunction assertConfiguredDeployment(deployment: V3LifecycleDeployment): void {\n  let matches = false;\n  try {\n    const configured = resolveV3LifecycleDeployment({\n      chainId: deployment.chainId,\n      protocol: deployment.protocol,\n    });\n    matches =\n      configured !== undefined &&\n      deployment.supported === true &&\n      deployment.schemaVersion === configured.schemaVersion &&\n      deployment.family === configured.family &&\n      deployment.adapter === configured.adapter &&\n      deployment.version === configured.version &&\n      getAddress(deployment.factory) === getAddress(configured.factory) &&\n      (deployment.initializer === null || configured.initializer === null\n        ? deployment.initializer === configured.initializer\n        : getAddress(deployment.initializer) === getAddress(configured.initializer)) &&\n      deployment.atomicCreateAndInitialize === configured.atomicCreateAndInitialize &&\n      deployment.poolInitCodeHash === configured.poolInitCodeHash;\n  } catch {\n    // Runtime callers can cross JavaScript/JSON boundaries despite the TS type.\n  }\n  if (!matches) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `Pool lifecycle deployment is not configured for chain ${deployment.chainId} and protocol ${deployment.protocol}.`\n    );\n  }\n}\n\nfunction assertAtomicDeployment(\n  deployment: V3LifecycleDeployment\n): asserts deployment is V3AtomicLifecycleDeployment {\n  if (!deployment.atomicCreateAndInitialize) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `V3 deployment ${deployment.chainId}:${deployment.protocol} has no configured atomic initializer.`\n    );\n  }\n}\n\nfunction assertPreflightMatches(\n  deployment: V3LifecycleDeployment,\n  key: V3PoolKey,\n  preflight: V3PoolSnapshot\n): void {\n  if (!preflight) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'V3 transaction building requires an inspected preflight snapshot.'\n    );\n  }\n\n  let matches = false;\n  try {\n    matches =\n      preflight.schemaVersion === 1 &&\n      typeof preflight.blockNumber === 'bigint' &&\n      preflight.blockNumber >= 0n &&\n      preflight.deployment.chainId === deployment.chainId &&\n      preflight.deployment.schemaVersion === deployment.schemaVersion &&\n      preflight.deployment.protocol === deployment.protocol &&\n      preflight.deployment.family === deployment.family &&\n      preflight.deployment.adapter === deployment.adapter &&\n      preflight.deployment.version === deployment.version &&\n      getAddress(preflight.deployment.factory) === getAddress(deployment.factory) &&\n      (preflight.deployment.initializer === null || deployment.initializer === null\n        ? preflight.deployment.initializer === deployment.initializer\n        : getAddress(preflight.deployment.initializer) === getAddress(deployment.initializer)) &&\n      preflight.deployment.atomicCreateAndInitialize === deployment.atomicCreateAndInitialize &&\n      preflight.deployment.poolInitCodeHash === deployment.poolInitCodeHash &&\n      preflight.key.token0 === key.token0 &&\n      preflight.key.token1 === key.token1 &&\n      preflight.key.fee === key.fee &&\n      Number.isSafeInteger(preflight.feeTickSpacing) &&\n      preflight.feeTickSpacing > 0 &&\n      preflight.feeTickSpacing <= 16_383 &&\n      preflight.tickSpacing === preflight.feeTickSpacing;\n  } catch {\n    // The uniform INVALID_INPUT error below is part of the public boundary.\n  }\n  if (!matches) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'V3 preflight snapshot does not match the requested deployment and pool key.'\n    );\n  }\n\n  if (\n    preflight.status !== 'absent' &&\n    preflight.status !== 'uninitialized' &&\n    preflight.status !== 'initialized'\n  ) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'V3 preflight status is unsupported.');\n  }\n\n  if (preflight.status === 'absent') {\n    if (\n      preflight.poolAddress !== null ||\n      preflight.sqrtPriceX96 !== 0n ||\n      preflight.tick !== null\n    ) {\n      throw new PoolLifecycleError('INVALID_INPUT', 'Absent V3 preflight state is inconsistent.');\n    }\n    return;\n  }\n\n  if (\n    !isAddress(preflight.poolAddress, { strict: true }) ||\n    getAddress(preflight.poolAddress) === '0x0000000000000000000000000000000000000000'\n  ) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'V3 preflight pool address is invalid.');\n  }\n  if (preflight.status === 'uninitialized' && preflight.sqrtPriceX96 !== 0n) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Uninitialized V3 preflight state must have zero sqrtPriceX96.'\n    );\n  }\n  if (\n    !Number.isSafeInteger(preflight.tick) ||\n    preflight.tick < -887_272 ||\n    preflight.tick > 887_272\n  ) {\n    throw new PoolLifecycleError('INVALID_INPUT', 'V3 preflight tick is invalid.');\n  }\n  if (preflight.status === 'initialized') {\n    try {\n      validateSqrtPriceX96(preflight.sqrtPriceX96);\n    } catch (error) {\n      throw new PoolLifecycleError(\n        'INVALID_INPUT',\n        error instanceof Error ? error.message : 'Initialized V3 preflight price is invalid.',\n        error\n      );\n    }\n  }\n}\n\nfunction assertCreatePreflight(\n  preflight: V3PoolSnapshot\n): asserts preflight is V3AbsentPoolSnapshot {\n  if (preflight.status !== 'absent') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'V3 factory creation requires an inspected, absent pool.'\n    );\n  }\n}\n\nfunction assertAtomicPreflight(\n  preflight: V3PoolSnapshot,\n  sqrtPriceX96: bigint\n): asserts preflight is V3AbsentPoolSnapshot | V3UninitializedPoolSnapshot {\n  if (preflight.status === 'initialized') {\n    const qualifier = preflight.sqrtPriceX96 === sqrtPriceX96 ? 'matching' : 'different';\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V3 pool is already initialized at a ${qualifier} price; no initialization transaction was built.`\n    );\n  }\n}\n\nfunction buildIdentity(\n  deployment: V3LifecycleDeployment,\n  key: V3PoolKey,\n  poolAddress: null\n): V3CreatePoolIdentity;\nfunction buildIdentity(\n  deployment: V3LifecycleDeployment,\n  key: V3PoolKey,\n  poolAddress: Address\n): V3ExistingPoolIdentity;\nfunction buildIdentity(\n  deployment: V3LifecycleDeployment,\n  key: V3PoolKey,\n  poolAddress: Address | null\n): V3PoolIdentity;\nfunction buildIdentity(\n  deployment: V3LifecycleDeployment,\n  key: V3PoolKey,\n  poolAddress: Address | null\n): V3PoolIdentity {\n  return {\n    family: 'uniswap-v3-compatible',\n    adapter: deployment.adapter,\n    version: deployment.version,\n    chainId: deployment.chainId,\n    factory: getAddress(deployment.factory),\n    initializer: deployment.initializer === null ? null : getAddress(deployment.initializer),\n    key,\n    poolAddress,\n  };\n}\n\n/** Build the low-level V3 factory create transaction without signing it. */\nexport function buildV3CreatePoolTransaction(\n  params: BuildV3CreatePoolTransactionParams\n): PreparedV3CreatePoolAction {\n  assertConfiguredDeployment(params.deployment);\n  const key = canonicalizeV3PoolKey(params.key);\n  assertPreflightMatches(params.deployment, key, params.preflight);\n  assertCreatePreflight(params.preflight);\n\n  return {\n    schemaVersion: 1,\n    kind: 'v3-create',\n    protocol: params.deployment.protocol,\n    transaction: {\n      chainId: params.deployment.chainId,\n      to: getAddress(params.deployment.factory),\n      data: encodeFunctionData({\n        abi: v3FactoryAbi,\n        functionName: 'createPool',\n        args: [key.token0, key.token1, key.fee],\n      }),\n      value: 0n,\n    },\n    identity: buildIdentity(params.deployment, key, null),\n    expected: { sqrtPriceX96: null },\n    preflight: preflightSummary(params.preflight),\n  };\n}\n\n/** Build a direct one-time V3 pool initialize transaction without signing it. */\nexport function buildV3InitializePoolTransaction(\n  params: BuildV3InitializePoolTransactionParams\n): PreparedV3InitializePoolAction {\n  assertConfiguredDeployment(params.deployment);\n  const key = canonicalizeV3PoolKey(params.key);\n  const initialPrice = assertV3InitialPrice(key, params.initialPrice);\n  if (!params.preflight || params.preflight.status !== 'uninitialized') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Direct V3 initialize requires an inspected, uninitialized pool.'\n    );\n  }\n  assertPreflightMatches(params.deployment, key, params.preflight);\n  const poolAddress = getAddress(params.preflight.poolAddress);\n\n  return {\n    schemaVersion: 1,\n    kind: 'v3-initialize',\n    protocol: params.deployment.protocol,\n    transaction: {\n      chainId: params.deployment.chainId,\n      to: poolAddress,\n      data: encodeFunctionData({\n        abi: v3PoolAbi,\n        functionName: 'initialize',\n        args: [initialPrice.sqrtPriceX96],\n      }),\n      value: 0n,\n    },\n    identity: buildIdentity(params.deployment, key, poolAddress),\n    expected: { sqrtPriceX96: initialPrice.sqrtPriceX96 },\n    preflight: preflightSummary(params.preflight),\n  };\n}\n\n/** Build the canonical atomic create-and-initialize V3 periphery transaction. */\nexport function buildV3CreateAndInitializeTransaction(\n  params: BuildV3CreateAndInitializeTransactionParams\n): PreparedV3CreateAndInitializeAction {\n  assertConfiguredDeployment(params.deployment);\n  assertAtomicDeployment(params.deployment);\n  const key = canonicalizeV3PoolKey(params.key);\n  const initialPrice = assertV3InitialPrice(key, params.initialPrice);\n  assertPreflightMatches(params.deployment, key, params.preflight);\n  assertAtomicPreflight(params.preflight, initialPrice.sqrtPriceX96);\n\n  return {\n    schemaVersion: 1,\n    kind: 'v3-create-and-initialize',\n    protocol: params.deployment.protocol,\n    transaction: {\n      chainId: params.deployment.chainId,\n      to: getAddress(params.deployment.initializer),\n      data: encodeFunctionData({\n        abi: v3PoolInitializerAbi,\n        functionName: 'createAndInitializePoolIfNecessary',\n        args: [key.token0, key.token1, key.fee, initialPrice.sqrtPriceX96],\n      }),\n      value: 0n,\n    },\n    identity: buildIdentity(params.deployment, key, params.preflight.poolAddress),\n    expected: { sqrtPriceX96: initialPrice.sqrtPriceX96 },\n    preflight: preflightSummary(params.preflight),\n  };\n}\n\n/**\n * Prepare only the factory-creation step. This is the first stage for\n * deployments without a configured atomic initializer and deliberately does\n * not claim that the irreversible initial price has been set.\n */\nexport async function prepareV3CreatePool(\n  params: PrepareV3CreatePoolParams\n): Promise<PrepareV3CreatePoolResult> {\n  assertConfiguredDeployment(params.deployment);\n  const snapshot = await inspectV3Pool({\n    publicClient: params.publicClient,\n    deployment: params.deployment,\n    key: params.key,\n    blockNumber: params.blockNumber,\n  });\n\n  if (snapshot.status !== 'absent') {\n    return { status: 'already-exists', snapshot, action: null };\n  }\n\n  return {\n    status: 'ready',\n    snapshot,\n    action: buildV3CreatePoolTransaction({\n      deployment: params.deployment,\n      key: {\n        tokenA: snapshot.key.token0,\n        tokenB: snapshot.key.token1,\n        fee: snapshot.key.fee,\n      },\n      preflight: snapshot,\n    }),\n  };\n}\n\n/**\n * Prepare only the direct, one-time pool initialization step. Callers using a\n * factory-only deployment must mine and verify creation, re-inspect the pool,\n * and then call this function; the SDK does not conceal the intervening race.\n */\nexport async function prepareV3InitializePool(\n  params: PrepareV3InitializePoolParams\n): Promise<PrepareV3InitializePoolResult> {\n  assertConfiguredDeployment(params.deployment);\n  const snapshot = await inspectV3Pool({\n    publicClient: params.publicClient,\n    deployment: params.deployment,\n    key: params.key,\n    blockNumber: params.blockNumber,\n  });\n  const price = assertV3InitialPrice(snapshot.key, params.initialPrice);\n\n  if (snapshot.status === 'absent') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'V3 pool does not exist; create and verify it before preparing direct initialization.'\n    );\n  }\n  if (snapshot.status === 'initialized') {\n    if (snapshot.sqrtPriceX96 === price.sqrtPriceX96) {\n      return { status: 'already-initialized-matching', snapshot, action: null };\n    }\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V3 pool ${snapshot.poolAddress} is already initialized at a different price.`\n    );\n  }\n\n  return {\n    status: 'ready',\n    snapshot,\n    action: buildV3InitializePoolTransaction({\n      deployment: params.deployment,\n      key: {\n        tokenA: snapshot.key.token0,\n        tokenB: snapshot.key.token1,\n        fee: snapshot.key.fee,\n      },\n      initialPrice: price,\n      preflight: snapshot,\n    }),\n  };\n}\n\n/**\n * Safe default preparation flow for UI and CLI consumers. It returns no\n * transaction for an already initialized pool only when the exact price\n * matches, and rejects a conflicting existing price.\n */\nexport async function prepareV3CreateAndInitialize(\n  params: PrepareV3CreateAndInitializeParams\n): Promise<PrepareV3CreateAndInitializeResult> {\n  assertConfiguredDeployment(params.deployment);\n  assertAtomicDeployment(params.deployment);\n  const snapshot = await inspectV3Pool({\n    publicClient: params.publicClient,\n    deployment: params.deployment,\n    key: params.key,\n    blockNumber: params.blockNumber,\n  });\n  const price = assertV3InitialPrice(snapshot.key, params.initialPrice);\n\n  if (snapshot.status === 'initialized') {\n    if (snapshot.sqrtPriceX96 === price.sqrtPriceX96) {\n      return { status: 'already-initialized-matching', snapshot, action: null };\n    }\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V3 pool ${snapshot.poolAddress} is already initialized at a different price.`\n    );\n  }\n\n  return {\n    status: 'ready',\n    snapshot,\n    action: buildV3CreateAndInitializeTransaction({\n      deployment: params.deployment,\n      key: {\n        tokenA: snapshot.key.token0,\n        tokenB: snapshot.key.token1,\n        fee: snapshot.key.fee,\n      },\n      initialPrice: price,\n      preflight: snapshot,\n    }),\n  };\n}\n","import {\n  decodeFunctionResult,\n  getAddress,\n  isAddress,\n  type Address,\n  type Hex,\n  type PublicClient,\n} from 'viem';\nimport { v3FactoryAbi, v3PoolInitializerAbi } from '../abis/v3.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectV3Pool } from './inspect.js';\nimport {\n  validatePreparedV3PoolAction,\n  type PreparedV3PoolAction,\n  type V3PoolActionSimulation,\n} from './types.js';\n\nconst ZERO_ADDRESS = getAddress('0x0000000000000000000000000000000000000000');\n\nexport interface SimulateV3PoolActionParams {\n  publicClient: PublicClient;\n  account: Address;\n  action: PreparedV3PoolAction;\n  /** Defaults to the current block. Historical simulation must be explicit. */\n  blockNumber?: bigint;\n}\n\nfunction decodeReturnedPool(\n  action: PreparedV3PoolAction,\n  returnData: Hex | undefined\n): Address | null {\n  switch (action.kind) {\n    case 'v3-initialize':\n      return null;\n    case 'v3-create':\n      if (!returnData || returnData === '0x') {\n        throw new PoolLifecycleError(\n          'SIMULATION_FAILED',\n          'V3 create simulation returned no pool address.'\n        );\n      }\n      return getAddress(\n        decodeFunctionResult({\n          abi: v3FactoryAbi,\n          functionName: 'createPool',\n          data: returnData,\n        })\n      );\n    case 'v3-create-and-initialize':\n      if (!returnData || returnData === '0x') {\n        throw new PoolLifecycleError(\n          'SIMULATION_FAILED',\n          'V3 create-and-initialize simulation returned no pool address.'\n        );\n      }\n      return getAddress(\n        decodeFunctionResult({\n          abi: v3PoolInitializerAbi,\n          functionName: 'createAndInitializePoolIfNecessary',\n          data: returnData,\n        })\n      );\n  }\n}\n\n/** Simulate and estimate a prepared action with the exact eventual sender. */\nexport async function simulateV3PoolAction(\n  params: SimulateV3PoolActionParams\n): Promise<V3PoolActionSimulation> {\n  if (!isAddress(params.account, { strict: true }) || getAddress(params.account) === ZERO_ADDRESS) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'Simulation account must be a valid non-zero EVM address.'\n    );\n  }\n\n  const { publicClient, action } = params;\n  const deployment = validatePreparedV3PoolAction(action);\n  const account = getAddress(params.account);\n  const blockNumber = params.blockNumber ?? (await publicClient.getBlockNumber());\n  const snapshot = await inspectV3Pool({\n    publicClient,\n    deployment,\n    key: {\n      tokenA: action.identity.key.token0,\n      tokenB: action.identity.key.token1,\n      fee: action.identity.key.fee,\n    },\n    blockNumber,\n  });\n\n  if (action.kind === 'v3-create' && snapshot.status !== 'absent') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V3 pool already exists at ${snapshot.poolAddress}; refresh the prepared action.`\n    );\n  }\n  if (\n    action.kind === 'v3-initialize' &&\n    (snapshot.status !== 'uninitialized' || snapshot.poolAddress !== action.identity.poolAddress)\n  ) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'V3 pool is no longer the uninitialized factory pool bound to this action.'\n    );\n  }\n  if (action.kind === 'v3-create-and-initialize' && snapshot.status === 'initialized') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V3 pool ${snapshot.poolAddress} is already initialized; refresh the prepared action.`\n    );\n  }\n\n  const targetCode = await publicClient.getCode({\n    address: action.transaction.to,\n    blockNumber,\n  });\n  if (!targetCode || targetCode === '0x') {\n    throw new PoolLifecycleError(\n      'CONTRACT_NOT_DEPLOYED',\n      `Pool action target ${action.transaction.to} has no bytecode at block ${blockNumber}.`\n    );\n  }\n  const baseRequest = {\n    account,\n    to: action.transaction.to,\n    data: action.transaction.data,\n    value: action.transaction.value,\n  } as const;\n  const callRequest = { ...baseRequest, batch: false as const, blockNumber };\n  const estimateRequest = { ...baseRequest, blockNumber };\n\n  try {\n    const callResult = await publicClient.call(callRequest);\n    const gasEstimate = await publicClient.estimateGas(estimateRequest);\n    const returnedPoolAddress = decodeReturnedPool(action, callResult.data);\n\n    if (\n      action.identity.poolAddress &&\n      returnedPoolAddress &&\n      returnedPoolAddress !== action.identity.poolAddress\n    ) {\n      throw new PoolLifecycleError(\n        'POOL_STATE_MISMATCH',\n        `Simulation returned pool ${returnedPoolAddress}, expected ${action.identity.poolAddress}.`\n      );\n    }\n\n    return {\n      transaction: action.transaction,\n      blockNumber,\n      returnData: callResult.data ?? null,\n      returnedPoolAddress,\n      gasEstimate,\n    };\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) throw error;\n    throw new PoolLifecycleError(\n      'SIMULATION_FAILED',\n      error instanceof Error ? error.message : 'V3 pool action simulation failed.',\n      error\n    );\n  }\n}\n","import {\n  decodeEventLog,\n  getAddress,\n  type Address,\n  type PublicClient,\n  type Transaction,\n  type TransactionReceipt,\n} from 'viem';\nimport { v3FactoryAbi, v3PoolAbi } from '../abis/v3.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectV3Pool } from './inspect.js';\nimport {\n  validatePreparedV3PoolAction,\n  type PreparedV3PoolAction,\n  type V3PoolActionVerification,\n  type V3PoolCreatedEvidence,\n  type V3PoolInitializedEvidence,\n  type V3PoolIdentity,\n  type V3PoolSnapshot,\n  type V3ReceiptEvidence,\n} from './types.js';\n\nexport interface VerifyV3PoolActionParams {\n  publicClient: PublicClient;\n  action: PreparedV3PoolAction;\n  receipt: TransactionReceipt;\n}\n\nfunction assertLogBelongsToReceipt(\n  log: TransactionReceipt['logs'][number],\n  receipt: TransactionReceipt\n): void {\n  if (\n    log.transactionHash !== receipt.transactionHash ||\n    log.blockHash !== receipt.blockHash ||\n    log.blockNumber !== receipt.blockNumber ||\n    log.transactionIndex !== receipt.transactionIndex ||\n    log.removed !== false\n  ) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Decoded V3 lifecycle log does not belong to the supplied receipt.'\n    );\n  }\n}\n\nfunction decodeMatchingPoolCreated(\n  action: PreparedV3PoolAction,\n  receipt: TransactionReceipt\n): V3PoolCreatedEvidence | null {\n  const matches: V3PoolCreatedEvidence[] = [];\n\n  for (const log of receipt.logs) {\n    if (getAddress(log.address) !== action.identity.factory) continue;\n    let decoded;\n    try {\n      decoded = decodeEventLog({\n        abi: v3FactoryAbi,\n        eventName: 'PoolCreated',\n        data: log.data,\n        topics: log.topics,\n      });\n    } catch {\n      // The receipt can contain unrelated factory logs.\n      continue;\n    }\n    if (\n      getAddress(decoded.args.token0) !== action.identity.key.token0 ||\n      getAddress(decoded.args.token1) !== action.identity.key.token1 ||\n      Number(decoded.args.fee) !== action.identity.key.fee\n    ) {\n      continue;\n    }\n    assertLogBelongsToReceipt(log, receipt);\n    matches.push({\n      poolAddress: getAddress(decoded.args.pool),\n      token0: getAddress(decoded.args.token0),\n      token1: getAddress(decoded.args.token1),\n      fee: Number(decoded.args.fee),\n      tickSpacing: Number(decoded.args.tickSpacing),\n      logIndex: log.logIndex,\n    });\n  }\n\n  if (matches.length > 1) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Receipt contains multiple matching V3 PoolCreated events.'\n    );\n  }\n  return matches[0] ?? null;\n}\n\nfunction decodeInitializations(receipt: TransactionReceipt): V3PoolInitializedEvidence[] {\n  const initializations: V3PoolInitializedEvidence[] = [];\n  for (const log of receipt.logs) {\n    let decoded;\n    try {\n      decoded = decodeEventLog({\n        abi: v3PoolAbi,\n        eventName: 'Initialize',\n        data: log.data,\n        topics: log.topics,\n      });\n    } catch {\n      // Most receipt logs are expected to be unrelated to pool initialization.\n      continue;\n    }\n    assertLogBelongsToReceipt(log, receipt);\n    initializations.push({\n      poolAddress: getAddress(log.address),\n      sqrtPriceX96: decoded.args.sqrtPriceX96,\n      tick: Number(decoded.args.tick),\n      logIndex: log.logIndex,\n    });\n  }\n  return initializations;\n}\n\n/** Decode receipt evidence without making any RPC reads. */\nexport function decodeV3PoolActionReceipt(\n  action: PreparedV3PoolAction,\n  receipt: TransactionReceipt\n): V3ReceiptEvidence {\n  validatePreparedV3PoolAction(action);\n  return {\n    receiptStatus: receipt.status,\n    poolCreated: decodeMatchingPoolCreated(action, receipt),\n    initializations: decodeInitializations(receipt),\n  };\n}\n\nfunction withFinalPoolAddress(\n  action: PreparedV3PoolAction,\n  snapshot: V3PoolSnapshot | null\n): V3PoolIdentity {\n  return {\n    ...action.identity,\n    poolAddress: snapshot?.poolAddress ?? action.identity.poolAddress,\n  };\n}\n\n/** Evaluate decoded receipt evidence against a block-pinned V3 snapshot. */\nfunction evaluateV3PoolAction(\n  action: PreparedV3PoolAction,\n  evidence: V3ReceiptEvidence,\n  snapshot: V3PoolSnapshot | null,\n  blockNumber: bigint\n): V3PoolActionVerification {\n  const warnings: string[] = [];\n  const identity = withFinalPoolAddress(action, snapshot);\n\n  if (evidence.receiptStatus === 'reverted') {\n    return {\n      verified: false,\n      outcome: 'reverted',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  if (!snapshot || snapshot.status === 'absent' || !snapshot.poolAddress) {\n    return {\n      verified: false,\n      outcome: 'not-initialized',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  const created = evidence.poolCreated;\n  const createdMatchesState =\n    created !== null &&\n    created.poolAddress === snapshot.poolAddress &&\n    created.tickSpacing === snapshot.tickSpacing;\n  const initializationsAtPool = evidence.initializations.filter(\n    (item) => item.poolAddress === snapshot.poolAddress\n  );\n  if (initializationsAtPool.length > 1) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Receipt contains multiple Initialize events for the expected V3 pool.'],\n    };\n  }\n  const initializationAtPool = initializationsAtPool[0];\n  const exactInitialization = initializationsAtPool.find(\n    (item) =>\n      item.poolAddress === snapshot.poolAddress &&\n      action.expected.sqrtPriceX96 !== null &&\n      item.sqrtPriceX96 === action.expected.sqrtPriceX96\n  );\n\n  if (created && !createdMatchesState) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['PoolCreated evidence does not match the receipt-block pool state.'],\n    };\n  }\n\n  if (action.kind === 'v3-create') {\n    if (!createdMatchesState) {\n      return {\n        verified: false,\n        outcome: 'wrong-deployment',\n        blockNumber,\n        identity,\n        state: snapshot,\n        evidence,\n        warnings,\n      };\n    }\n    if (snapshot.status === 'initialized') {\n      warnings.push('The pool was initialized after creation in the same block.');\n    }\n    return {\n      verified: true,\n      outcome: 'created',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  if (exactInitialization) {\n    if (snapshot.status !== 'initialized') {\n      return {\n        verified: false,\n        outcome: 'not-initialized',\n        blockNumber,\n        identity,\n        state: snapshot,\n        evidence,\n        warnings,\n      };\n    }\n    if (snapshot.sqrtPriceX96 !== action.expected.sqrtPriceX96) {\n      warnings.push('Pool price moved after the matching Initialize event in the receipt block.');\n      return {\n        verified: true,\n        outcome: 'initialized-then-price-moved',\n        blockNumber,\n        identity,\n        state: snapshot,\n        evidence,\n        warnings,\n      };\n    }\n    return {\n      verified: true,\n      outcome:\n        action.kind === 'v3-create-and-initialize' && createdMatchesState\n          ? 'created-and-initialized'\n          : 'initialized-existing',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  if (initializationAtPool) {\n    warnings.push('Receipt initialized the expected pool at a different price.');\n    return {\n      verified: false,\n      outcome: 'already-initialized-different-price',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  if (action.kind === 'v3-create-and-initialize' && createdMatchesState) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings: ['PoolCreated evidence is missing the required same-receipt Initialize event.'],\n    };\n  }\n\n  if (action.kind === 'v3-create-and-initialize' && snapshot.status === 'initialized') {\n    if (snapshot.sqrtPriceX96 === action.expected.sqrtPriceX96) {\n      warnings.push(\n        'The receipt contains no matching Initialize event; another transaction set the price.'\n      );\n      return {\n        verified: true,\n        outcome: 'already-initialized-matching',\n        blockNumber,\n        identity,\n        state: snapshot,\n        evidence,\n        warnings,\n      };\n    }\n    return {\n      verified: false,\n      outcome: 'already-initialized-different-price',\n      blockNumber,\n      identity,\n      state: snapshot,\n      evidence,\n      warnings,\n    };\n  }\n\n  return {\n    verified: false,\n    outcome: 'not-initialized',\n    blockNumber,\n    identity,\n    state: snapshot,\n    evidence,\n    warnings,\n  };\n}\n\n/** Compose receipt decoding with receipt-block deployment and state verification. */\nexport async function verifyV3PoolAction(\n  params: VerifyV3PoolActionParams\n): Promise<V3PoolActionVerification> {\n  const { publicClient, action, receipt } = params;\n  const deployment = validatePreparedV3PoolAction(action);\n  const emptyEvidence: V3ReceiptEvidence = {\n    receiptStatus: receipt.status,\n    poolCreated: null,\n    initializations: [],\n  };\n\n  let activeChainId: number;\n  let transaction: Transaction;\n  let canonicalReceipt: TransactionReceipt;\n  try {\n    [activeChainId, transaction, canonicalReceipt] = await Promise.all([\n      publicClient.getChainId(),\n      publicClient.getTransaction({ hash: receipt.transactionHash }),\n      publicClient.getTransactionReceipt({ hash: receipt.transactionHash }),\n    ]);\n  } catch (error) {\n    return {\n      verified: false,\n      outcome: 'verification-unavailable',\n      blockNumber: receipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence: emptyEvidence,\n      warnings: [\n        error instanceof Error\n          ? error.message\n          : 'Failed to load the canonical receipt and transaction.',\n      ],\n    };\n  }\n\n  const nullableAddressMatches = (left: Address | null, right: Address | null): boolean =>\n    left === null || right === null ? left === right : getAddress(left) === getAddress(right);\n  const target = getAddress(action.transaction.to);\n  const suppliedReceiptMatchesCanonical =\n    receipt.transactionHash === canonicalReceipt.transactionHash &&\n    receipt.blockHash === canonicalReceipt.blockHash &&\n    receipt.blockNumber === canonicalReceipt.blockNumber &&\n    receipt.transactionIndex === canonicalReceipt.transactionIndex &&\n    receipt.status === canonicalReceipt.status &&\n    nullableAddressMatches(receipt.to, canonicalReceipt.to);\n  const receiptDestinationMatches =\n    canonicalReceipt.to !== null && getAddress(canonicalReceipt.to) === target;\n  const transactionDestinationMatches =\n    transaction.to !== null && getAddress(transaction.to) === target;\n  const transactionMatches =\n    transaction.hash === canonicalReceipt.transactionHash &&\n    transactionDestinationMatches &&\n    transaction.input.toLowerCase() === action.transaction.data.toLowerCase() &&\n    transaction.value === action.transaction.value &&\n    transaction.blockHash === canonicalReceipt.blockHash &&\n    transaction.blockNumber === canonicalReceipt.blockNumber &&\n    transaction.transactionIndex === canonicalReceipt.transactionIndex &&\n    getAddress(transaction.from) === getAddress(canonicalReceipt.from);\n\n  if (\n    activeChainId !== action.transaction.chainId ||\n    !suppliedReceiptMatchesCanonical ||\n    !receiptDestinationMatches ||\n    !transactionMatches\n  ) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence: emptyEvidence,\n      warnings: ['Receipt, client, or lifecycle deployment does not match the prepared action.'],\n    };\n  }\n\n  let evidence: V3ReceiptEvidence;\n  try {\n    evidence = decodeV3PoolActionReceipt(action, canonicalReceipt);\n  } catch (error) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence: emptyEvidence,\n      warnings: [error instanceof Error ? error.message : 'Receipt log attribution failed.'],\n    };\n  }\n\n  let blockHashBefore: `0x${string}` | null;\n  try {\n    blockHashBefore = (\n      await publicClient.getBlock({\n        blockNumber: canonicalReceipt.blockNumber,\n        includeTransactions: false,\n      })\n    ).hash;\n  } catch (error) {\n    return {\n      verified: false,\n      outcome: 'verification-unavailable',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence,\n      warnings: [error instanceof Error ? error.message : 'Failed to load the receipt block.'],\n    };\n  }\n  if (blockHashBefore !== canonicalReceipt.blockHash) {\n    return {\n      verified: false,\n      outcome: 'verification-unavailable',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence,\n      warnings: ['Receipt block is no longer canonical; retry verification with a fresh receipt.'],\n    };\n  }\n\n  if (canonicalReceipt.status === 'reverted') {\n    return evaluateV3PoolAction(action, evidence, null, canonicalReceipt.blockNumber);\n  }\n\n  let snapshot: V3PoolSnapshot;\n  try {\n    snapshot = await inspectV3Pool({\n      publicClient,\n      deployment,\n      key: {\n        tokenA: action.identity.key.token0,\n        tokenB: action.identity.key.token1,\n        fee: action.identity.key.fee,\n      },\n      blockNumber: canonicalReceipt.blockNumber,\n    });\n  } catch (error) {\n    const isDeploymentFailure = error instanceof PoolLifecycleError;\n    return {\n      verified: false,\n      outcome: isDeploymentFailure ? 'wrong-deployment' : 'verification-unavailable',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence,\n      warnings: [error instanceof Error ? error.message : 'Failed to verify V3 pool state.'],\n    };\n  }\n\n  try {\n    const blockAfter = await publicClient.getBlock({\n      blockNumber: canonicalReceipt.blockNumber,\n      includeTransactions: false,\n    });\n    if (blockAfter.hash !== canonicalReceipt.blockHash) {\n      return {\n        verified: false,\n        outcome: 'verification-unavailable',\n        blockNumber: canonicalReceipt.blockNumber,\n        identity: action.identity,\n        state: null,\n        evidence,\n        warnings: ['Receipt block changed during verification; retry with a fresh receipt.'],\n      };\n    }\n  } catch (error) {\n    return {\n      verified: false,\n      outcome: 'verification-unavailable',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence,\n      warnings: [\n        error instanceof Error ? error.message : 'Failed to confirm the canonical receipt block.',\n      ],\n    };\n  }\n\n  return evaluateV3PoolAction(action, evidence, snapshot, canonicalReceipt.blockNumber);\n}\n","import { getAddress, type Address, type Hex, type PublicClient } from 'viem';\nimport { v4StateViewAbi } from '../abis/v4.js';\nimport { validateV4LifecycleDeployment, type V4LifecycleDeployment } from '../capabilities/v4.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { validateSqrtPriceX96 } from '../math.js';\nimport {\n  canonicalizeV4PoolKey,\n  getV4PoolId,\n  V4_DYNAMIC_FEE_FLAG,\n  V4_MAX_STATIC_FEE,\n  V4_ZERO_ADDRESS,\n} from './key.js';\nimport type { V4PoolKeyInput, V4PoolSnapshot } from './types.js';\n\nexport interface InspectV4PoolParams {\n  readonly publicClient: PublicClient;\n  readonly deployment: V4LifecycleDeployment;\n  readonly key: V4PoolKeyInput;\n  readonly blockNumber?: bigint;\n}\n\nfunction hasCode(bytecode: Hex | undefined): boolean {\n  return bytecode !== undefined && bytecode !== '0x';\n}\n\nasync function requireContractCode(\n  publicClient: PublicClient,\n  address: Address,\n  label: string,\n  blockNumber: bigint\n): Promise<void> {\n  const bytecode = await publicClient.getCode({ address, blockNumber });\n  if (!hasCode(bytecode)) {\n    throw new PoolLifecycleError(\n      'CONTRACT_NOT_DEPLOYED',\n      `${label} ${address} has no bytecode at block ${blockNumber}.`\n    );\n  }\n}\n\nfunction asUint24(value: unknown, label: string): number {\n  const converted = Number(value);\n  if (!Number.isSafeInteger(converted) || converted < 0 || converted > 0xffffff) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `${label} returned by StateView is not a uint24.`\n    );\n  }\n  return converted;\n}\n\nfunction asTick(value: unknown): number {\n  const converted = Number(value);\n  if (!Number.isSafeInteger(converted) || converted < -887_272 || converted > 887_272) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      'Tick returned by StateView is outside the TickMath range.'\n    );\n  }\n  return converted;\n}\n\n/** Read PoolManager identity and pool state at one pinned block. */\nexport async function inspectV4Pool(params: InspectV4PoolParams): Promise<V4PoolSnapshot> {\n  const { publicClient } = params;\n  const deployment = validateV4LifecycleDeployment(params.deployment);\n  const key = canonicalizeV4PoolKey(params.key);\n  const activeChainId = await publicClient.getChainId();\n  if (activeChainId !== deployment.chainId) {\n    throw new PoolLifecycleError(\n      'CHAIN_MISMATCH',\n      `Public client chain ${activeChainId} does not match V4 deployment chain ${deployment.chainId}.`\n    );\n  }\n\n  const blockNumber = params.blockNumber ?? (await publicClient.getBlockNumber());\n  if (typeof blockNumber !== 'bigint' || blockNumber < 0n) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'V4 inspection blockNumber must be non-negative.'\n    );\n  }\n\n  const codeChecks: Promise<void>[] = [\n    requireContractCode(publicClient, deployment.poolManager, 'V4 PoolManager', blockNumber),\n    requireContractCode(publicClient, deployment.stateView, 'V4 StateView', blockNumber),\n  ];\n  if (key.currency0 !== V4_ZERO_ADDRESS) {\n    codeChecks.push(requireContractCode(publicClient, key.currency0, 'currency0', blockNumber));\n  }\n  codeChecks.push(requireContractCode(publicClient, key.currency1, 'currency1', blockNumber));\n  if (key.hooks !== V4_ZERO_ADDRESS) {\n    codeChecks.push(requireContractCode(publicClient, key.hooks, 'V4 hooks', blockNumber));\n  }\n  await Promise.all(codeChecks);\n\n  const poolId = getV4PoolId(key);\n  const [viewPoolManagerResult, slot0] = await Promise.all([\n    publicClient.readContract({\n      address: deployment.stateView,\n      abi: v4StateViewAbi,\n      functionName: 'poolManager',\n      blockNumber,\n    }),\n    publicClient.readContract({\n      address: deployment.stateView,\n      abi: v4StateViewAbi,\n      functionName: 'getSlot0',\n      args: [poolId],\n      blockNumber,\n    }),\n  ]);\n\n  const viewPoolManager = getAddress(viewPoolManagerResult);\n  if (viewPoolManager !== deployment.poolManager) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `V4 StateView is bound to ${viewPoolManager}, not configured PoolManager ${deployment.poolManager}.`\n    );\n  }\n\n  const sqrtPriceX96 = slot0[0];\n  const tick = asTick(slot0[1]);\n  const protocolFee = asUint24(slot0[2], 'protocolFee');\n  const lpFee = asUint24(slot0[3], 'lpFee');\n  if (sqrtPriceX96 === 0n) {\n    if (tick !== 0 || protocolFee !== 0 || lpFee !== 0) {\n      throw new PoolLifecycleError(\n        'DEPLOYMENT_MISMATCH',\n        'Uninitialized V4 StateView slot contains non-zero state.'\n      );\n    }\n    return {\n      schemaVersion: 1,\n      blockNumber,\n      deployment,\n      key,\n      poolId,\n      status: 'uninitialized',\n      sqrtPriceX96: 0n,\n      tick: 0,\n      protocolFee: 0,\n      lpFee: 0,\n    };\n  }\n\n  try {\n    validateSqrtPriceX96(sqrtPriceX96);\n  } catch (error) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      error instanceof Error ? error.message : 'StateView returned an invalid sqrtPriceX96.',\n      error\n    );\n  }\n  if (lpFee > V4_MAX_STATIC_FEE) {\n    throw new PoolLifecycleError('DEPLOYMENT_MISMATCH', 'StateView returned an invalid V4 LP fee.');\n  }\n  if (key.fee !== V4_DYNAMIC_FEE_FLAG && lpFee !== key.fee) {\n    throw new PoolLifecycleError(\n      'DEPLOYMENT_MISMATCH',\n      `Static V4 pool LP fee ${lpFee} does not match PoolKey fee ${key.fee}.`\n    );\n  }\n\n  return {\n    schemaVersion: 1,\n    blockNumber,\n    deployment,\n    key,\n    poolId,\n    status: 'initialized',\n    sqrtPriceX96,\n    tick,\n    protocolFee,\n    lpFee,\n  };\n}\n","import { encodeFunctionData } from 'viem';\nimport { v4PoolManagerAbi } from '../abis/v4.js';\nimport { validateV4LifecycleDeployment, type V4LifecycleDeployment } from '../capabilities/v4.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectV4Pool, type InspectV4PoolParams } from './inspect.js';\nimport {\n  assertV4InitialPrice,\n  canonicalizeV4PoolKey,\n  getV4PoolId,\n  v4PoolKeysEqual,\n} from './key.js';\nimport type {\n  PreparedV4InitializePoolAction,\n  V4InitialPrice,\n  V4InitializedPoolSnapshot,\n  V4PoolIdentity,\n  V4PoolKey,\n  V4PoolKeyInput,\n  V4UninitializedPoolSnapshot,\n} from './types.js';\n\nexport interface BuildV4InitializePoolTransactionParams {\n  readonly deployment: V4LifecycleDeployment;\n  readonly key: V4PoolKeyInput;\n  readonly initialPrice: V4InitialPrice;\n  readonly preflight: V4UninitializedPoolSnapshot;\n}\n\nexport interface PrepareV4InitializeParams extends Omit<InspectV4PoolParams, 'blockNumber'> {\n  readonly initialPrice: V4InitialPrice;\n  readonly blockNumber?: bigint;\n}\n\nexport type PrepareV4InitializeResult =\n  | {\n      readonly status: 'ready';\n      readonly snapshot: V4UninitializedPoolSnapshot;\n      readonly action: PreparedV4InitializePoolAction;\n    }\n  | {\n      readonly status: 'already-initialized-matching';\n      readonly snapshot: V4InitializedPoolSnapshot;\n      readonly action: null;\n    };\n\nfunction assertPreflightMatches(\n  deployment: V4LifecycleDeployment,\n  key: V4PoolKey,\n  preflight: V4UninitializedPoolSnapshot\n): void {\n  let matches = false;\n  try {\n    const snapshotDeployment = validateV4LifecycleDeployment(preflight?.deployment);\n    matches =\n      preflight.schemaVersion === 1 &&\n      preflight.status === 'uninitialized' &&\n      typeof preflight.blockNumber === 'bigint' &&\n      preflight.blockNumber >= 0n &&\n      snapshotDeployment === deployment &&\n      preflight.poolId === getV4PoolId(key) &&\n      v4PoolKeysEqual(preflight.key, key) &&\n      preflight.sqrtPriceX96 === 0n &&\n      preflight.tick === 0 &&\n      preflight.protocolFee === 0 &&\n      preflight.lpFee === 0;\n  } catch {\n    // A uniform state mismatch is safer at this action-building boundary.\n  }\n  if (!matches) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Direct V4 initialize requires a matching inspected, uninitialized PoolKey snapshot.'\n    );\n  }\n}\n\nfunction identity(deployment: V4LifecycleDeployment, key: V4PoolKey): V4PoolIdentity {\n  return {\n    family: deployment.family,\n    adapter: deployment.adapter,\n    version: deployment.version,\n    deploymentId: deployment.deploymentId,\n    chainId: deployment.chainId,\n    poolManager: deployment.poolManager,\n    stateView: deployment.stateView,\n    poolId: getV4PoolId(key),\n    key,\n  };\n}\n\n/** Build a direct PoolManager.initialize transaction without signing it. */\nexport function buildV4InitializePoolTransaction(\n  params: BuildV4InitializePoolTransactionParams\n): PreparedV4InitializePoolAction {\n  const deployment = validateV4LifecycleDeployment(params.deployment);\n  const key = canonicalizeV4PoolKey(params.key);\n  const initialPrice = assertV4InitialPrice(key, params.initialPrice);\n  if (!params.preflight || params.preflight.status !== 'uninitialized') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Direct V4 initialize requires an inspected, uninitialized PoolKey.'\n    );\n  }\n  assertPreflightMatches(deployment, key, params.preflight);\n\n  const poolId = getV4PoolId(key);\n  return {\n    schemaVersion: 1,\n    kind: 'v4-initialize',\n    protocol: deployment.protocol,\n    transaction: {\n      chainId: deployment.chainId,\n      to: deployment.poolManager,\n      data: encodeFunctionData({\n        abi: v4PoolManagerAbi,\n        functionName: 'initialize',\n        args: [key, initialPrice.sqrtPriceX96],\n      }),\n      value: 0n,\n    },\n    identity: identity(deployment, key),\n    expected: initialPrice,\n    preflight: {\n      blockNumber: params.preflight.blockNumber,\n      deploymentId: deployment.deploymentId,\n      status: 'uninitialized',\n      poolId,\n      sqrtPriceX96: 0n,\n    },\n  };\n}\n\n/** Inspect first, then return either a safe unsigned plan or a matching no-op. */\nexport async function prepareV4Initialize(\n  params: PrepareV4InitializeParams\n): Promise<PrepareV4InitializeResult> {\n  const snapshot = await inspectV4Pool(params);\n  const initialPrice = assertV4InitialPrice(snapshot.key, params.initialPrice);\n  if (snapshot.status === 'initialized') {\n    if (snapshot.sqrtPriceX96 === initialPrice.sqrtPriceX96) {\n      return { status: 'already-initialized-matching', snapshot, action: null };\n    }\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V4 pool ${snapshot.poolId} is already initialized at a different price.`\n    );\n  }\n\n  return {\n    status: 'ready',\n    snapshot,\n    action: buildV4InitializePoolTransaction({\n      deployment: snapshot.deployment,\n      key: {\n        currencyA: snapshot.key.currency0,\n        currencyB: snapshot.key.currency1,\n        fee: snapshot.key.fee,\n        tickSpacing: snapshot.key.tickSpacing,\n        hooks: snapshot.key.hooks,\n      },\n      initialPrice,\n      preflight: snapshot,\n    }),\n  };\n}\n","import { encodeFunctionData, getAddress, isAddress, type Address, type Hex } from 'viem';\nimport { v4PoolManagerAbi } from '../abis/v4.js';\nimport {\n  resolveV4LifecycleDeploymentById,\n  type V4LifecycleDeployment,\n} from '../capabilities/v4.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { deserializePreparedPoolAction } from '../types.js';\nimport { assertV4InitialPrice, getV4PoolId, validateV4PoolKey } from './key.js';\nimport type { PreparedV4PoolAction, V4PoolKey } from './types.js';\n\nfunction invalid(message: string, cause?: unknown): never {\n  throw new PoolLifecycleError('INVALID_INPUT', message, cause);\n}\n\nfunction record(value: unknown, label: string): Record<string, unknown> {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n    return invalid(`${label} must be an object.`);\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction address(value: unknown, label: string): Address {\n  if (typeof value !== 'string' || !isAddress(value, { strict: true })) {\n    return invalid(`${label} must be a valid EVM address.`);\n  }\n  return getAddress(value);\n}\n\nfunction poolId(value: unknown, label: string): Hex {\n  if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{64}$/.test(value)) {\n    return invalid(`${label} must be 32-byte hex.`);\n  }\n  return value as Hex;\n}\n\n/**\n * Fully validate a signer-boundary V4 action and return its canonical frozen\n * capability. The target, value, PoolId, and calldata are all re-derived.\n */\nexport function validatePreparedV4PoolAction(value: unknown): V4LifecycleDeployment {\n  const action = record(value, 'Prepared V4 pool action');\n  if (action.schemaVersion !== 1 || action.kind !== 'v4-initialize') {\n    return invalid('Prepared V4 pool action schema or kind is unsupported.');\n  }\n  if (typeof action.protocol !== 'string') {\n    return invalid('Prepared V4 pool action protocol must be a string.');\n  }\n\n  const transaction = record(action.transaction, 'V4 action transaction');\n  if (!Number.isSafeInteger(transaction.chainId) || Number(transaction.chainId) <= 0) {\n    return invalid('V4 transaction chainId must be a positive safe integer.');\n  }\n  const chainId = Number(transaction.chainId);\n  const to = address(transaction.to, 'V4 transaction target');\n  if (typeof transaction.data !== 'string' || !/^0x(?:[0-9a-fA-F]{2})+$/.test(transaction.data)) {\n    return invalid('V4 transaction calldata must be non-empty hex bytes.');\n  }\n  if (transaction.value !== 0n) {\n    return invalid('V4 PoolManager.initialize transactions must have zero value.');\n  }\n\n  const identity = record(action.identity, 'V4 action identity');\n  if (typeof identity.deploymentId !== 'string') {\n    return invalid('V4 action identity deploymentId must be a string.');\n  }\n  const deployment = resolveV4LifecycleDeploymentById(identity.deploymentId);\n  if (!deployment) {\n    throw new PoolLifecycleError(\n      'UNSUPPORTED_DEPLOYMENT',\n      `No V4 lifecycle deployment is configured for id ${identity.deploymentId}.`\n    );\n  }\n\n  const key = validateV4PoolKey(record(identity.key, 'V4 identity key') as unknown as V4PoolKey);\n  const expectedPoolId = getV4PoolId(key);\n  if (\n    action.protocol !== deployment.protocol ||\n    identity.family !== deployment.family ||\n    identity.adapter !== deployment.adapter ||\n    identity.version !== deployment.version ||\n    identity.deploymentId !== deployment.deploymentId ||\n    identity.chainId !== chainId ||\n    chainId !== deployment.chainId ||\n    address(identity.poolManager, 'V4 identity PoolManager') !== deployment.poolManager ||\n    address(identity.stateView, 'V4 identity StateView') !== deployment.stateView ||\n    poolId(identity.poolId, 'V4 identity PoolId').toLowerCase() !== expectedPoolId.toLowerCase()\n  ) {\n    return invalid('V4 action identity does not match the configured deployment and PoolKey.');\n  }\n\n  const expectationRecord = record(action.expected, 'V4 action expectation');\n  let expectation;\n  try {\n    expectation = assertV4InitialPrice(\n      key,\n      expectationRecord as unknown as PreparedV4PoolAction['expected']\n    );\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) throw error;\n    return invalid('V4 action expectation is invalid.', error);\n  }\n\n  const preflight = record(action.preflight, 'V4 action preflight');\n  if (\n    preflight.status !== 'uninitialized' ||\n    preflight.deploymentId !== deployment.deploymentId ||\n    typeof preflight.blockNumber !== 'bigint' ||\n    preflight.blockNumber < 0n ||\n    poolId(preflight.poolId, 'V4 preflight PoolId').toLowerCase() !==\n      expectedPoolId.toLowerCase() ||\n    preflight.sqrtPriceX96 !== 0n\n  ) {\n    return invalid('V4 action requires a matching uninitialized preflight.');\n  }\n\n  const expectedData = encodeFunctionData({\n    abi: v4PoolManagerAbi,\n    functionName: 'initialize',\n    args: [key, expectation.sqrtPriceX96],\n  });\n  if (\n    to !== deployment.poolManager ||\n    transaction.data.toLowerCase() !== expectedData.toLowerCase()\n  ) {\n    return invalid('V4 transaction does not match its identity and initialization expectation.');\n  }\n\n  return deployment;\n}\n\nexport function assertPreparedV4PoolAction(value: unknown): asserts value is PreparedV4PoolAction {\n  validatePreparedV4PoolAction(value);\n}\n\n/** Deserialize the shared versioned envelope, then perform adapter validation. */\nexport function deserializePreparedV4PoolAction(serialized: string): PreparedV4PoolAction {\n  let value: unknown;\n  try {\n    value = deserializePreparedPoolAction(serialized);\n  } catch (error) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      error instanceof Error ? error.message : 'Serialized V4 pool action is invalid.',\n      error\n    );\n  }\n  assertPreparedV4PoolAction(value);\n  return value;\n}\n","import { decodeFunctionResult, getAddress, isAddress, type Address, type PublicClient } from 'viem';\nimport { v4PoolManagerAbi } from '../abis/v4.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectV4Pool } from './inspect.js';\nimport { validatePreparedV4PoolAction } from './integrity.js';\nimport { V4_ZERO_ADDRESS } from './key.js';\nimport type { PreparedV4PoolAction, V4PoolActionSimulation } from './types.js';\n\nexport interface SimulateV4PoolActionParams {\n  readonly publicClient: PublicClient;\n  readonly account: Address;\n  readonly action: PreparedV4PoolAction;\n  /** Defaults to fresh state; historical simulation must be explicit. */\n  readonly blockNumber?: bigint;\n}\n\n/** Re-inspect, call, and estimate with the exact eventual sender and envelope. */\nexport async function simulateV4PoolAction(\n  params: SimulateV4PoolActionParams\n): Promise<V4PoolActionSimulation> {\n  if (\n    !isAddress(params.account, { strict: true }) ||\n    getAddress(params.account) === V4_ZERO_ADDRESS\n  ) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'V4 simulation account must be a valid non-zero EVM address.'\n    );\n  }\n\n  const deployment = validatePreparedV4PoolAction(params.action);\n  const blockNumber = params.blockNumber ?? (await params.publicClient.getBlockNumber());\n  if (typeof blockNumber !== 'bigint' || blockNumber < 0n) {\n    throw new PoolLifecycleError(\n      'INVALID_INPUT',\n      'V4 simulation blockNumber must be non-negative.'\n    );\n  }\n  const snapshot = await inspectV4Pool({\n    publicClient: params.publicClient,\n    deployment,\n    key: {\n      currencyA: params.action.identity.key.currency0,\n      currencyB: params.action.identity.key.currency1,\n      fee: params.action.identity.key.fee,\n      tickSpacing: params.action.identity.key.tickSpacing,\n      hooks: params.action.identity.key.hooks,\n    },\n    blockNumber,\n  });\n  if (snapshot.status !== 'uninitialized') {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      `V4 pool ${snapshot.poolId} is already initialized; refresh the action.`\n    );\n  }\n\n  const account = getAddress(params.account);\n  const baseRequest = {\n    account,\n    to: params.action.transaction.to,\n    data: params.action.transaction.data,\n    value: params.action.transaction.value,\n  } as const;\n  try {\n    const callResult = await params.publicClient.call({\n      ...baseRequest,\n      batch: false,\n      blockNumber,\n    });\n    if (!callResult.data || callResult.data === '0x') {\n      throw new PoolLifecycleError(\n        'SIMULATION_FAILED',\n        'V4 PoolManager.initialize simulation returned no initial tick.'\n      );\n    }\n    const returnedTick = Number(\n      decodeFunctionResult({\n        abi: v4PoolManagerAbi,\n        functionName: 'initialize',\n        data: callResult.data,\n      })\n    );\n    if (!Number.isSafeInteger(returnedTick) || returnedTick < -887_272 || returnedTick > 887_272) {\n      throw new PoolLifecycleError(\n        'SIMULATION_FAILED',\n        'V4 PoolManager.initialize returned an invalid tick.'\n      );\n    }\n    const gasEstimate = await params.publicClient.estimateGas({ ...baseRequest, blockNumber });\n    return {\n      transaction: params.action.transaction,\n      blockNumber,\n      returnData: callResult.data,\n      returnedTick,\n      gasEstimate,\n    };\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) throw error;\n    throw new PoolLifecycleError(\n      'SIMULATION_FAILED',\n      error instanceof Error ? error.message : 'V4 pool initialization simulation failed.',\n      error\n    );\n  }\n}\n","import {\n  decodeEventLog,\n  getAddress,\n  type Address,\n  type PublicClient,\n  type Transaction,\n  type TransactionReceipt,\n} from 'viem';\nimport { v4PoolManagerAbi } from '../abis/v4.js';\nimport { PoolLifecycleError } from '../errors.js';\nimport { inspectV4Pool } from './inspect.js';\nimport { validatePreparedV4PoolAction } from './integrity.js';\nimport type {\n  PreparedV4PoolAction,\n  V4InitializeEvidence,\n  V4PoolActionVerification,\n  V4PoolSnapshot,\n  V4ReceiptEvidence,\n} from './types.js';\n\nexport interface VerifyV4PoolActionParams {\n  readonly publicClient: PublicClient;\n  readonly action: PreparedV4PoolAction;\n  readonly receipt: TransactionReceipt;\n}\n\nfunction assertLogBelongsToReceipt(\n  log: TransactionReceipt['logs'][number],\n  receipt: TransactionReceipt\n): void {\n  if (\n    log.transactionHash !== receipt.transactionHash ||\n    log.blockHash !== receipt.blockHash ||\n    log.blockNumber !== receipt.blockNumber ||\n    log.transactionIndex !== receipt.transactionIndex ||\n    log.removed !== false\n  ) {\n    throw new PoolLifecycleError(\n      'POOL_STATE_MISMATCH',\n      'Decoded V4 lifecycle log does not belong to the canonical receipt.'\n    );\n  }\n}\n\n/** Decode transaction-attributed PoolManager Initialize evidence without RPC reads. */\nexport function decodeV4PoolActionReceipt(\n  action: PreparedV4PoolAction,\n  receipt: TransactionReceipt\n): V4ReceiptEvidence {\n  validatePreparedV4PoolAction(action);\n  const initializations: V4InitializeEvidence[] = [];\n  for (const log of receipt.logs) {\n    assertLogBelongsToReceipt(log, receipt);\n    if (getAddress(log.address) !== action.identity.poolManager) continue;\n\n    let decoded;\n    try {\n      decoded = decodeEventLog({\n        abi: v4PoolManagerAbi,\n        eventName: 'Initialize',\n        data: log.data,\n        topics: log.topics,\n      });\n    } catch {\n      continue;\n    }\n    if (decoded.args.id.toLowerCase() !== action.identity.poolId.toLowerCase()) continue;\n    initializations.push({\n      poolId: decoded.args.id,\n      currency0: getAddress(decoded.args.currency0),\n      currency1: getAddress(decoded.args.currency1),\n      fee: Number(decoded.args.fee),\n      tickSpacing: Number(decoded.args.tickSpacing),\n      hooks: getAddress(decoded.args.hooks),\n      sqrtPriceX96: decoded.args.sqrtPriceX96,\n      tick: Number(decoded.args.tick),\n      logIndex: log.logIndex,\n    });\n  }\n  return { receiptStatus: receipt.status, initializations };\n}\n\nfunction unavailable(\n  action: PreparedV4PoolAction,\n  evidence: V4ReceiptEvidence,\n  blockNumber: bigint,\n  error: unknown,\n  fallback: string\n): V4PoolActionVerification {\n  return {\n    verified: false,\n    outcome: 'verification-unavailable',\n    blockNumber,\n    identity: action.identity,\n    state: null,\n    evidence,\n    warnings: [error instanceof Error ? error.message : fallback],\n  };\n}\n\nfunction evaluate(\n  action: PreparedV4PoolAction,\n  evidence: V4ReceiptEvidence,\n  snapshot: V4PoolSnapshot | null,\n  blockNumber: bigint\n): V4PoolActionVerification {\n  if (evidence.receiptStatus === 'reverted') {\n    return {\n      verified: false,\n      outcome: 'reverted',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: [],\n    };\n  }\n  if (!snapshot || snapshot.status !== 'initialized') {\n    return {\n      verified: false,\n      outcome: 'not-initialized',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: [],\n    };\n  }\n  if (evidence.initializations.length !== 1) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: [\n        evidence.initializations.length === 0\n          ? 'Receipt contains no Initialize event for the expected V4 PoolId.'\n          : 'Receipt contains multiple Initialize events for the expected V4 PoolId.',\n      ],\n    };\n  }\n\n  const event = evidence.initializations[0];\n  const key = action.identity.key;\n  if (\n    event.currency0 !== key.currency0 ||\n    event.currency1 !== key.currency1 ||\n    event.fee !== key.fee ||\n    event.tickSpacing !== key.tickSpacing ||\n    event.hooks !== key.hooks ||\n    event.poolId.toLowerCase() !== action.identity.poolId.toLowerCase()\n  ) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Initialize evidence does not match the complete prepared V4 PoolKey.'],\n    };\n  }\n  if (event.sqrtPriceX96 !== action.expected.sqrtPriceX96) {\n    return {\n      verified: false,\n      outcome: 'already-initialized-different-price',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Initialize evidence contains a different initial price.'],\n    };\n  }\n  if (snapshot.poolId.toLowerCase() !== action.identity.poolId.toLowerCase()) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Receipt-block StateView state is for a different V4 PoolId.'],\n    };\n  }\n  if (snapshot.sqrtPriceX96 !== action.expected.sqrtPriceX96) {\n    return {\n      verified: true,\n      outcome: 'initialized-then-price-moved',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: ['V4 pool price moved after initialization in the receipt block.'],\n    };\n  }\n  if (snapshot.tick !== event.tick) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber,\n      identity: action.identity,\n      state: snapshot,\n      evidence,\n      warnings: ['Initialize tick does not match the unchanged receipt-block V4 state.'],\n    };\n  }\n  return {\n    verified: true,\n    outcome: 'created-and-initialized',\n    blockNumber,\n    identity: action.identity,\n    state: snapshot,\n    evidence,\n    warnings: [],\n  };\n}\n\n/** Verify exact calldata, canonical receipt/event, and receipt-block StateView state. */\nexport async function verifyV4PoolAction(\n  params: VerifyV4PoolActionParams\n): Promise<V4PoolActionVerification> {\n  const { publicClient, action, receipt } = params;\n  const deployment = validatePreparedV4PoolAction(action);\n  const emptyEvidence: V4ReceiptEvidence = {\n    receiptStatus: receipt.status,\n    initializations: [],\n  };\n\n  let activeChainId: number;\n  let transaction: Transaction;\n  let canonicalReceipt: TransactionReceipt;\n  try {\n    [activeChainId, transaction, canonicalReceipt] = await Promise.all([\n      publicClient.getChainId(),\n      publicClient.getTransaction({ hash: receipt.transactionHash }),\n      publicClient.getTransactionReceipt({ hash: receipt.transactionHash }),\n    ]);\n  } catch (error) {\n    return unavailable(\n      action,\n      emptyEvidence,\n      receipt.blockNumber,\n      error,\n      'Failed to load the canonical V4 transaction and receipt.'\n    );\n  }\n\n  const nullableAddressMatches = (left: Address | null, right: Address | null): boolean =>\n    left === null || right === null ? left === right : getAddress(left) === getAddress(right);\n  const target = action.identity.poolManager;\n  const suppliedMatchesCanonical =\n    receipt.transactionHash === canonicalReceipt.transactionHash &&\n    receipt.blockHash === canonicalReceipt.blockHash &&\n    receipt.blockNumber === canonicalReceipt.blockNumber &&\n    receipt.transactionIndex === canonicalReceipt.transactionIndex &&\n    receipt.status === canonicalReceipt.status &&\n    getAddress(receipt.from) === getAddress(canonicalReceipt.from) &&\n    nullableAddressMatches(receipt.to, canonicalReceipt.to);\n  const receiptDestinationMatches =\n    canonicalReceipt.to !== null && getAddress(canonicalReceipt.to) === target;\n  const transactionMatches =\n    transaction.hash === canonicalReceipt.transactionHash &&\n    transaction.to !== null &&\n    getAddress(transaction.to) === target &&\n    transaction.input.toLowerCase() === action.transaction.data.toLowerCase() &&\n    transaction.value === action.transaction.value &&\n    transaction.blockHash === canonicalReceipt.blockHash &&\n    transaction.blockNumber === canonicalReceipt.blockNumber &&\n    transaction.transactionIndex === canonicalReceipt.transactionIndex &&\n    getAddress(transaction.from) === getAddress(canonicalReceipt.from);\n\n  if (\n    activeChainId !== action.transaction.chainId ||\n    !suppliedMatchesCanonical ||\n    !receiptDestinationMatches ||\n    !transactionMatches\n  ) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence: emptyEvidence,\n      warnings: ['Receipt, transaction, client, or V4 deployment does not match the action.'],\n    };\n  }\n\n  let evidence: V4ReceiptEvidence;\n  try {\n    evidence = decodeV4PoolActionReceipt(action, canonicalReceipt);\n  } catch (error) {\n    return {\n      verified: false,\n      outcome: 'wrong-deployment',\n      blockNumber: canonicalReceipt.blockNumber,\n      identity: action.identity,\n      state: null,\n      evidence: emptyEvidence,\n      warnings: [error instanceof Error ? error.message : 'V4 receipt attribution failed.'],\n    };\n  }\n\n  let blockHashBefore: `0x${string}` | null;\n  try {\n    blockHashBefore = (\n      await publicClient.getBlock({\n        blockNumber: canonicalReceipt.blockNumber,\n        includeTransactions: false,\n      })\n    ).hash;\n  } catch (error) {\n    return unavailable(\n      action,\n      evidence,\n      canonicalReceipt.blockNumber,\n      error,\n      'Failed to load the V4 receipt block.'\n    );\n  }\n  if (blockHashBefore !== canonicalReceipt.blockHash) {\n    return unavailable(\n      action,\n      evidence,\n      canonicalReceipt.blockNumber,\n      new Error('Receipt block is no longer canonical; retry with a fresh receipt.'),\n      'Receipt block is no longer canonical.'\n    );\n  }\n\n  if (canonicalReceipt.status === 'reverted') {\n    return evaluate(action, evidence, null, canonicalReceipt.blockNumber);\n  }\n\n  let snapshot: V4PoolSnapshot;\n  try {\n    snapshot = await inspectV4Pool({\n      publicClient,\n      deployment,\n      key: {\n        currencyA: action.identity.key.currency0,\n        currencyB: action.identity.key.currency1,\n        fee: action.identity.key.fee,\n        tickSpacing: action.identity.key.tickSpacing,\n        hooks: action.identity.key.hooks,\n      },\n      blockNumber: canonicalReceipt.blockNumber,\n    });\n  } catch (error) {\n    if (error instanceof PoolLifecycleError) {\n      return {\n        verified: false,\n        outcome: 'wrong-deployment',\n        blockNumber: canonicalReceipt.blockNumber,\n        identity: action.identity,\n        state: null,\n        evidence,\n        warnings: [error.message],\n      };\n    }\n    return unavailable(\n      action,\n      evidence,\n      canonicalReceipt.blockNumber,\n      error,\n      'Failed to read receipt-block V4 state.'\n    );\n  }\n\n  try {\n    const blockAfter = await publicClient.getBlock({\n      blockNumber: canonicalReceipt.blockNumber,\n      includeTransactions: false,\n    });\n    if (blockAfter.hash !== canonicalReceipt.blockHash) {\n      return unavailable(\n        action,\n        evidence,\n        canonicalReceipt.blockNumber,\n        new Error('Receipt block changed during verification; retry with a fresh receipt.'),\n        'Receipt block changed during verification.'\n      );\n    }\n  } catch (error) {\n    return unavailable(\n      action,\n      evidence,\n      canonicalReceipt.blockNumber,\n      error,\n      'Failed to reconfirm the canonical V4 receipt block.'\n    );\n  }\n\n  return evaluate(action, evidence, snapshot, canonicalReceipt.blockNumber);\n}\n","export * from './utils/subgraph-types.js';\nexport { SubgraphVaultClient } from './utils/SubgraphVaultClient.js';\nexport * from './base/SmartRewards.js';\nexport * from './client.js';\nexport * from './types.js';\nexport * from './base/VaultClient.js';\nexport * from './base/SubgraphClient.js';\nexport * from './base/StakingClient.js';\nexport * from './base/FeeManagerClient.js';\nexport * from './base/vault/single-asset/index.js';\nexport * from './base/vault/execution-context.js';\nexport * from './pool-lifecycle/index.js';\nexport type { GraphQLTokenData, GraphQLPoolData } from './base/PoolClient.js';\nexport { PoolClient } from './base/PoolClient.js';\nexport * from './const/index.js';\n\n/**\n * @packageDocumentation\n *\n * The Steer Protocol SDK provides a comprehensive interface for interacting with Steer Protocol's smart contracts and services.\n *\n * ## Key Features\n *\n * - Smart Rewards Management\n * - Campaign Interactions\n * - Claim Management\n * - Multi-chain Support\n *\n * ## Quick Start\n *\n * ```typescript\n * import { createPublicClient, createWalletClient, http } from 'viem';\n * import { mainnet } from 'viem/chains';\n * import { SteerClient } from '@steerprotocol/sdk';\n *\n * // Create viem clients\n * const publicClient = createPublicClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n *\n * const walletClient = createWalletClient({\n *   chain: mainnet,\n *   transport: http()\n * });\n *\n * // Initialize the Steer client with both public and wallet clients\n * const steerClient = new SteerClient({\n *   environment: 'production',\n *   client: publicClient,\n *   walletClient: walletClient // Optional: Provide for write operations\n * });\n *\n * // Use vault operations (read-only if no wallet client)\n * const vaults = await steerClient.vaults.getLatestVaults();\n *\n * // Use rewards functionality (read-only if no wallet client)\n * const campaigns = await steerClient.rewards.getCampaigns(1);\n * const summary = await steerClient.rewards.getRewardSummary(userAddress, chainId);\n *\n * // Write operations (requires wallet client)\n * if (steerClient.rewards) {\n *   const tx = await steerClient.rewards.claimCampaignRewards(userAddress, chainId);\n * }\n * ```\n *\n * ## Smart Rewards\n *\n * The Smart Rewards functionality is accessible through the SteerClient's rewards property.\n * It provides comprehensive functionality for managing rewards:\n *\n * - View reward balances and claim history (read-only operations)\n * - Claim rewards across multiple campaigns (requires wallet client)\n * - Track historical claims\n * - Get comprehensive reward summaries\n *\n * For write operations like claiming rewards, make sure to provide a wallet client when initializing the SteerClient.\n *\n * See {@link SmartRewards} for detailed API documentation.\n */\n"],"mappings":";;;;;;AACA,IAAY,QAAL,yBAAA,OAAA;AAEL,OAAA,aAAA;AACA,OAAA,cAAA;AACA,OAAA,cAAA;AACA,OAAA,SAAA;AACA,OAAA,WAAA;AACA,OAAA,WAAA;AACA,OAAA,iBAAA;AACA,OAAA,UAAA;AACA,OAAA,eAAA;AACA,OAAA,kBAAA;AACA,OAAA,UAAA;AACA,OAAA,UAAA;AACA,OAAA,WAAA;AACA,OAAA,YAAA;AACA,OAAA,WAAA;AACA,OAAA,WAAA;AACA,OAAA,YAAA;AACA,OAAA,gBAAA;AACA,OAAA,YAAA;AACA,OAAA,gBAAA;AACA,OAAA,WAAA;AACA,OAAA,UAAA;AACA,OAAA,YAAA;AACA,OAAA,WAAA;AACA,OAAA,eAAA;AACA,OAAA,WAAA;AACA,OAAA,gBAAA;AACA,OAAA,WAAA;AACA,OAAA,qBAAA;AACA,OAAA,cAAA;AACA,OAAA,cAAA;AACA,OAAA,aAAA;AACA,OAAA,cAAA;AACA,OAAA,SAAA;AACA,OAAA,WAAA;AACA,OAAA,UAAA;AACA,OAAA,aAAA;AACA,OAAA,aAAA;AACA,OAAA,UAAA;AACA,OAAA,cAAA;AACA,OAAA,mBAAA;AACA,OAAA,UAAA;AACA,OAAA,UAAA;AACA,OAAA,UAAA;AACA,OAAA,YAAA;AACA,OAAA,WAAA;AACA,OAAA,UAAA;AACA,OAAA,YAAA;AACA,OAAA,cAAA;AACA,OAAA,eAAA;AACA,OAAA,eAAA;;KACD;AAED,MAAa,UAET;CACF,SAAS;CACT,UAAU;CACV,UAAU;CACV,KAAK;CACL,OAAO;CACP,OAAO;CACP,WAAW;CACX,aAAa;CACb,cAAc;CACd,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,YAAY;CACZ,OAAO;CACP,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,WAAW;CACX,OAAO;CACP,YAAY;CACZ,OAAO;CACP,iBAAiB;CACjB,UAAU;CACV,UAAU;CACV,SAAS;CACT,UAAU;CACV,KAAK;CACL,OAAO;CACP,MAAM;CACN,MAAM;CACN,SAAS;CACT,SAAS;CACT,UAAU;CACV,eAAe;CACf,MAAM;CACN,YAAY;CACZ,MAAM;CACN,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,UAAU;CACV,WAAW;CACX,WAAW;CACZ;AAGD,IAAY,WAAL,yBAAA,UAAA;AACL,UAAA,eAAA;AACA,UAAA,aAAA;AACA,UAAA,WAAA;AACA,UAAA,WAAA;AACA,UAAA,iBAAA;AACA,UAAA,UAAA;AACA,UAAA,WAAA;AACA,UAAA,aAAA;AACA,UAAA,eAAA;AACA,UAAA,oBAAA;AACA,UAAA,aAAA;AACA,UAAA,WAAA;AACA,UAAA,WAAA;AACA,UAAA,YAAA;AACA,UAAA,WAAA;AACA,UAAA,cAAA;AACA,UAAA,cAAA;AACA,UAAA,WAAA;AACA,UAAA,WAAA;AACA,UAAA,cAAA;AACA,UAAA,aAAA;AACA,UAAA,aAAA;AACA,UAAA,cAAA;AACA,UAAA,cAAA;AACA,UAAA,eAAA;AACA,UAAA,SAAA;AACA,UAAA,eAAA;AACA,UAAA,eAAA;AACA,UAAA,sBAAA;AACA,UAAA,WAAA;AACA,UAAA,aAAA;AACA,UAAA,YAAA;AACA,UAAA,cAAA;AACA,UAAA,WAAA;AACA,UAAA,aAAA;AACA,UAAA,YAAA;AACA,UAAA,YAAA;AACA,UAAA,gBAAA;AACA,UAAA,cAAA;AACA,UAAA,gBAAA;AACA,UAAA,gBAAA;AACA,UAAA,gBAAA;AACA,UAAA,aAAA;AACA,UAAA,UAAA;AACA,UAAA,uBAAA;AACA,UAAA,SAAA;AACA,UAAA,aAAA;AACA,UAAA,YAAA;AACA,UAAA,UAAA;AACA,UAAA,UAAA;AACA,UAAA,WAAA;AACA,UAAA,YAAA;AACA,UAAA,YAAA;AACA,UAAA,cAAA;AACA,UAAA,oBAAA;AACA,UAAA,eAAA;AACA,UAAA,eAAA;AACA,UAAA,iBAAA;AACA,UAAA,UAAA;AACA,UAAA,YAAA;AACA,UAAA,mBAAA;AACA,UAAA,eAAA;AACA,UAAA,YAAA;AACA,UAAA,oBAAA;AACA,UAAA,iBAAA;;KACD;AAED,IAAY,yBAAL,yBAAA,wBAAA;AACL,wBAAA,4BAAA;AACA,wBAAA,yBAAA;;KACD;AAED,IAAY,wBAAL,yBAAA,uBAAA;AACL,uBAAA,4BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,uBAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,iCAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,sBAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,6BAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,6BAAA;AACA,uBAAA,6BAAA;AACA,uBAAA,6BAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,uBAAA;AACA,uBAAA,oCAAA;AACA,uBAAA,sBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,0BAAA;AACA,uBAAA,uBAAA;AACA,uBAAA,uBAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,2BAAA;AACA,uBAAA,iCAAA;AACA,uBAAA,+BAAA;AACA,uBAAA,gCAAA;AACA,uBAAA,mCAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,+BAAA;AACA,uBAAA,iBAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,8BAAA;AACA,uBAAA,uBAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,+BAAA;AACA,uBAAA,gCAAA;AACA,uBAAA,oCAAA;AACA,uBAAA,yBAAA;AACA,uBAAA,iCAAA;AACA,uBAAA,4BAAA;AACA,uBAAA,mCAAA;AACA,uBAAA,sCAAA;AACA,uBAAA,wBAAA;AACA,uBAAA,oCAAA;;KACD;AAED,MAAa,sBAAsB;CACjC,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACvB;AAED,MAAa,mBAAmB;CAC9B,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACvB;AAED,MAAa,qBAAqB;CAChC,sBAAsB;CACtB,sBAAsB;CACtB,sBAAsB;CACvB;;;AC5RD,MAAa,OAAO;CAClB,kBAAkB;EAChB;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,wCAAwC;EACtC;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,cAAc;MACZ;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACF;KACD,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,YAAY;EACV;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,kBAAkB;EAChB;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc,CACZ;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT,EACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT,CACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,oBAAoB;EAClB;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,iBAAiB;EACf;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,cAAc;KACZ;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACD;MACE,gBAAgB;MAChB,QAAQ;MACR,QAAQ;MACT;KACF;IACD,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,UAAU;EACR;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,cAAc;MACZ;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACF;KACD,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,cAAc;MACZ;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACF;KACD,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACF;CACD,+CAA+C;EAC7C;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU,CACR;IACE,WAAW;IACX,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,aAAa;GACb,UAAU;IACR;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,WAAW;KACX,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW;IACT;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,cAAc;MACZ;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACD;OACE,gBAAgB;OAChB,QAAQ;OACR,QAAQ;OACT;MACF;KACD,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,CACR;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU,EAAE;GACZ,QAAQ;GACR,WAAW,EAAE;GACb,mBAAmB;GACnB,QAAQ;GACT;EACD;GACE,UAAU;IACR;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACD;KACE,gBAAgB;KAChB,QAAQ;KACR,QAAQ;KACT;IACF;GACD,QAAQ;GACR,WAAW,CACT;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,EACD;IACE,gBAAgB;IAChB,QAAQ;IACR,QAAQ;IACT,CACF;GACD,mBAAmB;GACnB,QAAQ;GACT;EACF;CACF;;;ACxlND,MAAa,oBAA8C;CACzD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,wCAAwC;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACrH,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACTD,MAAa,oBAA8C;CACzD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,wCAAwC;EAAE,SAAS;EAA8C,YAAY;EAAW;CACxH,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,UAAU;EACR,SAAS;EACT,YAAY;EAEb;CACD,sBAAsB;EACpB,SAAS;EACT,YAAY;EACb;CACF;;;AClBD,MAAa,0BAAoD;CAC/D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,sBAAgD;CAC3D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,qBAA+C;CAC1D,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,aAAa;EACX,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACF;;;ACrCD,MAAa,sBAAgD;CAC3D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,sBAAsB;EACpB,SAAS;EACT,YAAY;EACb;CACF;;;AChBD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,eAAyC;CACpD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,oBAA8C;CACzD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACdD,MAAa,qBAAqB;CAChC,kBAAkB;CAClB,YAAY;CACZ,kBAAkB;CAClB,oBAAoB;CACpB,iBAAiB;CAClB;;;ACAD,MAAa,eAAyC;CACpD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,sBAAsB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACrG,UAAU;EACR,SAAS;EACT,YAAY;EAEb;CACF;;;ACdD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,oBAA8C;CACzD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,sBAAgD;CAC3D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,oBAA8C;CACzD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRD,MAAa,0BAAoD;CAC/D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,mBAA6C;CACxD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,sBAAsB;EACpB,SAAS;EACT,YAAY;EAEb;CACF;;;ACjBD,MAAa,qBAA+C;CAC1D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,qBAA+C;CAC1D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,eAAyC;CACpD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAW;CAC5F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACpG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAO;CACxF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAChG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC7F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC7F;;;ACRD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAW;CAC5F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACpG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG;;;ACRD,MAAa,uBAAiD;CAC5D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAW;CAC5F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACpG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAW;CAClG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAW;CACjG;;;ACRD,MAAa,kBAA4C;CACvD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,mBAA6C;CACxD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,mBAA6C;CACxD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,eAAyC;CACpD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACzF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CACjG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC/F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAQ;CAC9F;;;ACRD,MAAa,kBAA4C;CACvD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,QAAQ;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtF,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,sBAAsB;EACpB,SAAS;EACT,YAAY;EACb;CACF;;;ACxCD,MAAa,gBAA0C;CACrD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,QAAQ;EACN,SAAS;EACT,YAAY;EACb;CACD,oBAAoB;EAClB,SAAS;EACT,YAAY;EACb;CACF;;;ACzCD,MAAa,qBAA+C;CAC1D,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,QAAQ;EACN,SAAS;EACT,YAAY;EACb;CACD,YAAY;EACV,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACF;;;ACzCD,MAAa,qBAA+C;CAC1D,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,cAAc;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC5F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,eAAe;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC7F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,UAAU;EAAE,SAAS;EAA8C,YAAY;EAAS;CACxF,mBAAmB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,QAAQ;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtF,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC3F;;;ACZD,MAAa,2BAAqD;CAChE,sBAAsB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACpG,wBAAwB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtG,wBAAwB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtG,uBAAuB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACrG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,qBAAqB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACnG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,iCAAiC;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/G,iCAAiC;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/G,mCAAmC;EAAE,SAAS;EAA8C,YAAY;EAAS;CACjH,qBAAqB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACnG,0BAA0B;EAAE,SAAS;EAA8C,YAAY;EAAS;CACxG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iCAAiC;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/G,uCAAuC;EAAE,SAAS;EAA8C,YAAY;EAAS;CACrH,wBAAwB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,+BAA+B;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC7G,UAAU;EAAE,SAAS;EAA8C,YAAY;EAAS;CACxF,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,6BAA6B;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC3G,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,iCAAiC;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/G,gCAAgC;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9G,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,wBAAwB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACtG,cAAc;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC5F,2BAA2B;EAAE,SAAS;EAA8C,YAAY;EAAS;CACzG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CACjG;;;AChCD,MAAa,gBAA0C;CACrD,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,UAAU;EAAE,SAAS;EAA8C,YAAY;EAAU;CACzF,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,eAAe;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC9F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,cAAc;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC9F;;;ACRD,MAAa,yBAAmD;CAC9D,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F;;;ACRC,MAAa,sBAAgD;CAC3D,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAO;CACxF,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,qBAAqB;EAAE,SAAS;EAA8C,YAAY;EAAO;CACjG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC9F,UAAU;EAAE,SAAS;EAA8C,YAAY;EAAO;CACtF,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC7F,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC5F,cAAc;EAAE,SAAS;EAA8C,YAAY;EAAO;CAC3F;;;ACZD,MAAa,gBAA0C;CACrD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC1F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAClG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC/F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAChG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAS;CAC9F,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,sBAAsB;EACpB,SAAS;EACT,YAAY;EACb;CACF;;;AChBD,MAAa,iBAA2C;CACtD,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,oBAAoB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACnG,iBAAiB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG,kBAAkB;EAAE,SAAS;EAA8C,YAAY;EAAU;CACjG,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAChG;;;ACRH,MAAa,kBAA4C;CACvD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,sBAAsB;EACpB,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACF;;;ACzCD,MAAa,oBAA8C;CACzD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,cAAc;EACZ,SAAS;EACT,YAAY;EACb;CACD,kBAAkB;EAChB,SAAS;EACT,YAAY;EACb;CACD,eAAe;EACb,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CACD,UAAU;EACR,SAAS;EACT,YAAY;EACb;CACD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACb;CACD,gBAAgB;EACd,SAAS;EACT,YAAY;EACb;CAED,gBAAgB;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC/F,QAAQ;EAAE,SAAS;EAA8C,YAAY;EAAU;CACvF,YAAY;EAAE,SAAS;EAA8C,YAAY;EAAU;CAC3F,oBAAoB;EAClB,SAAS;EACT,YAAY;EACb;CACF;;;ACzCD,MAAa,+BAAqE;CAChF,IAAI,EAAE,SAAS,8CAA8C;CAC7D,IAAI,EAAE,SAAS,8CAA8C;CAC7D,IAAI,EAAE,SAAS,8CAA8C;CAC7D,KAAK,EAAE,SAAS,8CAA8C;CAC9D,KAAK,EAAE,SAAS,8CAA8C;CAC9D,KAAK,EAAE,SAAS,8CAA8C;CAC9D,MAAM,EAAE,SAAS,8CAA8C;CAC/D,MAAM,EAAE,SAAS,8CAA8C;CAC/D,MAAM,EAAE,SAAS,8CAA8C;CAC/D,MAAM,EAAE,SAAS,8CAA8C;CAC/D,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAO,EAAE,SAAS,8CAA8C;CAChE,OAAQ,EAAE,SAAS,8CAA8C;CACjE,QAAQ,EAAE,SAAS,8CAA8C;CAClE;;;ACgED,MAAa,WAAqB;EAE/B,MAAM,UAAU;EACf,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,oBAAoB;EACpB,SAAS,QAAQ;EACjB,GAAI;EACJ,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACD,iBAAiB;EAClB;EACA,MAAM,WAAW;EAChB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,oBAAoB;EACpB,iBAAiB;EAClB;EACA,MAAM,WAAW;EAChB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EACjB,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACF;EACA,MAAM,MAAM;EACX,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,YAAY;EACjB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EAEA,MAAM,eAAe;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EACjB,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACD,GAAI;EACL;EAEA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACD,GAAI;EACJ,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,SAAS;EACd,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,SAAS;EACd,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,SAAS;EACd,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,aAAa;EAClB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,OAAO;EACZ,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACD,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,SAAS;EACd,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,YAAY;EACjB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,WAAW;EAChB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,YAAY;GACV,SAAS;GACT,YAAY;GACb;EACD,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,cAAc;EACnB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAElB;EACA,MAAM,aAAa;EAClB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,aAAa;EAClB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,QAAQ;EACb,oBAAoB;EAEpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,kBAAkB;EACvB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,WAAW;EAChB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,WAAW;EAChB,oBAAoB;EACpB,SAAS;EAET,MAAM,MAAM;EACZ,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,UAAU;EACf,SAAS;EACT,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,MAAM;EACX,oBAAoB;EAEpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,QAAQ;EACb,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,OAAO;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,MAAM,MAAM;EAEZ,SAAS;EACT,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,UAAU;EACf,oBAAoB;EACpB,SAAS;EACT,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACJ,MAAM,MAAM;EACb;EACA,MAAM,UAAU;EACf,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EAEJ,SAAS;EACT,MAAM,MAAM;EACb;EACA,MAAM,OAAO;EACZ,SAAS,QAAQ;EACjB,oBAAoB;EACpB,SAAS;EACT,MAAM,MAAM;EACZ,mBAAmB;EACnB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,WAAW;EAChB,SAAS,QAAQ;EACjB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,iBAAiB;EACjB,GAAI;EAEL;EACA,MAAM,gBAAgB;EACrB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,GAAI;EACJ,SAAS,QAAQ;EACjB,iBAAiB;EAClB;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,SAAS;EACd,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,QAAQ;EACb,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,OAAO;EACZ,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,SAAS;EACd,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,WAAW;EAChB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,YAAY;EACjB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;EACA,MAAM,YAAY;EACjB,SAAS;EACT,MAAM,MAAM;EACZ,oBAAoB;EACpB,mBAAmB;EACnB,SAAS,QAAQ;EACjB,iBAAiB;EACjB,GAAI;EACL;CACF;AAED,KAAK,MAAM,WAAW,OAAO,OAAO,SAAS,EAAqB;CAChE,MAAM,uBAAuB,6BAA6B,QAAQ;AAClE,KAAI,qBACF,SAAQ,aAAa;;;;;;;;;;;;;AAgBzB,SAAgB,2CACd,SACA,cACoB;CACpB,MAAM,UAAU,OAAO,OAAO,SAAS,CAAC,MACrC,QAA+B,IAAsB,YAAY,QACnE;AACD,KAAI,WAAW,gBAAgB,QAE7B,QADiB,QAAQ,eACR;;AAMrB,SAAgB,oBAAoB,SAA4C;AAC9E,QAAO,OAAO,OAAO,SAAS,CAAC,MAC5B,QAA+B,IAAsB,YAAY,QACnE;;;;;;;;;;;;AAcH,SAAgB,uBAAuB,SAAuC;CAC5E,MAAM,eAAe;CACrB,MAAM,UAAU,OAAO,OAAO,SAAS,CAAC,MACrC,QAA+B,IAAsB,YAAY,QACnE;AACD,KAAI,WAAW,gBAAgB,QAC7B,QAAO,QAAQ;;;;;;;;;;;;;AAgBnB,SAAgB,cAAc,SAAoC;AAIhE,QAHgB,OAAO,OAAO,SAAS,CAAC,MACrC,QAA+B,IAAsB,YAAY,QACnE,EACe;;;;;;;;;;;;;AAclB,SAAgB,cAAc,WAAsC;AAElE,QADgB,SAAS,YACT;;AAIlB,SAAgB,8BAA8B,SAAiB;AAG7D,QAFwB;EAAC,QAAQ;EAAS,QAAQ;EAAU,QAAQ;EAAM,QAAQ;EAAU,QAAQ;EAAQ,QAAQ;EAAM,QAAQ;EAAM,QAAQ;EAAS,QAAQ;EAAO,CAEjJ,QAAQ,QAAQ,GAAG;;;;;;;AC9oB5C,IAAY,UAAL,yBAAA,SAAA;AACL,SAAA,QAAA,eAAA,KAAA;AACA,SAAA,QAAA,aAAA,KAAA;AACA,SAAA,QAAA,wBAAA,KAAA;AACA,SAAA,QAAA,iBAAA,KAAA;AACA,SAAA,QAAA,qBAAA,KAAA;AACA,SAAA,QAAA,eAAA,KAAA;;KAED;;;;;;ACRD,IAAY,kBAAL,yBAAA,iBAAA;AACL,iBAAA,WAAA;AACA,iBAAA,aAAA;AACA,iBAAA,aAAA;AACA,iBAAA,eAAA;AACA,iBAAA,iBAAA;AACA,iBAAA,cAAA;AACA,iBAAA,cAAA;AACA,iBAAA,eAAA;AACA,iBAAA,WAAA;AACA,iBAAA,aAAA;;KACD;;;;;;;;;;;;;AAcD,SAAgB,uBAAuB,UAAkE;AACvG,KAAI,CAAC,YAAY,OAAO,aAAa,SACnC,QAAO;CAGT,MAAM,qBAAqB,OAAO,OAAO,gBAAgB,CAAC,MACvD,UAAU,MAAM,aAAa,KAAK,SAAS,aAAa,CAC1D;AACD,QAAO,QAAQ,mBAAmB;;;;;;;;;;;;;;AAepC,SAAgB,kBAAkB,UAAmC;CACnE,MAAM,qBAAqB,OAAO,OAAO,gBAAgB,CAAC,MACvD,UAAU,MAAM,aAAa,KAAK,SAAS,aAAa,CAC1D;AACD,KAAI,CAAC,sBAAsB,CAAC,uBAAuB,mBAAmB,CACpE,OAAM,IAAI,MAAM,qBAAqB,WAAW;AAElD,QAAO;;;;;AAQT,MAAa,oBAAoB;CAC/B,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACV;AAED,MAAa,mBAAmB,CAAC,SAAS,QAAQ,SAAS,SAAS;;;;AAKpE,MAAa,gCAAgC,CAAC,SAAS,SAAS,SAAS,SAAS;;;;AAKlF,MAAa,sBAAsB,CAAC,SAAS,UAAU;;;;AAKvD,MAAa,6BAA6B;CACxC,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACV;AAED,MAAa,sBAAsB;CAAC,SAAS;CAAW,SAAS;CAAa,SAAS;CAAQ,SAAS;CAAY;AAEpH,MAAa,mCAAmC;CAC9C,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACV;;;;AAMD,MAAM,kBAAkB,CAAC,SAAS,QAAQ;;;;;;;AAQ1C,MAAa,qBAAqB,aAAgC;AAChE,QAAO,kBAAkB,SAAS,SAAS;;;;;;;;AAU7C,MAAa,oBAAoB,aAAgC;AAC/D,QAAO,iBAAiB,SAAS,SAAS;;;;;;;;AAS5C,MAAa,qBAAqB,aAAgC;AAChE,QAAO,gBAAgB,SAAS,SAAS;;;;;;;;AAS3C,MAAa,8BAA8B,aAAgC;AACzE,QAAO,8BAA8B,SAAS,SAAS;;;;;;;;AASzD,MAAa,6BAA6B,aAAgC;AACxE,QAAO,2BAA2B,SAAS,SAAS;;;;;;;;AAUtD,MAAa,uBAAuB,aAAgC;AAClE,QAAO,oBAAoB,SAAS,SAAS;;AAI/C,MAAa,oBAAoB,aAAyC;AACtE,QAAO,oBAAoB,SAAS,SAAS;;AAGjD,MAAa,+BAA+B,aAAyC;AACnF,QAAO,iCAAiC,SAAS,SAAS;;AAK5D,MAAa,2BAA2B,YAA+B;AAErE,KAAI,YAAY,QAAQ,QACtB,QAAO,SAAS;AAGlB,KAAI,YAAY,QAAQ,mBACtB,QAAO,SAAS;AAGlB,KAAI,YAAY,QAAQ,gBACtB,QAAO,SAAS;AAGlB,KAAI,YAAY,QAAQ,UACtB,QAAO,SAAS;AAGlB,KAAI,YAAY,QAAQ,UACtB,QAAO,SAAS;AAGlB,OAAM,MAAM,0BAA0B;;;;;;;AC5NxC,MAAa,uBAAuB;;;;;;AAQpC,MAAM,yBACJ;AAEF,MAAM,sBAAsB,UAA0B,GAAG,uBAAuB,GAAG;AAEnF,MAAa,sBAET;EACD,MAAM,UACL;EACD,MAAM,MACL;EACD,MAAM,WACL;EACD,MAAM,WACL;EACD,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,cACL,mBAAmB,cAAc;EAClC,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,OACL;EACD,MAAM,YACL;EACD,MAAM,eACL,mBAAmB,QAAQ;EAC5B,MAAM,OACL;EACD,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,QACL;EACD,MAAM,SACL,mBAAmB,SAAS;EAC7B,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,SACL,mBAAmB,SAAS;EAC7B,MAAM,aACL;EACD,MAAM,SACL,mBAAmB,SAAS;EAC7B,MAAM,aACL,mBAAmB,aAAa;EACjC,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,SACL,mBAAmB,SAAS;EAC7B,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,YACL;EACD,MAAM,aACL,mBAAmB,aAAa;EACjC,MAAM,QACL;EACD,MAAM,kBACL,mBAAmB,aAAa;EACjC,MAAM,WACL,mBAAmB,WAAW;EAC/B,MAAM,WACL,mBAAmB,WAAW;EAC/B,MAAM,UACL,mBAAmB,UAAU;EAC9B,MAAM,WACL,mBAAmB,WAAW;EAC/B,MAAM,MACL,mBAAmB,MAAM;EAC1B,MAAM,QACL;EACD,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,UACL;EACD,MAAM,UACL,mBAAmB,UAAU;EAC9B,MAAM,OACL;EACD,MAAM,WACL;EACD,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,gBACL,mBAAmB,gBAAgB;EACpC,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,SACL;EACD,MAAM,QACL,mBAAmB,QAAQ;EAC5B,MAAM,OACL,mBAAmB,OAAO;EAC3B,MAAM,SACL,mBAAmB,SAAS;EAC7B,MAAM,WACL;EACD,MAAM,YACL;EACD,MAAM,YACL;CACH;;;;;;;;;;;;AAeD,SAAgB,wBAAwB,SAAqC;CAE3E,MAAM,CAAC,aAAa,OAAO,QAAQ,QAAQ,CAAC,MAAM,GAAG,QAAQ,OAAO,GAAG,KAAK,QAAQ,IAAI,EAAE;AAC1F,KAAI,CAAC,UAAW,QAAO,KAAA;CAGvB,MAAM,QAAQ,MAAM;AACpB,KAAI,CAAC,MAAO,QAAO,KAAA;AAGnB,QAAO,oBAAoB;;;;ACtK7B,MAAa,0BAA0B,YAAoB,gBAAyB,WAAmB;AACnG,QAAO,qDAAqD,OAAO,GAAG,iBAAiB,gBAAgB,YAAY,MAAM;;;;;;;ACE7H,MAAa,WAAW,EACtB,IAAI;CACF,YAAY;CACZ,aAAa;CACd,EAMF;;;;;;;AAQD,SAAgB,UACd,aACA,UAAiC,MACzB;AACR,QAAO,SAAS,SAAS;;;;ACzB3B,MAAa,WAAW;CACtB;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACF;;;AC/ND,MAAa,YAAY;CACvB;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,UAAU;EACV,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,MAAM;GACP,CACF;EACD,SAAS;EACT,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACF;;;ACzVD,MAAa,aAAa;CACxB;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACF;;;ACzTD,MAAa,wBAAwB;CACjC;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AAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ;GACN;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,SAAS;IACT,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,WAAW;EACX,QAAQ,CACN;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,SAAS;GACT,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,YAAY,CACV;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP,EACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP,CACF;GACD,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,EAAE;EACV,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ;GACN;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACD;IACE,cAAc;IACd,MAAM;IACN,MAAM;IACP;GACF;EACD,MAAM;EACN,SAAS,EAAE;EACX,iBAAiB;EACjB,MAAM;EACP;CACD;EACE,QAAQ,CACN;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,EACD;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,MAAM;EACN,SAAS,CACP;GACE,cAAc;GACd,MAAM;GACN,MAAM;GACP,CACF;EACD,iBAAiB;EACjB,MAAM;EACP;CACF;;;AC/pBD,MAAa,iBAAiB,CAC5B;CACE,QAAQ,CACN;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,MAAM;CACN,SAAS,CACP;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,iBAAiB;CACjB,MAAM;CACP,EACD;CACE,QAAQ,CACN;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,MAAM;CACN,SAAS,CACP;EACE,cAAc;EACd,MAAM;EACN,MAAM;EACP,CACF;CACD,iBAAiB;CACjB,MAAM;CACP,CACF;;;ACnCD,MAAa,wBAAsC;CACjD,gBAAgB,sBAAsB;CACtC,UAAU;GACP,MAAM,QACL;GACD,MAAM,aACL;EACH;CACD,gBAAgB;GACb,MAAM,QAAQ;GACd,MAAM,aAAa;EACrB;CACD,iBAAiB;GACd,MAAM,QAAQ;GACd,MAAM,aAAa;EACrB;CACF;;;AChBD,MAAa,wBAAsC;CACjD,gBAAgB,sBAAsB;CACtC,UAAU,GACP,MAAM,OACL,kGACH;CACD,gBAAgB,GACb,MAAM,OAAO,8CACf;CACD,iBAAiB,GACd,MAAM,OAAO,8CACf;CACF;;;ACZD,MAAa,qBAAmC;CAC9C,gBAAgB,sBAAsB;CACtC,UAAU,GACP,MAAM,O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"}