@t2000/cli 0.17.28 → 0.18.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 (151) hide show
  1. package/README.md +65 -22
  2. package/dist/chunk-FILMHRDQ.js +2055 -0
  3. package/dist/chunk-FILMHRDQ.js.map +1 -0
  4. package/dist/chunk-G2C4JKWH.js +5337 -0
  5. package/dist/chunk-G2C4JKWH.js.map +1 -0
  6. package/dist/{chunk-D4HDZEJT.js → chunk-MKTCPK75.js} +16 -3
  7. package/dist/{dist-F6YRISIO.js → dist-6ADOH23K.js} +2853 -7983
  8. package/dist/dist-6ADOH23K.js.map +1 -0
  9. package/dist/dist-IHO4UPEB.js +26875 -0
  10. package/dist/dist-IHO4UPEB.js.map +1 -0
  11. package/dist/fileFromPath-WHCJFE2P.js +131 -0
  12. package/dist/fileFromPath-WHCJFE2P.js.map +1 -0
  13. package/dist/index.js +3196 -2
  14. package/dist/index.js.map +1 -1
  15. package/package.json +5 -4
  16. package/dist/commands/address.d.ts +0 -3
  17. package/dist/commands/address.d.ts.map +0 -1
  18. package/dist/commands/address.js +0 -26
  19. package/dist/commands/address.js.map +0 -1
  20. package/dist/commands/balance.d.ts +0 -3
  21. package/dist/commands/balance.d.ts.map +0 -1
  22. package/dist/commands/balance.js +0 -134
  23. package/dist/commands/balance.js.map +0 -1
  24. package/dist/commands/borrow.d.ts +0 -3
  25. package/dist/commands/borrow.d.ts.map +0 -1
  26. package/dist/commands/borrow.js +0 -40
  27. package/dist/commands/borrow.js.map +0 -1
  28. package/dist/commands/claimRewards.d.ts +0 -3
  29. package/dist/commands/claimRewards.d.ts.map +0 -1
  30. package/dist/commands/claimRewards.js +0 -49
  31. package/dist/commands/claimRewards.js.map +0 -1
  32. package/dist/commands/config.d.ts +0 -3
  33. package/dist/commands/config.d.ts.map +0 -1
  34. package/dist/commands/config.js +0 -139
  35. package/dist/commands/config.js.map +0 -1
  36. package/dist/commands/contacts.d.ts +0 -3
  37. package/dist/commands/contacts.d.ts.map +0 -1
  38. package/dist/commands/contacts.js +0 -83
  39. package/dist/commands/contacts.js.map +0 -1
  40. package/dist/commands/deposit.d.ts +0 -3
  41. package/dist/commands/deposit.d.ts.map +0 -1
  42. package/dist/commands/deposit.js +0 -27
  43. package/dist/commands/deposit.js.map +0 -1
  44. package/dist/commands/earn.d.ts +0 -3
  45. package/dist/commands/earn.d.ts.map +0 -1
  46. package/dist/commands/earn.js +0 -186
  47. package/dist/commands/earn.js.map +0 -1
  48. package/dist/commands/earnings.d.ts +0 -3
  49. package/dist/commands/earnings.d.ts.map +0 -1
  50. package/dist/commands/earnings.js +0 -38
  51. package/dist/commands/earnings.js.map +0 -1
  52. package/dist/commands/exchange.d.ts +0 -3
  53. package/dist/commands/exchange.d.ts.map +0 -1
  54. package/dist/commands/exchange.js +0 -45
  55. package/dist/commands/exchange.js.map +0 -1
  56. package/dist/commands/exportKey.d.ts +0 -3
  57. package/dist/commands/exportKey.d.ts.map +0 -1
  58. package/dist/commands/exportKey.js +0 -81
  59. package/dist/commands/exportKey.js.map +0 -1
  60. package/dist/commands/fundStatus.d.ts +0 -3
  61. package/dist/commands/fundStatus.d.ts.map +0 -1
  62. package/dist/commands/fundStatus.js +0 -50
  63. package/dist/commands/fundStatus.js.map +0 -1
  64. package/dist/commands/health.d.ts +0 -3
  65. package/dist/commands/health.d.ts.map +0 -1
  66. package/dist/commands/health.js +0 -44
  67. package/dist/commands/health.js.map +0 -1
  68. package/dist/commands/history.d.ts +0 -3
  69. package/dist/commands/history.d.ts.map +0 -1
  70. package/dist/commands/history.js +0 -37
  71. package/dist/commands/history.js.map +0 -1
  72. package/dist/commands/importKey.d.ts +0 -3
  73. package/dist/commands/importKey.d.ts.map +0 -1
  74. package/dist/commands/importKey.js +0 -39
  75. package/dist/commands/importKey.js.map +0 -1
  76. package/dist/commands/init.d.ts +0 -3
  77. package/dist/commands/init.d.ts.map +0 -1
  78. package/dist/commands/init.js +0 -56
  79. package/dist/commands/init.js.map +0 -1
  80. package/dist/commands/invest.d.ts +0 -3
  81. package/dist/commands/invest.d.ts.map +0 -1
  82. package/dist/commands/invest.js +0 -637
  83. package/dist/commands/invest.js.map +0 -1
  84. package/dist/commands/lock.d.ts +0 -3
  85. package/dist/commands/lock.d.ts.map +0 -1
  86. package/dist/commands/lock.js +0 -66
  87. package/dist/commands/lock.js.map +0 -1
  88. package/dist/commands/mcp.d.ts +0 -3
  89. package/dist/commands/mcp.d.ts.map +0 -1
  90. package/dist/commands/mcp.js +0 -141
  91. package/dist/commands/mcp.js.map +0 -1
  92. package/dist/commands/pay.d.ts +0 -3
  93. package/dist/commands/pay.d.ts.map +0 -1
  94. package/dist/commands/pay.js +0 -96
  95. package/dist/commands/pay.js.map +0 -1
  96. package/dist/commands/portfolio.d.ts +0 -3
  97. package/dist/commands/portfolio.d.ts.map +0 -1
  98. package/dist/commands/portfolio.js +0 -104
  99. package/dist/commands/portfolio.js.map +0 -1
  100. package/dist/commands/positions.d.ts +0 -3
  101. package/dist/commands/positions.d.ts.map +0 -1
  102. package/dist/commands/positions.js +0 -73
  103. package/dist/commands/positions.js.map +0 -1
  104. package/dist/commands/rates.d.ts +0 -3
  105. package/dist/commands/rates.d.ts.map +0 -1
  106. package/dist/commands/rates.js +0 -64
  107. package/dist/commands/rates.js.map +0 -1
  108. package/dist/commands/rebalance.d.ts +0 -3
  109. package/dist/commands/rebalance.d.ts.map +0 -1
  110. package/dist/commands/rebalance.js +0 -109
  111. package/dist/commands/rebalance.js.map +0 -1
  112. package/dist/commands/repay.d.ts +0 -3
  113. package/dist/commands/repay.d.ts.map +0 -1
  114. package/dist/commands/repay.js +0 -35
  115. package/dist/commands/repay.js.map +0 -1
  116. package/dist/commands/save.d.ts +0 -3
  117. package/dist/commands/save.d.ts.map +0 -1
  118. package/dist/commands/save.js +0 -57
  119. package/dist/commands/save.js.map +0 -1
  120. package/dist/commands/send.d.ts +0 -3
  121. package/dist/commands/send.d.ts.map +0 -1
  122. package/dist/commands/send.js +0 -52
  123. package/dist/commands/send.js.map +0 -1
  124. package/dist/commands/sentinel.d.ts +0 -3
  125. package/dist/commands/sentinel.d.ts.map +0 -1
  126. package/dist/commands/sentinel.js +0 -142
  127. package/dist/commands/sentinel.js.map +0 -1
  128. package/dist/commands/serve.d.ts +0 -3
  129. package/dist/commands/serve.d.ts.map +0 -1
  130. package/dist/commands/serve.js +0 -341
  131. package/dist/commands/serve.js.map +0 -1
  132. package/dist/commands/withdraw.d.ts +0 -3
  133. package/dist/commands/withdraw.d.ts.map +0 -1
  134. package/dist/commands/withdraw.js +0 -34
  135. package/dist/commands/withdraw.js.map +0 -1
  136. package/dist/dist-F6YRISIO.js.map +0 -1
  137. package/dist/index.d.ts +0 -3
  138. package/dist/index.d.ts.map +0 -1
  139. package/dist/output.d.ts +0 -16
  140. package/dist/output.d.ts.map +0 -1
  141. package/dist/output.js +0 -85
  142. package/dist/output.js.map +0 -1
  143. package/dist/program.d.ts +0 -3
  144. package/dist/program.d.ts.map +0 -1
  145. package/dist/program.js +0 -80
  146. package/dist/program.js.map +0 -1
  147. package/dist/prompts.d.ts +0 -16
  148. package/dist/prompts.d.ts.map +0 -1
  149. package/dist/prompts.js +0 -69
  150. package/dist/prompts.js.map +0 -1
  151. /package/dist/{chunk-D4HDZEJT.js.map → chunk-MKTCPK75.js.map} +0 -0
@@ -1,341 +0,0 @@
1
- import { serve } from '@hono/node-server';
2
- import { Hono } from 'hono';
3
- import { cors } from 'hono/cors';
4
- import { randomBytes } from 'node:crypto';
5
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
6
- import { join } from 'node:path';
7
- import { homedir } from 'node:os';
8
- import { T2000 } from '@t2000/sdk';
9
- import { resolvePin } from '../prompts.js';
10
- import { handleError } from '../output.js';
11
- import { streamSSE } from 'hono/streaming';
12
- const CONFIG_DIR = join(homedir(), '.t2000');
13
- const TOKEN_PATH = join(CONFIG_DIR, 'config.json');
14
- function generateToken() {
15
- return `t2k_${randomBytes(24).toString('hex')}`;
16
- }
17
- function saveToken(token) {
18
- if (!existsSync(CONFIG_DIR)) {
19
- mkdirSync(CONFIG_DIR, { recursive: true });
20
- }
21
- let config = {};
22
- try {
23
- config = JSON.parse(readFileSync(TOKEN_PATH, 'utf-8'));
24
- }
25
- catch { /* empty */ }
26
- config.authToken = token;
27
- writeFileSync(TOKEN_PATH, JSON.stringify(config, null, 2) + '\n');
28
- }
29
- function envelope(data) {
30
- return { success: true, data, timestamp: Math.floor(Date.now() / 1000) };
31
- }
32
- function errorResponse(code, message, data, retryable = false) {
33
- return {
34
- success: false,
35
- error: { code, message, data, retryable },
36
- timestamp: Math.floor(Date.now() / 1000),
37
- };
38
- }
39
- export function registerServe(program) {
40
- program
41
- .command('serve')
42
- .description('Start HTTP API server')
43
- .option('--port <port>', 'Port number', '3001')
44
- .option('--rate-limit <rps>', 'Max requests per second', '10')
45
- .option('--key <path>', 'Key file path')
46
- .action(async (opts) => {
47
- try {
48
- const pin = await resolvePin();
49
- const agent = await T2000.create({ pin, keyPath: opts.key });
50
- const port = parseInt(opts.port, 10);
51
- const rateLimit = parseInt(opts.rateLimit, 10);
52
- const token = generateToken();
53
- saveToken(token);
54
- const app = buildApp(agent, token, rateLimit);
55
- serve({ fetch: app.fetch, port });
56
- console.log(` ✓ API server running on http://localhost:${port}`);
57
- console.log(` ✓ Auth token: ${token}`);
58
- console.log('');
59
- console.log(' Endpoints:');
60
- console.log(' GET /v1/balance POST /v1/send');
61
- console.log(' GET /v1/address POST /v1/save');
62
- console.log(' GET /v1/history POST /v1/withdraw');
63
- console.log(' GET /v1/earnings POST /v1/borrow');
64
- console.log(' GET /v1/rates POST /v1/repay');
65
- console.log(' GET /v1/health-factor');
66
- console.log(' GET /v1/positions');
67
- console.log(' GET /v1/events (SSE)');
68
- console.log('');
69
- }
70
- catch (error) {
71
- handleError(error);
72
- }
73
- });
74
- }
75
- function buildApp(agent, authToken, rateLimit) {
76
- const app = new Hono();
77
- app.use('*', cors());
78
- // Rate limiting (sliding window)
79
- const requestLog = [];
80
- app.use('/v1/*', async (c, next) => {
81
- const now = Date.now();
82
- const windowMs = 1000;
83
- while (requestLog.length > 0 && requestLog[0] < now - windowMs) {
84
- requestLog.shift();
85
- }
86
- if (requestLog.length >= rateLimit) {
87
- c.status(429);
88
- c.header('Retry-After', '1');
89
- return c.json(errorResponse('RATE_LIMITED', 'Too many requests', null, true));
90
- }
91
- requestLog.push(now);
92
- await next();
93
- });
94
- // Bearer auth
95
- app.use('/v1/*', async (c, next) => {
96
- const auth = c.req.header('Authorization');
97
- if (!auth || auth !== `Bearer ${authToken}`) {
98
- c.status(401);
99
- return c.json(errorResponse('UNAUTHORIZED', 'Invalid or missing Bearer token'));
100
- }
101
- await next();
102
- });
103
- // --- GET endpoints ---
104
- app.get('/v1/address', (c) => {
105
- return c.json(envelope({ address: agent.address }));
106
- });
107
- app.get('/v1/balance', async (c) => {
108
- try {
109
- const balance = await agent.balance();
110
- return c.json(envelope(balance));
111
- }
112
- catch (err) {
113
- return c.json(errorResponse('BALANCE_ERROR', errMsg(err)), 500);
114
- }
115
- });
116
- app.get('/v1/history', async (c) => {
117
- try {
118
- const limit = parseInt(c.req.query('limit') ?? '20', 10);
119
- const history = await agent.history({ limit });
120
- return c.json(envelope(history));
121
- }
122
- catch (err) {
123
- return c.json(errorResponse('HISTORY_ERROR', errMsg(err)), 500);
124
- }
125
- });
126
- app.get('/v1/deposit', (c) => {
127
- return c.json(envelope({
128
- address: agent.address,
129
- network: 'mainnet',
130
- instructions: 'Send USDC to this address on Sui mainnet.',
131
- }));
132
- });
133
- app.get('/v1/earnings', async (c) => {
134
- try {
135
- const earnings = await agent.earnings();
136
- return c.json(envelope(earnings));
137
- }
138
- catch (err) {
139
- return c.json(errorResponse('EARNINGS_ERROR', errMsg(err)), 500);
140
- }
141
- });
142
- app.get('/v1/rates', async (c) => {
143
- try {
144
- const rates = await agent.rates();
145
- return c.json(envelope(rates));
146
- }
147
- catch (err) {
148
- return c.json(errorResponse('RATES_ERROR', errMsg(err)), 500);
149
- }
150
- });
151
- app.get('/v1/health-factor', async (c) => {
152
- try {
153
- const hf = await agent.healthFactor();
154
- return c.json(envelope(hf));
155
- }
156
- catch (err) {
157
- return c.json(errorResponse('HEALTH_ERROR', errMsg(err)), 500);
158
- }
159
- });
160
- app.get('/v1/max-withdraw', async (c) => {
161
- try {
162
- const result = await agent.maxWithdraw();
163
- return c.json(envelope(result));
164
- }
165
- catch (err) {
166
- return c.json(errorResponse('MAX_WITHDRAW_ERROR', errMsg(err)), 500);
167
- }
168
- });
169
- app.get('/v1/max-borrow', async (c) => {
170
- try {
171
- const result = await agent.maxBorrow();
172
- return c.json(envelope(result));
173
- }
174
- catch (err) {
175
- return c.json(errorResponse('MAX_BORROW_ERROR', errMsg(err)), 500);
176
- }
177
- });
178
- app.get('/v1/positions', async (c) => {
179
- try {
180
- const positions = await agent.positions();
181
- return c.json(envelope(positions));
182
- }
183
- catch (err) {
184
- return c.json(errorResponse('POSITIONS_ERROR', errMsg(err)), 500);
185
- }
186
- });
187
- // --- POST endpoints ---
188
- app.post('/v1/send', async (c) => {
189
- try {
190
- const body = await c.req.json();
191
- const { to, amount, asset } = body;
192
- if (!to || !amount) {
193
- c.status(400);
194
- return c.json(errorResponse('INVALID_PARAMS', 'Required: to, amount'));
195
- }
196
- const result = await agent.send({ to, amount, asset: asset ?? 'USDC' });
197
- return c.json(envelope(result));
198
- }
199
- catch (err) {
200
- c.status(getStatusCode(err));
201
- return c.json(handleApiError(err));
202
- }
203
- });
204
- app.post('/v1/save', async (c) => {
205
- try {
206
- const body = await c.req.json();
207
- const { amount } = body;
208
- if (!amount) {
209
- c.status(400);
210
- return c.json(errorResponse('INVALID_PARAMS', 'Required: amount'));
211
- }
212
- const result = await agent.save({ amount });
213
- return c.json(envelope(result));
214
- }
215
- catch (err) {
216
- c.status(getStatusCode(err));
217
- return c.json(handleApiError(err));
218
- }
219
- });
220
- app.post('/v1/supply', async (c) => {
221
- try {
222
- const body = await c.req.json();
223
- const { amount } = body;
224
- if (!amount) {
225
- c.status(400);
226
- return c.json(errorResponse('INVALID_PARAMS', 'Required: amount'));
227
- }
228
- const result = await agent.save({ amount });
229
- return c.json(envelope(result));
230
- }
231
- catch (err) {
232
- c.status(getStatusCode(err));
233
- return c.json(handleApiError(err));
234
- }
235
- });
236
- app.post('/v1/withdraw', async (c) => {
237
- try {
238
- const body = await c.req.json();
239
- const { amount } = body;
240
- if (!amount) {
241
- c.status(400);
242
- return c.json(errorResponse('INVALID_PARAMS', 'Required: amount'));
243
- }
244
- const result = await agent.withdraw({ amount });
245
- return c.json(envelope(result));
246
- }
247
- catch (err) {
248
- c.status(getStatusCode(err));
249
- return c.json(handleApiError(err));
250
- }
251
- });
252
- app.post('/v1/borrow', async (c) => {
253
- try {
254
- const body = await c.req.json();
255
- const { amount } = body;
256
- if (!amount) {
257
- c.status(400);
258
- return c.json(errorResponse('INVALID_PARAMS', 'Required: amount'));
259
- }
260
- const result = await agent.borrow({ amount });
261
- return c.json(envelope(result));
262
- }
263
- catch (err) {
264
- c.status(getStatusCode(err));
265
- return c.json(handleApiError(err));
266
- }
267
- });
268
- app.post('/v1/repay', async (c) => {
269
- try {
270
- const body = await c.req.json();
271
- const { amount } = body;
272
- if (!amount) {
273
- c.status(400);
274
- return c.json(errorResponse('INVALID_PARAMS', 'Required: amount'));
275
- }
276
- const result = await agent.repay({ amount });
277
- return c.json(envelope(result));
278
- }
279
- catch (err) {
280
- c.status(getStatusCode(err));
281
- return c.json(handleApiError(err));
282
- }
283
- });
284
- // --- SSE endpoint ---
285
- app.get('/v1/events', async (c) => {
286
- const subscribeParam = c.req.query('subscribe') ?? 'yield,balanceChange,healthWarning';
287
- const subscriptions = new Set(subscribeParam.split(',').map((s) => s.trim()));
288
- return streamSSE(c, async (stream) => {
289
- const handlers = [];
290
- for (const eventName of subscriptions) {
291
- const handler = (data) => {
292
- stream.writeSSE({ event: eventName, data: JSON.stringify(data) }).catch(() => { });
293
- };
294
- agent.on(eventName, handler);
295
- handlers.push({
296
- event: eventName,
297
- off: () => agent.off(eventName, handler),
298
- });
299
- }
300
- // Keep alive
301
- const keepAlive = setInterval(() => {
302
- stream.writeSSE({ event: 'ping', data: '{}' }).catch(() => { });
303
- }, 30_000);
304
- stream.onAbort(() => {
305
- clearInterval(keepAlive);
306
- for (const h of handlers)
307
- h.off();
308
- });
309
- // Block forever — SSE streams stay open
310
- await new Promise(() => { });
311
- });
312
- });
313
- return app;
314
- }
315
- function errMsg(err) {
316
- return err instanceof Error ? err.message : String(err);
317
- }
318
- function handleApiError(err) {
319
- const t2kErr = err;
320
- return errorResponse(t2kErr.code ?? 'UNKNOWN', t2kErr.message ?? errMsg(err), t2kErr.data, isRetryable(t2kErr.code));
321
- }
322
- function getStatusCode(err) {
323
- const code = err.code;
324
- if (!code)
325
- return 500;
326
- if (code === 'INSUFFICIENT_BALANCE')
327
- return 400;
328
- if (code === 'INVALID_ADDRESS')
329
- return 400;
330
- if (code === 'WITHDRAW_WOULD_LIQUIDATE')
331
- return 400;
332
- if (code === 'NO_COLLATERAL')
333
- return 400;
334
- return 500;
335
- }
336
- function isRetryable(code) {
337
- if (!code)
338
- return false;
339
- return ['RPC_ERROR', 'RPC_UNREACHABLE', 'SPONSOR_UNAVAILABLE', 'AUTO_TOPUP_FAILED'].includes(code);
340
- }
341
- //# sourceMappingURL=serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerWithdraw(program: Command): void;
3
- //# sourceMappingURL=withdraw.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../src/commands/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAgChD"}
@@ -1,34 +0,0 @@
1
- import { T2000, formatUsd } from '@t2000/sdk';
2
- import { resolvePin } from '../prompts.js';
3
- import { printSuccess, printKeyValue, printBlank, printJson, isJsonMode, handleError, explorerUrl } from '../output.js';
4
- export function registerWithdraw(program) {
5
- program
6
- .command('withdraw')
7
- .description('Withdraw USDC from savings')
8
- .argument('<amount>', 'Amount to withdraw (or "all")')
9
- .option('--key <path>', 'Key file path')
10
- .option('--protocol <name>', 'Protocol to use (e.g. navi, suilend)')
11
- .action(async (amountStr, opts) => {
12
- try {
13
- const amount = amountStr === 'all' ? 'all' : parseFloat(amountStr);
14
- if (amount !== 'all' && (isNaN(amount) || amount <= 0)) {
15
- throw new Error('Amount must be a positive number or "all"');
16
- }
17
- const pin = await resolvePin();
18
- const agent = await T2000.create({ pin, keyPath: opts.key });
19
- const result = await agent.withdraw({ amount, protocol: opts.protocol });
20
- if (isJsonMode()) {
21
- printJson(result);
22
- return;
23
- }
24
- printBlank();
25
- printSuccess(`Withdrew ${formatUsd(result.amount)} USDC`);
26
- printKeyValue('Tx', explorerUrl(result.tx));
27
- printBlank();
28
- }
29
- catch (error) {
30
- handleError(error);
31
- }
32
- });
33
- }
34
- //# sourceMappingURL=withdraw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../src/commands/withdraw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;SACrD,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAmB,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACnF,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEzE,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,UAAU,EAAE,CAAC;YACb,YAAY,CAAC,YAAY,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1D,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,UAAU,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}