solana-meme-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +160 -0
  2. package/dist/batch-executor/accounts.d.ts +141 -0
  3. package/dist/batch-executor/accounts.d.ts.map +1 -0
  4. package/dist/batch-executor/accounts.js +98 -0
  5. package/dist/batch-executor/accounts.js.map +1 -0
  6. package/dist/batch-executor/batch-executor.d.ts +27 -0
  7. package/dist/batch-executor/batch-executor.d.ts.map +1 -0
  8. package/dist/batch-executor/batch-executor.js +286 -0
  9. package/dist/batch-executor/batch-executor.js.map +1 -0
  10. package/dist/batch-executor/index.d.ts +4 -0
  11. package/dist/batch-executor/index.d.ts.map +1 -0
  12. package/dist/batch-executor/index.js +6 -0
  13. package/dist/batch-executor/index.js.map +1 -0
  14. package/dist/batch-executor/types.d.ts +87 -0
  15. package/dist/batch-executor/types.d.ts.map +1 -0
  16. package/dist/batch-executor/types.js +42 -0
  17. package/dist/batch-executor/types.js.map +1 -0
  18. package/dist/constants.d.ts +151 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/constants.js +189 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/dex/blockrazor/client.d.ts +52 -0
  23. package/dist/dex/blockrazor/client.d.ts.map +1 -0
  24. package/dist/dex/blockrazor/client.js +97 -0
  25. package/dist/dex/blockrazor/client.js.map +1 -0
  26. package/dist/dex/blockrazor/constants.d.ts +35 -0
  27. package/dist/dex/blockrazor/constants.d.ts.map +1 -0
  28. package/dist/dex/blockrazor/constants.js +56 -0
  29. package/dist/dex/blockrazor/constants.js.map +1 -0
  30. package/dist/dex/blockrazor/geyser.d.ts +129 -0
  31. package/dist/dex/blockrazor/geyser.d.ts.map +1 -0
  32. package/dist/dex/blockrazor/geyser.js +531 -0
  33. package/dist/dex/blockrazor/geyser.js.map +1 -0
  34. package/dist/dex/blockrazor/index.d.ts +19 -0
  35. package/dist/dex/blockrazor/index.d.ts.map +1 -0
  36. package/dist/dex/blockrazor/index.js +24 -0
  37. package/dist/dex/blockrazor/index.js.map +1 -0
  38. package/dist/dex/blockrazor/send.d.ts +136 -0
  39. package/dist/dex/blockrazor/send.d.ts.map +1 -0
  40. package/dist/dex/blockrazor/send.js +255 -0
  41. package/dist/dex/blockrazor/send.js.map +1 -0
  42. package/dist/dex/blockrazor/types.d.ts +192 -0
  43. package/dist/dex/blockrazor/types.d.ts.map +1 -0
  44. package/dist/dex/blockrazor/types.js +6 -0
  45. package/dist/dex/blockrazor/types.js.map +1 -0
  46. package/dist/dex/index.d.ts +11 -0
  47. package/dist/dex/index.d.ts.map +1 -0
  48. package/dist/dex/index.js +17 -0
  49. package/dist/dex/index.js.map +1 -0
  50. package/dist/dex/jup/client.d.ts +34 -0
  51. package/dist/dex/jup/client.d.ts.map +1 -0
  52. package/dist/dex/jup/client.js +111 -0
  53. package/dist/dex/jup/client.js.map +1 -0
  54. package/dist/dex/jup/index.d.ts +17 -0
  55. package/dist/dex/jup/index.d.ts.map +1 -0
  56. package/dist/dex/jup/index.js +149 -0
  57. package/dist/dex/jup/index.js.map +1 -0
  58. package/dist/dex/jup/legacy.d.ts +624 -0
  59. package/dist/dex/jup/legacy.d.ts.map +1 -0
  60. package/dist/dex/jup/legacy.js +417 -0
  61. package/dist/dex/jup/legacy.js.map +1 -0
  62. package/dist/dex/jup/lend.d.ts +641 -0
  63. package/dist/dex/jup/lend.d.ts.map +1 -0
  64. package/dist/dex/jup/lend.js +604 -0
  65. package/dist/dex/jup/lend.js.map +1 -0
  66. package/dist/dex/jup/portfolio.d.ts +363 -0
  67. package/dist/dex/jup/portfolio.d.ts.map +1 -0
  68. package/dist/dex/jup/portfolio.js +368 -0
  69. package/dist/dex/jup/portfolio.js.map +1 -0
  70. package/dist/dex/jup/price.d.ts +174 -0
  71. package/dist/dex/jup/price.d.ts.map +1 -0
  72. package/dist/dex/jup/price.js +226 -0
  73. package/dist/dex/jup/price.js.map +1 -0
  74. package/dist/dex/jup/recurring.d.ts +438 -0
  75. package/dist/dex/jup/recurring.d.ts.map +1 -0
  76. package/dist/dex/jup/recurring.js +321 -0
  77. package/dist/dex/jup/recurring.js.map +1 -0
  78. package/dist/dex/jup/send.d.ts +283 -0
  79. package/dist/dex/jup/send.d.ts.map +1 -0
  80. package/dist/dex/jup/send.js +296 -0
  81. package/dist/dex/jup/send.js.map +1 -0
  82. package/dist/dex/jup/studio.d.ts +458 -0
  83. package/dist/dex/jup/studio.d.ts.map +1 -0
  84. package/dist/dex/jup/studio.js +489 -0
  85. package/dist/dex/jup/studio.js.map +1 -0
  86. package/dist/dex/jup/tokens.d.ts +768 -0
  87. package/dist/dex/jup/tokens.d.ts.map +1 -0
  88. package/dist/dex/jup/tokens.js +698 -0
  89. package/dist/dex/jup/tokens.js.map +1 -0
  90. package/dist/dex/jup/trigger.d.ts +512 -0
  91. package/dist/dex/jup/trigger.d.ts.map +1 -0
  92. package/dist/dex/jup/trigger.js +398 -0
  93. package/dist/dex/jup/trigger.js.map +1 -0
  94. package/dist/dex/jup/types.d.ts +434 -0
  95. package/dist/dex/jup/types.d.ts.map +1 -0
  96. package/dist/dex/jup/types.js +6 -0
  97. package/dist/dex/jup/types.js.map +1 -0
  98. package/dist/dex/jup/ultra.d.ts +647 -0
  99. package/dist/dex/jup/ultra.d.ts.map +1 -0
  100. package/dist/dex/jup/ultra.js +854 -0
  101. package/dist/dex/jup/ultra.js.map +1 -0
  102. package/dist/dex/meteora/client.d.ts +77 -0
  103. package/dist/dex/meteora/client.d.ts.map +1 -0
  104. package/dist/dex/meteora/client.js +220 -0
  105. package/dist/dex/meteora/client.js.map +1 -0
  106. package/dist/dex/meteora/damm-v1-bundle.d.ts +62 -0
  107. package/dist/dex/meteora/damm-v1-bundle.d.ts.map +1 -0
  108. package/dist/dex/meteora/damm-v1-bundle.js +113 -0
  109. package/dist/dex/meteora/damm-v1-bundle.js.map +1 -0
  110. package/dist/dex/meteora/damm-v1.d.ts +119 -0
  111. package/dist/dex/meteora/damm-v1.d.ts.map +1 -0
  112. package/dist/dex/meteora/damm-v1.js +316 -0
  113. package/dist/dex/meteora/damm-v1.js.map +1 -0
  114. package/dist/dex/meteora/damm-v2-bundle.d.ts +83 -0
  115. package/dist/dex/meteora/damm-v2-bundle.d.ts.map +1 -0
  116. package/dist/dex/meteora/damm-v2-bundle.js +243 -0
  117. package/dist/dex/meteora/damm-v2-bundle.js.map +1 -0
  118. package/dist/dex/meteora/damm-v2.d.ts +173 -0
  119. package/dist/dex/meteora/damm-v2.d.ts.map +1 -0
  120. package/dist/dex/meteora/damm-v2.js +633 -0
  121. package/dist/dex/meteora/damm-v2.js.map +1 -0
  122. package/dist/dex/meteora/dbc-bundle.d.ts +124 -0
  123. package/dist/dex/meteora/dbc-bundle.d.ts.map +1 -0
  124. package/dist/dex/meteora/dbc-bundle.js +305 -0
  125. package/dist/dex/meteora/dbc-bundle.js.map +1 -0
  126. package/dist/dex/meteora/dbc.d.ts +193 -0
  127. package/dist/dex/meteora/dbc.d.ts.map +1 -0
  128. package/dist/dex/meteora/dbc.js +620 -0
  129. package/dist/dex/meteora/dbc.js.map +1 -0
  130. package/dist/dex/meteora/dlmm-bundle.d.ts +40 -0
  131. package/dist/dex/meteora/dlmm-bundle.d.ts.map +1 -0
  132. package/dist/dex/meteora/dlmm-bundle.js +190 -0
  133. package/dist/dex/meteora/dlmm-bundle.js.map +1 -0
  134. package/dist/dex/meteora/dlmm.d.ts +158 -0
  135. package/dist/dex/meteora/dlmm.d.ts.map +1 -0
  136. package/dist/dex/meteora/dlmm.js +672 -0
  137. package/dist/dex/meteora/dlmm.js.map +1 -0
  138. package/dist/dex/meteora/index.d.ts +26 -0
  139. package/dist/dex/meteora/index.d.ts.map +1 -0
  140. package/dist/dex/meteora/index.js +66 -0
  141. package/dist/dex/meteora/index.js.map +1 -0
  142. package/dist/dex/meteora/types.d.ts +788 -0
  143. package/dist/dex/meteora/types.d.ts.map +1 -0
  144. package/dist/dex/meteora/types.js +111 -0
  145. package/dist/dex/meteora/types.js.map +1 -0
  146. package/dist/dex/orca/index.d.ts +11 -0
  147. package/dist/dex/orca/index.d.ts.map +1 -0
  148. package/dist/dex/orca/index.js +17 -0
  149. package/dist/dex/orca/index.js.map +1 -0
  150. package/dist/dex/orca/orca-bundle.d.ts +42 -0
  151. package/dist/dex/orca/orca-bundle.d.ts.map +1 -0
  152. package/dist/dex/orca/orca-bundle.js +174 -0
  153. package/dist/dex/orca/orca-bundle.js.map +1 -0
  154. package/dist/dex/orca/orca.d.ts +66 -0
  155. package/dist/dex/orca/orca.d.ts.map +1 -0
  156. package/dist/dex/orca/orca.js +475 -0
  157. package/dist/dex/orca/orca.js.map +1 -0
  158. package/dist/dex/orca/types.d.ts +264 -0
  159. package/dist/dex/orca/types.d.ts.map +1 -0
  160. package/dist/dex/orca/types.js +39 -0
  161. package/dist/dex/orca/types.js.map +1 -0
  162. package/dist/dex/orca/wavebreak-bundle.d.ts +35 -0
  163. package/dist/dex/orca/wavebreak-bundle.d.ts.map +1 -0
  164. package/dist/dex/orca/wavebreak-bundle.js +199 -0
  165. package/dist/dex/orca/wavebreak-bundle.js.map +1 -0
  166. package/dist/dex/orca/wavebreak-types.d.ts +228 -0
  167. package/dist/dex/orca/wavebreak-types.d.ts.map +1 -0
  168. package/dist/dex/orca/wavebreak-types.js +24 -0
  169. package/dist/dex/orca/wavebreak-types.js.map +1 -0
  170. package/dist/dex/orca/wavebreak.d.ts +79 -0
  171. package/dist/dex/orca/wavebreak.d.ts.map +1 -0
  172. package/dist/dex/orca/wavebreak.js +498 -0
  173. package/dist/dex/orca/wavebreak.js.map +1 -0
  174. package/dist/dex/pump/index.d.ts +10 -0
  175. package/dist/dex/pump/index.d.ts.map +1 -0
  176. package/dist/dex/pump/index.js +15 -0
  177. package/dist/dex/pump/index.js.map +1 -0
  178. package/dist/dex/pump/pump-bundle.d.ts +93 -0
  179. package/dist/dex/pump/pump-bundle.d.ts.map +1 -0
  180. package/dist/dex/pump/pump-bundle.js +384 -0
  181. package/dist/dex/pump/pump-bundle.js.map +1 -0
  182. package/dist/dex/pump/pump-swap-bundle.d.ts +104 -0
  183. package/dist/dex/pump/pump-swap-bundle.d.ts.map +1 -0
  184. package/dist/dex/pump/pump-swap-bundle.js +381 -0
  185. package/dist/dex/pump/pump-swap-bundle.js.map +1 -0
  186. package/dist/dex/pump/pump-swap.d.ts +47 -0
  187. package/dist/dex/pump/pump-swap.d.ts.map +1 -0
  188. package/dist/dex/pump/pump-swap.js +200 -0
  189. package/dist/dex/pump/pump-swap.js.map +1 -0
  190. package/dist/dex/pump/pump.d.ts +36 -0
  191. package/dist/dex/pump/pump.d.ts.map +1 -0
  192. package/dist/dex/pump/pump.js +353 -0
  193. package/dist/dex/pump/pump.js.map +1 -0
  194. package/dist/dex/pump/types.d.ts +216 -0
  195. package/dist/dex/pump/types.d.ts.map +1 -0
  196. package/dist/dex/pump/types.js +6 -0
  197. package/dist/dex/pump/types.js.map +1 -0
  198. package/dist/dex/raydium/index.d.ts +9 -0
  199. package/dist/dex/raydium/index.d.ts.map +1 -0
  200. package/dist/dex/raydium/index.js +13 -0
  201. package/dist/dex/raydium/index.js.map +1 -0
  202. package/dist/dex/raydium/launchlab.d.ts +69 -0
  203. package/dist/dex/raydium/launchlab.d.ts.map +1 -0
  204. package/dist/dex/raydium/launchlab.js +211 -0
  205. package/dist/dex/raydium/launchlab.js.map +1 -0
  206. package/dist/dex/raydium/raydium-bundle.d.ts +65 -0
  207. package/dist/dex/raydium/raydium-bundle.d.ts.map +1 -0
  208. package/dist/dex/raydium/raydium-bundle.js +325 -0
  209. package/dist/dex/raydium/raydium-bundle.js.map +1 -0
  210. package/dist/dex/raydium/raydium.d.ts +41 -0
  211. package/dist/dex/raydium/raydium.d.ts.map +1 -0
  212. package/dist/dex/raydium/raydium.js +367 -0
  213. package/dist/dex/raydium/raydium.js.map +1 -0
  214. package/dist/dex/raydium/types.d.ts +241 -0
  215. package/dist/dex/raydium/types.d.ts.map +1 -0
  216. package/dist/dex/raydium/types.js +6 -0
  217. package/dist/dex/raydium/types.js.map +1 -0
  218. package/dist/index.d.ts +13 -0
  219. package/dist/index.d.ts.map +1 -0
  220. package/dist/index.js +21 -0
  221. package/dist/index.js.map +1 -0
  222. package/dist/jito/bundle.d.ts +91 -0
  223. package/dist/jito/bundle.d.ts.map +1 -0
  224. package/dist/jito/bundle.js +267 -0
  225. package/dist/jito/bundle.js.map +1 -0
  226. package/dist/jito/index.d.ts +8 -0
  227. package/dist/jito/index.d.ts.map +1 -0
  228. package/dist/jito/index.js +8 -0
  229. package/dist/jito/index.js.map +1 -0
  230. package/dist/jito/tip.d.ts +52 -0
  231. package/dist/jito/tip.d.ts.map +1 -0
  232. package/dist/jito/tip.js +84 -0
  233. package/dist/jito/tip.js.map +1 -0
  234. package/dist/jito/types.d.ts +101 -0
  235. package/dist/jito/types.d.ts.map +1 -0
  236. package/dist/jito/types.js +6 -0
  237. package/dist/jito/types.js.map +1 -0
  238. package/dist/nozomi/client.d.ts +64 -0
  239. package/dist/nozomi/client.d.ts.map +1 -0
  240. package/dist/nozomi/client.js +228 -0
  241. package/dist/nozomi/client.js.map +1 -0
  242. package/dist/nozomi/index.d.ts +9 -0
  243. package/dist/nozomi/index.d.ts.map +1 -0
  244. package/dist/nozomi/index.js +9 -0
  245. package/dist/nozomi/index.js.map +1 -0
  246. package/dist/nozomi/tip.d.ts +51 -0
  247. package/dist/nozomi/tip.d.ts.map +1 -0
  248. package/dist/nozomi/tip.js +81 -0
  249. package/dist/nozomi/tip.js.map +1 -0
  250. package/dist/nozomi/types.d.ts +97 -0
  251. package/dist/nozomi/types.d.ts.map +1 -0
  252. package/dist/nozomi/types.js +6 -0
  253. package/dist/nozomi/types.js.map +1 -0
  254. package/dist/token/create-complete.d.ts +116 -0
  255. package/dist/token/create-complete.d.ts.map +1 -0
  256. package/dist/token/create-complete.js +236 -0
  257. package/dist/token/create-complete.js.map +1 -0
  258. package/dist/token/create-token.d.ts +58 -0
  259. package/dist/token/create-token.d.ts.map +1 -0
  260. package/dist/token/create-token.js +231 -0
  261. package/dist/token/create-token.js.map +1 -0
  262. package/dist/token/index.d.ts +10 -0
  263. package/dist/token/index.d.ts.map +1 -0
  264. package/dist/token/index.js +15 -0
  265. package/dist/token/index.js.map +1 -0
  266. package/dist/token/metadata-upload.d.ts +87 -0
  267. package/dist/token/metadata-upload.d.ts.map +1 -0
  268. package/dist/token/metadata-upload.js +176 -0
  269. package/dist/token/metadata-upload.js.map +1 -0
  270. package/dist/token/metadata.d.ts +93 -0
  271. package/dist/token/metadata.d.ts.map +1 -0
  272. package/dist/token/metadata.js +275 -0
  273. package/dist/token/metadata.js.map +1 -0
  274. package/dist/token/types.d.ts +154 -0
  275. package/dist/token/types.d.ts.map +1 -0
  276. package/dist/token/types.js +6 -0
  277. package/dist/token/types.js.map +1 -0
  278. package/dist/types.d.ts +177 -0
  279. package/dist/types.d.ts.map +1 -0
  280. package/dist/types.js +8 -0
  281. package/dist/types.js.map +1 -0
  282. package/dist/utils/alt.d.ts +58 -0
  283. package/dist/utils/alt.d.ts.map +1 -0
  284. package/dist/utils/alt.js +125 -0
  285. package/dist/utils/alt.js.map +1 -0
  286. package/dist/utils/balance.d.ts +161 -0
  287. package/dist/utils/balance.d.ts.map +1 -0
  288. package/dist/utils/balance.js +639 -0
  289. package/dist/utils/balance.js.map +1 -0
  290. package/dist/utils/batch-swap.d.ts +52 -0
  291. package/dist/utils/batch-swap.d.ts.map +1 -0
  292. package/dist/utils/batch-swap.js +286 -0
  293. package/dist/utils/batch-swap.js.map +1 -0
  294. package/dist/utils/batch-types.d.ts +90 -0
  295. package/dist/utils/batch-types.d.ts.map +1 -0
  296. package/dist/utils/batch-types.js +7 -0
  297. package/dist/utils/batch-types.js.map +1 -0
  298. package/dist/utils/connection.d.ts +79 -0
  299. package/dist/utils/connection.d.ts.map +1 -0
  300. package/dist/utils/connection.js +169 -0
  301. package/dist/utils/connection.js.map +1 -0
  302. package/dist/utils/index.d.ts +13 -0
  303. package/dist/utils/index.d.ts.map +1 -0
  304. package/dist/utils/index.js +14 -0
  305. package/dist/utils/index.js.map +1 -0
  306. package/dist/utils/lp-inspect.d.ts +81 -0
  307. package/dist/utils/lp-inspect.d.ts.map +1 -0
  308. package/dist/utils/lp-inspect.js +265 -0
  309. package/dist/utils/lp-inspect.js.map +1 -0
  310. package/dist/utils/transfer.d.ts +197 -0
  311. package/dist/utils/transfer.d.ts.map +1 -0
  312. package/dist/utils/transfer.js +308 -0
  313. package/dist/utils/transfer.js.map +1 -0
  314. package/dist/utils/wallet.d.ts +108 -0
  315. package/dist/utils/wallet.d.ts.map +1 -0
  316. package/dist/utils/wallet.js +211 -0
  317. package/dist/utils/wallet.js.map +1 -0
  318. package/package.json +92 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Batch Swap 实现
3
+ * 单交易 + ALT + 多钱包 Swap
4
+ * @module sol/utils/batch-swap
5
+ */
6
+ import { Connection } from '@solana/web3.js';
7
+ import type { AtomicBatchSwapParams, BatchSwapResult } from './batch-types.js';
8
+ /**
9
+ * 执行 Batch Swap (Pump.fun)
10
+ * 使用单交易 + ALT 实现多钱包原子性 Swap
11
+ *
12
+ * 返回两个交易,用户需要按顺序广播:
13
+ * 1. altCreateTx - ALT 创建交易
14
+ * 2. swapTx - 主 Swap 交易 (需等待 ALT 激活后再发送)
15
+ *
16
+ * @param connection Solana 连接
17
+ * @param params Batch Swap 参数
18
+ * @returns Batch Swap 结果 (包含两个交易)
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const result = await batchSwapPump(connection, {
23
+ * mint: 'TOKEN_MINT',
24
+ * isBuy: true,
25
+ * swaps: [
26
+ * { wallet: wallet1, solAmount: 100_000_000n }, // 0.1 SOL
27
+ * { wallet: wallet2, solAmount: 200_000_000n }, // 0.2 SOL
28
+ * ],
29
+ * slippageBps: 100,
30
+ * });
31
+ *
32
+ * if (result.success) {
33
+ * // 步骤 1: 发送 ALT 创建交易
34
+ * await connection.sendTransaction(result.altCreateTx!);
35
+ *
36
+ * // 步骤 2: 等待 ALT 激活 (约 1 slot)
37
+ * await waitForALTActivation(connection, result.altInfo!.publicKey);
38
+ *
39
+ * // 步骤 3: 发送 Swap 交易
40
+ * await connection.sendTransaction(result.swapTx!);
41
+ * }
42
+ * ```
43
+ */
44
+ export declare function batchSwapPump(connection: Connection, params: AtomicBatchSwapParams): Promise<BatchSwapResult>;
45
+ /**
46
+ * 快速 Batch Swap (不创建 ALT,仅适用于少量钱包)
47
+ * 适用于 3-5 个钱包的情况,不需要 ALT
48
+ *
49
+ * @returns 只返回 swapTx,无需 ALT 创建
50
+ */
51
+ export declare function quickBatchSwapPump(connection: Connection, params: AtomicBatchSwapParams): Promise<BatchSwapResult>;
52
+ //# sourceMappingURL=batch-swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-swap.d.ts","sourceRoot":"","sources":["../../src/utils/batch-swap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,UAAU,EAMb,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,KAAK,EACR,qBAAqB,EACrB,eAAe,EAGlB,MAAM,kBAAkB,CAAC;AA0I1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,aAAa,CAC/B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAoH1B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAgE1B"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Batch Swap 实现
3
+ * 单交易 + ALT + 多钱包 Swap
4
+ * @module sol/utils/batch-swap
5
+ */
6
+ import { PublicKey, ComputeBudgetProgram, } from '@solana/web3.js';
7
+ import BN from 'bn.js';
8
+ import { OnlinePumpSdk, PUMP_SDK, getBuyTokenAmountFromSolAmount, getSellSolAmountFromTokenAmount, } from '@pump-fun/pump-sdk';
9
+ import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
10
+ import { createAddressLookupTable, collectAddressesFromInstructions, buildVersionedTransaction, estimateTransactionSize, } from './alt.js';
11
+ import { NOZOMI_CONFIG } from '../constants.js';
12
+ import { buildNozomiTipInstruction, getRandomNozomiTipAccount } from '../nozomi/tip.js';
13
+ /**
14
+ * 构建单个 Pump Buy 的指令
15
+ */
16
+ async function buildPumpBuyInstructions(connection, mint, buyer, solAmount, slippageBps) {
17
+ const onlineSdk = new OnlinePumpSdk(connection);
18
+ const global = await onlineSdk.fetchGlobal();
19
+ const { bondingCurveAccountInfo, bondingCurve, associatedUserAccountInfo } = await onlineSdk.fetchBuyState(mint, buyer.publicKey);
20
+ const solAmountBN = new BN(solAmount.toString());
21
+ const tokenAmount = getBuyTokenAmountFromSolAmount({
22
+ global,
23
+ feeConfig: null,
24
+ mintSupply: bondingCurve.tokenTotalSupply,
25
+ bondingCurve,
26
+ amount: solAmountBN,
27
+ });
28
+ return PUMP_SDK.buyInstructions({
29
+ global,
30
+ bondingCurveAccountInfo,
31
+ bondingCurve,
32
+ associatedUserAccountInfo,
33
+ mint,
34
+ user: buyer.publicKey,
35
+ amount: tokenAmount,
36
+ solAmount: solAmountBN,
37
+ slippage: slippageBps / 100,
38
+ tokenProgram: TOKEN_PROGRAM_ID,
39
+ });
40
+ }
41
+ /**
42
+ * 构建单个 Pump Sell 的指令
43
+ */
44
+ async function buildPumpSellInstructions(connection, mint, seller, tokenAmount, slippageBps) {
45
+ const onlineSdk = new OnlinePumpSdk(connection);
46
+ const global = await onlineSdk.fetchGlobal();
47
+ const { bondingCurveAccountInfo, bondingCurve } = await onlineSdk.fetchSellState(mint, seller.publicKey);
48
+ const tokenAmountBN = new BN(tokenAmount.toString());
49
+ const solAmount = getSellSolAmountFromTokenAmount({
50
+ global,
51
+ feeConfig: null,
52
+ mintSupply: bondingCurve.tokenTotalSupply,
53
+ bondingCurve,
54
+ amount: tokenAmountBN,
55
+ });
56
+ return PUMP_SDK.sellInstructions({
57
+ global,
58
+ bondingCurveAccountInfo,
59
+ bondingCurve,
60
+ mint,
61
+ user: seller.publicKey,
62
+ amount: tokenAmountBN,
63
+ solAmount,
64
+ slippage: slippageBps / 100,
65
+ tokenProgram: TOKEN_PROGRAM_ID,
66
+ mayhemMode: false,
67
+ });
68
+ }
69
+ /**
70
+ * 批量构建 Swap 指令
71
+ */
72
+ async function buildBatchSwapInstructions(connection, params) {
73
+ const { mint, isBuy, swaps, slippageBps = 100 } = params;
74
+ const mintPubkey = new PublicKey(mint);
75
+ const allInstructions = [];
76
+ const signers = [];
77
+ // 并行获取所有钱包的买入指令
78
+ const instructionPromises = swaps.map(async (swap) => {
79
+ if (isBuy) {
80
+ if (!swap.solAmount) {
81
+ throw new Error('solAmount required for buy');
82
+ }
83
+ return {
84
+ instructions: await buildPumpBuyInstructions(connection, mintPubkey, swap.wallet, swap.solAmount, slippageBps),
85
+ signer: swap.wallet,
86
+ };
87
+ }
88
+ else {
89
+ if (!swap.tokenAmount) {
90
+ throw new Error('tokenAmount required for sell');
91
+ }
92
+ return {
93
+ instructions: await buildPumpSellInstructions(connection, mintPubkey, swap.wallet, swap.tokenAmount, slippageBps),
94
+ signer: swap.wallet,
95
+ };
96
+ }
97
+ });
98
+ const results = await Promise.all(instructionPromises);
99
+ for (const result of results) {
100
+ allInstructions.push(...result.instructions);
101
+ signers.push(result.signer);
102
+ }
103
+ return { instructions: allInstructions, signers };
104
+ }
105
+ /**
106
+ * 执行 Batch Swap (Pump.fun)
107
+ * 使用单交易 + ALT 实现多钱包原子性 Swap
108
+ *
109
+ * 返回两个交易,用户需要按顺序广播:
110
+ * 1. altCreateTx - ALT 创建交易
111
+ * 2. swapTx - 主 Swap 交易 (需等待 ALT 激活后再发送)
112
+ *
113
+ * @param connection Solana 连接
114
+ * @param params Batch Swap 参数
115
+ * @returns Batch Swap 结果 (包含两个交易)
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * const result = await batchSwapPump(connection, {
120
+ * mint: 'TOKEN_MINT',
121
+ * isBuy: true,
122
+ * swaps: [
123
+ * { wallet: wallet1, solAmount: 100_000_000n }, // 0.1 SOL
124
+ * { wallet: wallet2, solAmount: 200_000_000n }, // 0.2 SOL
125
+ * ],
126
+ * slippageBps: 100,
127
+ * });
128
+ *
129
+ * if (result.success) {
130
+ * // 步骤 1: 发送 ALT 创建交易
131
+ * await connection.sendTransaction(result.altCreateTx!);
132
+ *
133
+ * // 步骤 2: 等待 ALT 激活 (约 1 slot)
134
+ * await waitForALTActivation(connection, result.altInfo!.publicKey);
135
+ *
136
+ * // 步骤 3: 发送 Swap 交易
137
+ * await connection.sendTransaction(result.swapTx!);
138
+ * }
139
+ * ```
140
+ */
141
+ export async function batchSwapPump(connection, params) {
142
+ try {
143
+ const { swaps, useNozomi, nozomiTipLamports } = params;
144
+ if (swaps.length === 0) {
145
+ return { success: false, error: 'No swaps provided' };
146
+ }
147
+ if (swaps.length > 15) {
148
+ return {
149
+ success: false,
150
+ error: `Too many swaps (${swaps.length}). Max recommended: 15. Consider using multiple transactions.`
151
+ };
152
+ }
153
+ // 1. 构建所有 swap 指令
154
+ const { instructions: swapInstructions, signers } = await buildBatchSwapInstructions(connection, params);
155
+ // 2. 添加 Compute Budget
156
+ const computeBudgetIxs = [
157
+ ComputeBudgetProgram.setComputeUnitLimit({
158
+ units: 200000 * swaps.length, // 每个 swap ~200k CU
159
+ }),
160
+ ComputeBudgetProgram.setComputeUnitPrice({
161
+ microLamports: 100000, // Priority fee
162
+ }),
163
+ ];
164
+ // 3. 添加 Tip (Nozomi)
165
+ const tipInstructions = [];
166
+ const payer = signers[0]; // 第一个钱包作为 payer
167
+ if (useNozomi) {
168
+ const tipAmount = nozomiTipLamports || BigInt(NOZOMI_CONFIG.DEFAULT_TIP_LAMPORTS);
169
+ tipInstructions.push(buildNozomiTipInstruction(payer.publicKey, tipAmount, getRandomNozomiTipAccount()));
170
+ }
171
+ // 4. 组装所有指令
172
+ const allInstructions = [
173
+ ...computeBudgetIxs,
174
+ ...tipInstructions,
175
+ ...swapInstructions,
176
+ ];
177
+ // 5. 收集地址用于 ALT
178
+ const addresses = collectAddressesFromInstructions(allInstructions);
179
+ // 6. 创建 ALT 交易 (不发送)
180
+ const { altAddress, createTx: altCreateTx } = await createAddressLookupTable(connection, payer, addresses);
181
+ // 7. 预先构建 Swap 交易 (使用预期的 ALT 结构)
182
+ // 注意:此交易假设 ALT 已激活,用户需确保 ALT 激活后再发送
183
+ const mockAltAccount = {
184
+ key: altAddress,
185
+ state: {
186
+ addresses: addresses,
187
+ authority: payer.publicKey,
188
+ deactivationSlot: BigInt('18446744073709551615'), // u64::MAX
189
+ lastExtendedSlot: 0,
190
+ lastExtendedSlotStartIndex: 0,
191
+ },
192
+ isActive: () => true,
193
+ };
194
+ const swapTx = await buildVersionedTransaction(connection, payer.publicKey, allInstructions, signers, [mockAltAccount]);
195
+ const txSize = estimateTransactionSize(swapTx);
196
+ if (txSize > 1232) {
197
+ return {
198
+ success: false,
199
+ error: `Transaction too large: ${txSize} bytes. Reduce number of swaps.`,
200
+ estimatedSize: txSize,
201
+ };
202
+ }
203
+ return {
204
+ success: true,
205
+ // ALT 创建交易
206
+ altCreateTx,
207
+ altCreateTxSerialized: Buffer.from(altCreateTx.serialize()).toString('base64'),
208
+ altInfo: {
209
+ address: altAddress.toBase58(),
210
+ publicKey: altAddress,
211
+ addresses: addresses.map(a => a.toBase58()),
212
+ },
213
+ // Swap 交易
214
+ swapTx,
215
+ swapTxSerialized: Buffer.from(swapTx.serialize()).toString('base64'),
216
+ // 原始指令 (高级用户)
217
+ instructions: allInstructions,
218
+ signers,
219
+ swapCount: swaps.length,
220
+ estimatedSize: txSize,
221
+ };
222
+ }
223
+ catch (error) {
224
+ return {
225
+ success: false,
226
+ error: error.message,
227
+ };
228
+ }
229
+ }
230
+ /**
231
+ * 快速 Batch Swap (不创建 ALT,仅适用于少量钱包)
232
+ * 适用于 3-5 个钱包的情况,不需要 ALT
233
+ *
234
+ * @returns 只返回 swapTx,无需 ALT 创建
235
+ */
236
+ export async function quickBatchSwapPump(connection, params) {
237
+ try {
238
+ const { swaps } = params;
239
+ if (swaps.length > 5) {
240
+ return {
241
+ success: false,
242
+ error: `quickBatchSwap only supports up to 5 wallets. Use batchSwapPump for more.`
243
+ };
244
+ }
245
+ // 1. 构建所有 swap 指令
246
+ const { instructions: swapInstructions, signers } = await buildBatchSwapInstructions(connection, params);
247
+ // 2. 添加 Compute Budget
248
+ const computeBudgetIxs = [
249
+ ComputeBudgetProgram.setComputeUnitLimit({
250
+ units: 200000 * swaps.length,
251
+ }),
252
+ ComputeBudgetProgram.setComputeUnitPrice({
253
+ microLamports: 100000,
254
+ }),
255
+ ];
256
+ const allInstructions = [...computeBudgetIxs, ...swapInstructions];
257
+ const payer = signers[0];
258
+ // 3. 直接构建 Versioned Transaction (无 ALT)
259
+ const swapTx = await buildVersionedTransaction(connection, payer.publicKey, allInstructions, signers);
260
+ const txSize = estimateTransactionSize(swapTx);
261
+ if (txSize > 1232) {
262
+ return {
263
+ success: false,
264
+ error: `Transaction too large: ${txSize} bytes. Use batchSwapPump with ALT.`,
265
+ estimatedSize: txSize,
266
+ };
267
+ }
268
+ return {
269
+ success: true,
270
+ // 无需 ALT
271
+ swapTx,
272
+ swapTxSerialized: Buffer.from(swapTx.serialize()).toString('base64'),
273
+ instructions: allInstructions,
274
+ signers,
275
+ swapCount: swaps.length,
276
+ estimatedSize: txSize,
277
+ };
278
+ }
279
+ catch (error) {
280
+ return {
281
+ success: false,
282
+ error: error.message,
283
+ };
284
+ }
285
+ }
286
+ //# sourceMappingURL=batch-swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-swap.js","sourceRoot":"","sources":["../../src/utils/batch-swap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Batch Swap 类型定义
3
+ * 支持单交易 + ALT + 多钱包 Swap
4
+ * @module sol/utils/batch-types
5
+ */
6
+ import { Keypair, PublicKey, TransactionInstruction, VersionedTransaction } from '@solana/web3.js';
7
+ /**
8
+ * 单个 Swap 参数
9
+ */
10
+ export interface SingleSwapInput {
11
+ /** 钱包 */
12
+ wallet: Keypair;
13
+ /** SOL 数量 (lamports) - 买入时使用 */
14
+ solAmount?: bigint;
15
+ /** Token 数量 - 卖出时使用 */
16
+ tokenAmount?: bigint;
17
+ }
18
+ /**
19
+ * Batch Swap 参数
20
+ */
21
+ export interface AtomicBatchSwapParams {
22
+ /** Token Mint 地址 */
23
+ mint: string;
24
+ /** 是否买入 */
25
+ isBuy: boolean;
26
+ /** 钱包和金额列表 */
27
+ swaps: SingleSwapInput[];
28
+ /** 滑点 (bps), 默认 100 = 1% */
29
+ slippageBps?: number;
30
+ /** 使用 Nozomi 加速 */
31
+ useNozomi?: boolean;
32
+ /** Nozomi Tip (lamports) */
33
+ nozomiTipLamports?: bigint;
34
+ /** 使用 Jito */
35
+ useJito?: boolean;
36
+ /** Jito Tip (lamports) */
37
+ jitoTipLamports?: bigint;
38
+ }
39
+ /**
40
+ * ALT 信息
41
+ */
42
+ export interface ALTInfo {
43
+ /** ALT 地址 */
44
+ address: string;
45
+ /** ALT PublicKey */
46
+ publicKey: PublicKey;
47
+ /** 包含的地址列表 */
48
+ addresses: string[];
49
+ }
50
+ /**
51
+ * Batch Swap 结果
52
+ * 返回所有必要的交易和信息,由用户自己决定如何广播
53
+ */
54
+ export interface BatchSwapResult {
55
+ success: boolean;
56
+ /**
57
+ * 步骤 1: ALT 创建交易 (已签名)
58
+ * 用户需要先广播此交易并等待确认
59
+ */
60
+ altCreateTx?: VersionedTransaction;
61
+ /** ALT 创建交易序列化 (base64) */
62
+ altCreateTxSerialized?: string;
63
+ /** ALT 信息 */
64
+ altInfo?: ALTInfo;
65
+ /**
66
+ * 步骤 2: 主 Swap 交易 (已签名)
67
+ * ALT 激活后 (等待 1 slot),广播此交易
68
+ */
69
+ swapTx?: VersionedTransaction;
70
+ /** Swap 交易序列化 (base64) */
71
+ swapTxSerialized?: string;
72
+ /** 所有 Swap 指令 (未签名,高级用户可自行组装) */
73
+ instructions?: TransactionInstruction[];
74
+ /** 签名者列表 */
75
+ signers?: Keypair[];
76
+ /** 包含的 swap 数量 */
77
+ swapCount?: number;
78
+ /** 预估交易大小 (bytes) */
79
+ estimatedSize?: number;
80
+ /** 错误信息 */
81
+ error?: string;
82
+ }
83
+ /**
84
+ * 指令构建结果
85
+ */
86
+ export interface SwapInstructionsResult {
87
+ instructions: TransactionInstruction[];
88
+ signers: Keypair[];
89
+ }
90
+ //# sourceMappingURL=batch-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-types.d.ts","sourceRoot":"","sources":["../../src/utils/batch-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEnG;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,SAAS;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,OAAO,CAAC;IACf,cAAc;IACd,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,2BAA2B;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,iCAAiC;IACjC,YAAY,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACxC,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IAEpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,CAAC;CACtB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Batch Swap 类型定义
3
+ * 支持单交易 + ALT + 多钱包 Swap
4
+ * @module sol/utils/batch-types
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=batch-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-types.js","sourceRoot":"","sources":["../../src/utils/batch-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Solana RPC 连接管理
3
+ * @module sol/utils/connection
4
+ */
5
+ import { Connection, Commitment } from '@solana/web3.js';
6
+ /**
7
+ * 创建 Solana 连接
8
+ *
9
+ * 重要:必须传入用户选择的 RPC URL,SDK 不提供默认 RPC
10
+ * 前端应从 RPC 设置中获取用户配置的节点
11
+ *
12
+ * @param rpcUrl RPC URL(必填)
13
+ * @param commitment Commitment 级别(可选,默认 confirmed)
14
+ *
15
+ * @example
16
+ * const connection = createConnection('https://user-selected-rpc.com')
17
+ *
18
+ * @throws Error 如果没有传入 rpcUrl
19
+ */
20
+ export declare function createConnection(rpcUrl: string, commitment?: Commitment): Connection;
21
+ /**
22
+ * 获取账户 SOL 余额
23
+ * @param connection Solana 连接
24
+ * @param address 账户地址
25
+ * @returns 余额(lamports)
26
+ */
27
+ export declare function getBalance(connection: Connection, address: string): Promise<bigint>;
28
+ /**
29
+ * 获取账户 SOL 余额(格式化)
30
+ * @param connection Solana 连接
31
+ * @param address 账户地址
32
+ * @returns 余额(SOL)
33
+ */
34
+ export declare function getBalanceInSol(connection: Connection, address: string): Promise<number>;
35
+ /**
36
+ * 获取最新 blockhash
37
+ * @param connection Solana 连接
38
+ */
39
+ export declare function getLatestBlockhash(connection: Connection): Promise<{
40
+ blockhash: string;
41
+ lastValidBlockHeight: number;
42
+ }>;
43
+ /**
44
+ * 获取当前 slot
45
+ * @param connection Solana 连接
46
+ */
47
+ export declare function getCurrentSlot(connection: Connection): Promise<number>;
48
+ /**
49
+ * 检查账户是否存在
50
+ * @param connection Solana 连接
51
+ * @param address 账户地址
52
+ */
53
+ export declare function accountExists(connection: Connection, address: string): Promise<boolean>;
54
+ /**
55
+ * 获取账户信息
56
+ * @param connection Solana 连接
57
+ * @param address 账户地址
58
+ */
59
+ export declare function getAccountInfo(connection: Connection, address: string): Promise<import("@solana/web3.js").AccountInfo<Buffer<ArrayBufferLike>> | null>;
60
+ /**
61
+ * 获取最小租金豁免余额
62
+ * @param connection Solana 连接
63
+ * @param dataSize 账户数据大小
64
+ */
65
+ export declare function getMinimumBalanceForRentExemption(connection: Connection, dataSize: number): Promise<bigint>;
66
+ /**
67
+ * 等待交易确认
68
+ * @param connection Solana 连接
69
+ * @param signature 交易签名
70
+ * @param timeout 超时时间(毫秒)
71
+ */
72
+ export declare function waitForConfirmation(connection: Connection, signature: string, timeout?: number): Promise<boolean>;
73
+ /**
74
+ * 获取交易状态
75
+ * @param connection Solana 连接
76
+ * @param signature 交易签名
77
+ */
78
+ export declare function getTransactionStatus(connection: Connection, signature: string): Promise<'pending' | 'confirmed' | 'failed'>;
79
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/utils/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,UAAyC,GACpD,UAAU,CAQZ;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC,CAUD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,kFAQhB;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAuC,GAC/C,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC,CAa7C"}