@catalyst-team/poly-mcp 0.1.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 (59) hide show
  1. package/README.md +317 -0
  2. package/dist/errors.d.ts +33 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +86 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/index.d.ts +62 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +173 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/server.d.ts +17 -0
  11. package/dist/server.d.ts.map +1 -0
  12. package/dist/server.js +155 -0
  13. package/dist/server.js.map +1 -0
  14. package/dist/tools/guide.d.ts +12 -0
  15. package/dist/tools/guide.d.ts.map +1 -0
  16. package/dist/tools/guide.js +801 -0
  17. package/dist/tools/guide.js.map +1 -0
  18. package/dist/tools/index.d.ts +11 -0
  19. package/dist/tools/index.d.ts.map +1 -0
  20. package/dist/tools/index.js +27 -0
  21. package/dist/tools/index.js.map +1 -0
  22. package/dist/tools/market.d.ts +11 -0
  23. package/dist/tools/market.d.ts.map +1 -0
  24. package/dist/tools/market.js +314 -0
  25. package/dist/tools/market.js.map +1 -0
  26. package/dist/tools/order.d.ts +10 -0
  27. package/dist/tools/order.d.ts.map +1 -0
  28. package/dist/tools/order.js +258 -0
  29. package/dist/tools/order.js.map +1 -0
  30. package/dist/tools/trade.d.ts +38 -0
  31. package/dist/tools/trade.d.ts.map +1 -0
  32. package/dist/tools/trade.js +313 -0
  33. package/dist/tools/trade.js.map +1 -0
  34. package/dist/tools/trader.d.ts +11 -0
  35. package/dist/tools/trader.d.ts.map +1 -0
  36. package/dist/tools/trader.js +277 -0
  37. package/dist/tools/trader.js.map +1 -0
  38. package/dist/tools/wallet.d.ts +274 -0
  39. package/dist/tools/wallet.d.ts.map +1 -0
  40. package/dist/tools/wallet.js +579 -0
  41. package/dist/tools/wallet.js.map +1 -0
  42. package/dist/types.d.ts +413 -0
  43. package/dist/types.d.ts.map +1 -0
  44. package/dist/types.js +5 -0
  45. package/dist/types.js.map +1 -0
  46. package/docs/01-mcp.md +2075 -0
  47. package/package.json +55 -0
  48. package/src/errors.ts +124 -0
  49. package/src/index.ts +309 -0
  50. package/src/server.ts +183 -0
  51. package/src/tools/guide.ts +821 -0
  52. package/src/tools/index.ts +73 -0
  53. package/src/tools/market.ts +363 -0
  54. package/src/tools/order.ts +326 -0
  55. package/src/tools/trade.ts +417 -0
  56. package/src/tools/trader.ts +322 -0
  57. package/src/tools/wallet.ts +683 -0
  58. package/src/types.ts +472 -0
  59. package/tsconfig.json +20 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Trader Tools - MCP tools for trader/wallet analysis
3
+ */
4
+ import { validateAddress, wrapError } from '../errors.js';
5
+ export const traderToolDefinitions = [
6
+ {
7
+ name: 'get_trader_positions',
8
+ description: 'Get all positions held by a trader with PnL breakdown',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ address: {
13
+ type: 'string',
14
+ description: 'Trader wallet address (0x...)',
15
+ },
16
+ },
17
+ required: ['address'],
18
+ },
19
+ },
20
+ {
21
+ name: 'get_trader_trades',
22
+ description: 'Get recent trading activity for a trader',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ address: {
27
+ type: 'string',
28
+ description: 'Trader wallet address',
29
+ },
30
+ limit: {
31
+ type: 'number',
32
+ description: 'Maximum number of trades to return',
33
+ default: 20,
34
+ },
35
+ side: {
36
+ type: 'string',
37
+ enum: ['BUY', 'SELL'],
38
+ description: 'Filter by trade side',
39
+ },
40
+ },
41
+ required: ['address'],
42
+ },
43
+ },
44
+ {
45
+ name: 'get_trader_profile',
46
+ description: 'Get comprehensive trader profile with performance metrics',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ address: {
51
+ type: 'string',
52
+ description: 'Trader wallet address',
53
+ },
54
+ },
55
+ required: ['address'],
56
+ },
57
+ },
58
+ {
59
+ name: 'get_leaderboard',
60
+ description: 'Get top traders by PnL',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ limit: {
65
+ type: 'number',
66
+ description: 'Number of traders to return',
67
+ default: 10,
68
+ },
69
+ offset: {
70
+ type: 'number',
71
+ description: 'Pagination offset',
72
+ default: 0,
73
+ },
74
+ },
75
+ },
76
+ },
77
+ ];
78
+ export async function handleGetTraderPositions(sdk, input) {
79
+ validateAddress(input.address);
80
+ try {
81
+ const positions = await sdk.wallets.getWalletPositions(input.address);
82
+ const totalUnrealizedPnl = positions.reduce((sum, p) => sum + (p.cashPnl || 0), 0);
83
+ const totalRealizedPnl = positions.reduce((sum, p) => sum + (p.realizedPnl || 0), 0);
84
+ const winningPositions = positions.filter((p) => (p.cashPnl || 0) > 0).length;
85
+ const losingPositions = positions.filter((p) => (p.cashPnl || 0) < 0).length;
86
+ return {
87
+ trader: {
88
+ address: input.address,
89
+ displayName: null, // Will be enriched if available
90
+ },
91
+ positions: positions.map((p) => ({
92
+ market: {
93
+ conditionId: p.conditionId,
94
+ title: p.title,
95
+ slug: p.slug,
96
+ },
97
+ holding: {
98
+ outcome: p.outcome,
99
+ size: p.size,
100
+ avgPrice: p.avgPrice,
101
+ curPrice: p.curPrice,
102
+ },
103
+ pnl: {
104
+ unrealized: p.cashPnl,
105
+ unrealizedPercent: p.percentPnl,
106
+ realized: p.realizedPnl,
107
+ },
108
+ status: {
109
+ redeemable: p.redeemable,
110
+ endDate: p.endDate,
111
+ },
112
+ })),
113
+ summary: {
114
+ totalPositions: positions.length,
115
+ totalUnrealizedPnl,
116
+ totalRealizedPnl,
117
+ winningPositions,
118
+ losingPositions,
119
+ },
120
+ };
121
+ }
122
+ catch (err) {
123
+ throw wrapError(err);
124
+ }
125
+ }
126
+ export async function handleGetTraderTrades(sdk, input) {
127
+ validateAddress(input.address);
128
+ try {
129
+ const activityResult = await sdk.wallets.getWalletActivity(input.address, input.limit || 100);
130
+ let trades = activityResult.activities.filter((a) => a.type === 'TRADE');
131
+ // Filter by side if specified
132
+ if (input.side) {
133
+ trades = trades.filter((a) => a.side === input.side);
134
+ }
135
+ // Apply limit
136
+ const limit = input.limit || 20;
137
+ trades = trades.slice(0, limit);
138
+ const buyTrades = trades.filter((t) => t.side === 'BUY');
139
+ const sellTrades = trades.filter((t) => t.side === 'SELL');
140
+ return {
141
+ trader: {
142
+ address: input.address,
143
+ displayName: null,
144
+ },
145
+ trades: trades.map((t) => ({
146
+ type: t.type,
147
+ side: t.side,
148
+ market: {
149
+ conditionId: t.conditionId,
150
+ title: t.title || '',
151
+ slug: t.slug,
152
+ },
153
+ outcome: t.outcome,
154
+ execution: {
155
+ size: t.size,
156
+ price: t.price,
157
+ usdcValue: t.usdcSize || t.size * t.price,
158
+ },
159
+ timestamp: new Date(t.timestamp).toISOString(),
160
+ txHash: t.transactionHash,
161
+ })),
162
+ summary: {
163
+ totalTrades: trades.length,
164
+ buyCount: buyTrades.length,
165
+ sellCount: sellTrades.length,
166
+ buyVolume: buyTrades.reduce((sum, t) => sum + (t.usdcSize || t.size * t.price), 0),
167
+ sellVolume: sellTrades.reduce((sum, t) => sum + (t.usdcSize || t.size * t.price), 0),
168
+ },
169
+ };
170
+ }
171
+ catch (err) {
172
+ throw wrapError(err);
173
+ }
174
+ }
175
+ export async function handleGetTraderProfile(sdk, input) {
176
+ validateAddress(input.address);
177
+ try {
178
+ const profile = await sdk.wallets.getWalletProfile(input.address);
179
+ // Try to get leaderboard data for rank and official PnL
180
+ let rank = null;
181
+ let leaderboardPnl = null;
182
+ let leaderboardVolume = null;
183
+ let displayName = null;
184
+ let verified = false;
185
+ try {
186
+ const leaderboard = await sdk.wallets.getLeaderboard(0, 100);
187
+ const entry = leaderboard.entries.find((e) => e.address.toLowerCase() === input.address.toLowerCase());
188
+ if (entry) {
189
+ rank = entry.rank;
190
+ leaderboardPnl = entry.pnl;
191
+ leaderboardVolume = entry.volume;
192
+ displayName = entry.userName || null;
193
+ verified = entry.verifiedBadge || false;
194
+ }
195
+ }
196
+ catch {
197
+ // Ignore leaderboard errors
198
+ }
199
+ const winningCount = profile.positionCount > 0
200
+ ? Math.round(profile.positionCount * (profile.avgPercentPnL > 0 ? 0.6 : 0.4))
201
+ : 0;
202
+ const winRate = profile.positionCount > 0
203
+ ? winningCount / profile.positionCount
204
+ : 0;
205
+ return {
206
+ trader: {
207
+ address: input.address,
208
+ displayName,
209
+ xUsername: null,
210
+ verified,
211
+ profileImage: null,
212
+ },
213
+ ranking: {
214
+ rank,
215
+ totalTraders: 10000, // Approximate
216
+ },
217
+ performance: {
218
+ // Official PnL from leaderboard (used for ranking)
219
+ officialPnl: leaderboardPnl,
220
+ // Volume from leaderboard
221
+ totalVolume: leaderboardVolume ?? (profile.totalPnL + profile.unrealizedPnL),
222
+ // Calculated PnL from profile positions
223
+ unrealizedPnl: profile.unrealizedPnL,
224
+ realizedPnl: profile.realizedPnL,
225
+ },
226
+ stats: {
227
+ positionCount: profile.positionCount,
228
+ winRate,
229
+ avgPercentPnl: profile.avgPercentPnL,
230
+ smartScore: profile.smartScore,
231
+ },
232
+ activity: {
233
+ lastTradeAt: profile.lastActiveAt.getTime() > 0
234
+ ? profile.lastActiveAt.toISOString()
235
+ : null,
236
+ isActive: Date.now() - profile.lastActiveAt.getTime() < 7 * 24 * 60 * 60 * 1000,
237
+ },
238
+ // Explain potential PnL differences
239
+ notes: leaderboardPnl !== null && Math.abs((leaderboardPnl || 0) - (profile.unrealizedPnL + profile.realizedPnL)) > 100
240
+ ? 'Note: officialPnl (from leaderboard) may differ from unrealizedPnl + realizedPnl (from positions) due to different calculation methods. Leaderboard PnL includes historical settled positions.'
241
+ : undefined,
242
+ };
243
+ }
244
+ catch (err) {
245
+ throw wrapError(err);
246
+ }
247
+ }
248
+ export async function handleGetLeaderboard(sdk, input) {
249
+ const limit = input.limit || 10;
250
+ const offset = input.offset || 0;
251
+ try {
252
+ const page = Math.floor(offset / 50);
253
+ const leaderboard = await sdk.wallets.getLeaderboard(page, 50);
254
+ // Apply offset and limit within the page
255
+ const startIdx = offset % 50;
256
+ const entries = leaderboard.entries.slice(startIdx, startIdx + limit);
257
+ return {
258
+ traders: entries.map((e) => ({
259
+ rank: e.rank,
260
+ address: e.address,
261
+ displayName: e.userName || null,
262
+ pnl: e.pnl,
263
+ volume: e.volume,
264
+ verified: e.verifiedBadge || false,
265
+ })),
266
+ pagination: {
267
+ total: leaderboard.total,
268
+ offset,
269
+ limit,
270
+ },
271
+ };
272
+ }
273
+ catch (err) {
274
+ throw wrapError(err);
275
+ }
276
+ }
277
+ //# sourceMappingURL=trader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trader.js","sourceRoot":"","sources":["../../src/tools/trader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Wallet Tools - MCP tools for deposits, swaps, and authorization management
3
+ *
4
+ * These tools use SDK services:
5
+ * - BridgeClient for deposit addresses and supported assets
6
+ * - SwapService for DEX swaps on Polygon (QuickSwap V3)
7
+ * - AuthorizationService for allowance checks and approvals
8
+ * - depositUsdc() for executing USDC deposits
9
+ * - swapAndDeposit() for swapping any token to USDC and depositing
10
+ */
11
+ import type { PolymarketSDK } from '@catalyst-team/poly-sdk';
12
+ import type { ToolDefinition } from '../types.js';
13
+ export declare const walletToolDefinitions: ToolDefinition[];
14
+ interface GetSupportedAssetsInput {
15
+ chainId?: number;
16
+ }
17
+ interface DepositUsdcInput {
18
+ amount: number;
19
+ token?: 'NATIVE_USDC' | 'USDC_E';
20
+ }
21
+ /**
22
+ * Get supported deposit assets
23
+ */
24
+ export declare function handleGetSupportedAssets(_sdk: PolymarketSDK, input: GetSupportedAssetsInput): Promise<{
25
+ assets: {
26
+ chainId: number;
27
+ chainName: string;
28
+ tokenSymbol: string;
29
+ tokenName: string;
30
+ tokenAddress: string;
31
+ decimals: number;
32
+ minDeposit: string;
33
+ minDepositUsd: number;
34
+ }[];
35
+ summary: {
36
+ totalChains: number;
37
+ totalAssets: number;
38
+ chains: string[];
39
+ };
40
+ }>;
41
+ /**
42
+ * Get deposit addresses for the wallet
43
+ */
44
+ export declare function handleGetDepositAddresses(sdk: PolymarketSDK): Promise<{
45
+ wallet: string;
46
+ addresses: {
47
+ evm: string;
48
+ solana: string;
49
+ bitcoin: string;
50
+ };
51
+ evmChains: string[];
52
+ instructions: string;
53
+ }>;
54
+ /**
55
+ * Deposit USDC to Polymarket
56
+ */
57
+ export declare function handleDepositUsdc(sdk: PolymarketSDK, input: DepositUsdcInput): Promise<{
58
+ success: boolean;
59
+ error: string | undefined;
60
+ wallet: string;
61
+ amount: number;
62
+ txHash?: undefined;
63
+ depositAddress?: undefined;
64
+ message?: undefined;
65
+ explorerUrl?: undefined;
66
+ } | {
67
+ success: boolean;
68
+ wallet: string;
69
+ amount: string;
70
+ txHash: string | undefined;
71
+ depositAddress: string;
72
+ message: string;
73
+ explorerUrl: string;
74
+ error?: undefined;
75
+ }>;
76
+ /**
77
+ * Check all allowances required for trading
78
+ */
79
+ export declare function handleCheckAllowances(sdk: PolymarketSDK): Promise<{
80
+ wallet: string;
81
+ erc20: {
82
+ usdc: {
83
+ balance: string;
84
+ allowances: import("@catalyst-team/poly-sdk").AllowanceInfo[];
85
+ };
86
+ };
87
+ erc1155: {
88
+ conditionalTokens: {
89
+ approvals: import("@catalyst-team/poly-sdk").AllowanceInfo[];
90
+ };
91
+ };
92
+ tradingReady: boolean;
93
+ issues: string[];
94
+ }>;
95
+ /**
96
+ * Set up all required approvals for trading
97
+ */
98
+ export declare function handleApproveTrading(sdk: PolymarketSDK): Promise<{
99
+ wallet: string;
100
+ erc20Approvals: import("@catalyst-team/poly-sdk").ApprovalTxResult[];
101
+ erc1155Approvals: import("@catalyst-team/poly-sdk").ApprovalTxResult[];
102
+ allApproved: boolean;
103
+ summary: string;
104
+ }>;
105
+ interface SwapInput {
106
+ tokenIn: string;
107
+ tokenOut: string;
108
+ amount: string;
109
+ slippage?: number;
110
+ }
111
+ interface SwapAndDepositInput {
112
+ token: string;
113
+ amount: string;
114
+ slippage?: number;
115
+ }
116
+ /**
117
+ * Swap between tokens on Polygon using QuickSwap V3
118
+ */
119
+ export declare function handleSwap(sdk: PolymarketSDK, input: SwapInput): Promise<{
120
+ success: boolean;
121
+ error: string;
122
+ wallet: string;
123
+ txHash?: undefined;
124
+ tokenIn?: undefined;
125
+ tokenOut?: undefined;
126
+ amountIn?: undefined;
127
+ amountOut?: undefined;
128
+ gasUsed?: undefined;
129
+ explorerUrl?: undefined;
130
+ } | {
131
+ success: boolean;
132
+ error: string;
133
+ wallet: string;
134
+ txHash: string;
135
+ tokenIn?: undefined;
136
+ tokenOut?: undefined;
137
+ amountIn?: undefined;
138
+ amountOut?: undefined;
139
+ gasUsed?: undefined;
140
+ explorerUrl?: undefined;
141
+ } | {
142
+ success: boolean;
143
+ wallet: string;
144
+ tokenIn: string;
145
+ tokenOut: string;
146
+ amountIn: string;
147
+ amountOut: string;
148
+ txHash: string;
149
+ gasUsed: string;
150
+ explorerUrl: string;
151
+ error?: undefined;
152
+ }>;
153
+ /**
154
+ * Swap any token to USDC and deposit to Polymarket
155
+ */
156
+ export declare function handleSwapAndDeposit(sdk: PolymarketSDK, input: SwapAndDepositInput): Promise<{
157
+ success: boolean;
158
+ error: string | undefined;
159
+ wallet: string;
160
+ token: string;
161
+ amount: string;
162
+ tokenIn?: undefined;
163
+ amountIn?: undefined;
164
+ usdcAmount?: undefined;
165
+ swapTxHash?: undefined;
166
+ depositTxHash?: undefined;
167
+ depositAddress?: undefined;
168
+ message?: undefined;
169
+ explorerUrl?: undefined;
170
+ } | {
171
+ success: boolean;
172
+ wallet: string;
173
+ tokenIn: string;
174
+ amountIn: string;
175
+ usdcAmount: string;
176
+ swapTxHash: string | null;
177
+ depositTxHash: string | undefined;
178
+ depositAddress: string;
179
+ message: string;
180
+ explorerUrl: string | undefined;
181
+ error?: undefined;
182
+ token?: undefined;
183
+ amount?: undefined;
184
+ }>;
185
+ /**
186
+ * Get balances for all supported tokens (requires configured wallet)
187
+ */
188
+ export declare function handleGetTokenBalances(sdk: PolymarketSDK): Promise<{
189
+ wallet: string;
190
+ balances: {
191
+ token: string;
192
+ symbol: string;
193
+ balance: string;
194
+ decimals: number;
195
+ }[];
196
+ nonZeroBalances: {
197
+ token: string;
198
+ balance: string;
199
+ }[];
200
+ supportedTokens: string[];
201
+ }>;
202
+ /**
203
+ * Get balances for any wallet address (no private key required)
204
+ */
205
+ export declare function handleGetWalletBalances(_sdk: PolymarketSDK, input: {
206
+ address: string;
207
+ }): Promise<{
208
+ address: string;
209
+ balances: {
210
+ token: string;
211
+ symbol: string;
212
+ balance: string;
213
+ decimals: number;
214
+ }[];
215
+ nonZeroBalances: {
216
+ token: string;
217
+ balance: string;
218
+ }[];
219
+ summary: {
220
+ totalTokens: number;
221
+ stablecoinValue: string;
222
+ };
223
+ supportedTokens: string[];
224
+ }>;
225
+ interface GetSwapQuoteInput {
226
+ tokenIn: string;
227
+ tokenOut: string;
228
+ amount: string;
229
+ }
230
+ /**
231
+ * Get a swap quote (check route availability and estimate output)
232
+ * No private key required - uses read-only provider
233
+ */
234
+ export declare function handleGetSwapQuote(_sdk: PolymarketSDK, input: GetSwapQuoteInput): Promise<{
235
+ possible: boolean;
236
+ tokenIn: string;
237
+ tokenOut: string;
238
+ amountIn: string;
239
+ amountOut: string | null;
240
+ route: string[];
241
+ routeDescription: string;
242
+ message: string;
243
+ poolExists?: undefined;
244
+ reason?: undefined;
245
+ suggestion?: undefined;
246
+ } | {
247
+ possible: boolean;
248
+ tokenIn: string;
249
+ tokenOut: string;
250
+ amountIn: string;
251
+ amountOut: null;
252
+ route: string[];
253
+ poolExists: boolean;
254
+ reason: string | undefined;
255
+ suggestion: string;
256
+ routeDescription?: undefined;
257
+ message?: undefined;
258
+ }>;
259
+ /**
260
+ * Get all available liquidity pools on QuickSwap V3
261
+ */
262
+ export declare function handleGetAvailablePools(_sdk: PolymarketSDK): Promise<{
263
+ pools: {
264
+ pair: string;
265
+ tokenA: string;
266
+ tokenB: string;
267
+ poolAddress: string | null;
268
+ }[];
269
+ totalPools: number;
270
+ supportedTokens: string[];
271
+ note: string;
272
+ }>;
273
+ export {};
274
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAS7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,eAAO,MAAM,qBAAqB,EAAE,cAAc,EA6JjD,CAAC;AAGF,UAAU,uBAAuB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC;CAClC;AAiCD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,uBAAuB;;;;;;;;;;;;;;;;GAqC/B;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;GAkCjE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;GA8BxB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;;;GA0B7D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa;;;;;;GAiB5D;AAGD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CpE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCxF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;;;;;GA2B9D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;;;GA+C3B;AAGD,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;GAkDzB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,aAAa;;;;;;;;;;GAyBhE"}