@winspan/claude-forge 0.1.2 → 0.1.3

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 (120) hide show
  1. package/dist/autopilot/index.d.ts +0 -1
  2. package/dist/autopilot/index.d.ts.map +1 -1
  3. package/dist/autopilot/index.js +0 -1
  4. package/dist/autopilot/index.js.map +1 -1
  5. package/dist/autopilot/intent-engine.d.ts +2 -0
  6. package/dist/autopilot/intent-engine.d.ts.map +1 -1
  7. package/dist/autopilot/intent-engine.js +14 -0
  8. package/dist/autopilot/intent-engine.js.map +1 -1
  9. package/dist/autopilot/quality-gate.d.ts +7 -0
  10. package/dist/autopilot/quality-gate.d.ts.map +1 -1
  11. package/dist/autopilot/quality-gate.js +8 -0
  12. package/dist/autopilot/quality-gate.js.map +1 -1
  13. package/dist/cli/commands/init.d.ts +21 -0
  14. package/dist/cli/commands/init.d.ts.map +1 -1
  15. package/dist/cli/commands/init.js +203 -3
  16. package/dist/cli/commands/init.js.map +1 -1
  17. package/dist/cli/index.js +2 -1
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/tui.d.ts.map +1 -1
  20. package/dist/cli/tui.js +2 -0
  21. package/dist/cli/tui.js.map +1 -1
  22. package/dist/config/defaults.d.ts.map +1 -1
  23. package/dist/config/defaults.js +0 -2
  24. package/dist/config/defaults.js.map +1 -1
  25. package/dist/config/schema.d.ts +0 -2
  26. package/dist/config/schema.d.ts.map +1 -1
  27. package/dist/config/schema.js +0 -4
  28. package/dist/config/schema.js.map +1 -1
  29. package/dist/daemon/engine-registry/init-autopilot.d.ts +0 -2
  30. package/dist/daemon/engine-registry/init-autopilot.d.ts.map +1 -1
  31. package/dist/daemon/engine-registry/init-autopilot.js +2 -6
  32. package/dist/daemon/engine-registry/init-autopilot.js.map +1 -1
  33. package/dist/daemon/engine-registry.d.ts.map +1 -1
  34. package/dist/daemon/engine-registry.js +1 -2
  35. package/dist/daemon/engine-registry.js.map +1 -1
  36. package/dist/daemon/handler-context.d.ts +0 -2
  37. package/dist/daemon/handler-context.d.ts.map +1 -1
  38. package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -1
  39. package/dist/daemon/handlers/post-tool-use-handler.js +7 -0
  40. package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
  41. package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
  42. package/dist/daemon/handlers/pre-tool-use-handler.js +12 -13
  43. package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
  44. package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
  45. package/dist/daemon/handlers/stop-handler.js +20 -7
  46. package/dist/daemon/handlers/stop-handler.js.map +1 -1
  47. package/dist/daemon/handlers/user-prompt-handler.d.ts +4 -8
  48. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
  49. package/dist/daemon/handlers/user-prompt-handler.js +14 -44
  50. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  51. package/dist/daemon/index.d.ts.map +1 -1
  52. package/dist/daemon/index.js +7 -13
  53. package/dist/daemon/index.js.map +1 -1
  54. package/dist/hooks/check-context-limit.sh +0 -0
  55. package/dist/skill-registry/evolver.d.ts.map +1 -1
  56. package/dist/skill-registry/evolver.js +4 -2
  57. package/dist/skill-registry/evolver.js.map +1 -1
  58. package/package.json +10 -4
  59. package/dist/cli/commands/console.d.ts +0 -3
  60. package/dist/cli/commands/console.d.ts.map +0 -1
  61. package/dist/cli/commands/console.js +0 -11
  62. package/dist/cli/commands/console.js.map +0 -1
  63. package/dist/cli/interceptor.d.ts +0 -5
  64. package/dist/cli/interceptor.d.ts.map +0 -1
  65. package/dist/cli/interceptor.js +0 -55
  66. package/dist/cli/interceptor.js.map +0 -1
  67. package/dist/hooks/hooks/check-context-limit.sh +0 -97
  68. package/dist/hooks/hooks/notification.sh +0 -33
  69. package/dist/hooks/hooks/post-tool-use.sh +0 -49
  70. package/dist/hooks/hooks/pre-tool-use.sh +0 -55
  71. package/dist/hooks/hooks/stop.sh +0 -29
  72. package/dist/hooks/hooks/user-prompt-submit.sh +0 -72
  73. package/dist/skill-registry/recommender.d.ts +0 -25
  74. package/dist/skill-registry/recommender.d.ts.map +0 -1
  75. package/dist/skill-registry/recommender.js +0 -91
  76. package/dist/skill-registry/recommender.js.map +0 -1
  77. package/dist/tests/claude-api.test.d.ts +0 -2
  78. package/dist/tests/claude-api.test.d.ts.map +0 -1
  79. package/dist/tests/claude-api.test.js +0 -96
  80. package/dist/tests/claude-api.test.js.map +0 -1
  81. package/dist/tests/conversational-config-handler.test.d.ts +0 -2
  82. package/dist/tests/conversational-config-handler.test.d.ts.map +0 -1
  83. package/dist/tests/conversational-config-handler.test.js +0 -107
  84. package/dist/tests/conversational-config-handler.test.js.map +0 -1
  85. package/dist/tests/doc-sync.test.d.ts +0 -2
  86. package/dist/tests/doc-sync.test.d.ts.map +0 -1
  87. package/dist/tests/doc-sync.test.js +0 -148
  88. package/dist/tests/doc-sync.test.js.map +0 -1
  89. package/dist/tests/orchestration-config.test.d.ts +0 -2
  90. package/dist/tests/orchestration-config.test.d.ts.map +0 -1
  91. package/dist/tests/orchestration-config.test.js +0 -122
  92. package/dist/tests/orchestration-config.test.js.map +0 -1
  93. package/dist/tests/pipeline-options.test.d.ts +0 -2
  94. package/dist/tests/pipeline-options.test.d.ts.map +0 -1
  95. package/dist/tests/pipeline-options.test.js +0 -68
  96. package/dist/tests/pipeline-options.test.js.map +0 -1
  97. package/dist/tests/resume-context-gen.test.d.ts +0 -2
  98. package/dist/tests/resume-context-gen.test.d.ts.map +0 -1
  99. package/dist/tests/resume-context-gen.test.js +0 -93
  100. package/dist/tests/resume-context-gen.test.js.map +0 -1
  101. package/dist/tests/sqlite.test.d.ts +0 -2
  102. package/dist/tests/sqlite.test.d.ts.map +0 -1
  103. package/dist/tests/sqlite.test.js +0 -154
  104. package/dist/tests/sqlite.test.js.map +0 -1
  105. package/dist/tests/tracker.test.d.ts +0 -2
  106. package/dist/tests/tracker.test.d.ts.map +0 -1
  107. package/dist/tests/tracker.test.js +0 -75
  108. package/dist/tests/tracker.test.js.map +0 -1
  109. package/dist/tests/tui.test.d.ts +0 -2
  110. package/dist/tests/tui.test.d.ts.map +0 -1
  111. package/dist/tests/tui.test.js +0 -39
  112. package/dist/tests/tui.test.js.map +0 -1
  113. package/dist/tests/user-prompt-handler.test.d.ts +0 -2
  114. package/dist/tests/user-prompt-handler.test.d.ts.map +0 -1
  115. package/dist/tests/user-prompt-handler.test.js +0 -182
  116. package/dist/tests/user-prompt-handler.test.js.map +0 -1
  117. package/dist/tui/index.d.ts +0 -2
  118. package/dist/tui/index.d.ts.map +0 -1
  119. package/dist/tui/index.js +0 -486
  120. package/dist/tui/index.js.map +0 -1
package/dist/tui/index.js DELETED
@@ -1,486 +0,0 @@
1
- /**
2
- * TUI 控制台 — 纯 ANSI 实现,无需额外依赖
3
- * 实时展示守护进程状态、Pipeline、技能、蒸馏等信息
4
- */
5
- import net from 'net';
6
- import readline from 'readline';
7
- import path from 'path';
8
- import os from 'os';
9
- import { spawn } from 'child_process';
10
- const SOCKET_PATH = path.join(os.homedir(), '.claude-forge', 'daemon.sock');
11
- const EVENTS_JSONL = path.join(os.homedir(), '.claude-forge', 'events.jsonl');
12
- const REFRESH_MS = 2000;
13
- // ANSI 颜色
14
- const C = {
15
- reset: '\x1b[0m',
16
- bold: '\x1b[1m',
17
- dim: '\x1b[2m',
18
- green: '\x1b[32m',
19
- yellow: '\x1b[33m',
20
- red: '\x1b[31m',
21
- cyan: '\x1b[36m',
22
- blue: '\x1b[34m',
23
- magenta: '\x1b[35m',
24
- white: '\x1b[37m',
25
- bgBlue: '\x1b[44m',
26
- bgGreen: '\x1b[42m',
27
- bgRed: '\x1b[41m',
28
- };
29
- function color(c, text) { return `${c}${text}${C.reset}`; }
30
- function bold(text) { return color(C.bold, text); }
31
- function dim(text) { return color(C.dim, text); }
32
- function green(text) { return color(C.green, text); }
33
- function yellow(text) { return color(C.yellow, text); }
34
- function red(text) { return color(C.red, text); }
35
- function cyan(text) { return color(C.cyan, text); }
36
- function blue(text) { return color(C.blue, text); }
37
- function magenta(text) { return color(C.magenta, text); }
38
- function clearScreen() { process.stdout.write('\x1b[2J\x1b[H'); }
39
- function moveTo(row, col) { process.stdout.write(`\x1b[${row};${col}H`); }
40
- function hideCursor() { process.stdout.write('\x1b[?25l'); }
41
- function showCursor() { process.stdout.write('\x1b[?25h'); }
42
- function emptyState() {
43
- return {
44
- daemonRunning: false,
45
- daemonPid: null,
46
- uptime: '—',
47
- events: [],
48
- pipelines: [],
49
- skills: [],
50
- distillStats: { total: 0, distilled: 0, lastAt: '—' },
51
- profile: { complexity: '—', intervention: '—', sessions: 0 },
52
- logs: [],
53
- eventLogs: [],
54
- projectFilter: null,
55
- allProjects: [],
56
- lastRefresh: '—',
57
- error: null,
58
- commandMode: false,
59
- commandInput: '',
60
- outputMode: false,
61
- outputLines: [],
62
- outputTitle: '',
63
- };
64
- }
65
- function queryDaemon(command) {
66
- return new Promise((resolve, reject) => {
67
- const socket = net.createConnection(SOCKET_PATH);
68
- let buf = '';
69
- const timer = setTimeout(() => { socket.destroy(); reject(new Error('超时')); }, 3000);
70
- socket.on('connect', () => {
71
- socket.write(JSON.stringify({ type: 'tui_query', command }) + '\n');
72
- });
73
- socket.on('data', (d) => { buf += d.toString(); });
74
- socket.on('end', () => {
75
- clearTimeout(timer);
76
- try {
77
- resolve(JSON.parse(buf));
78
- }
79
- catch {
80
- resolve(null);
81
- }
82
- });
83
- socket.on('error', (e) => { clearTimeout(timer); reject(e); });
84
- });
85
- }
86
- function executeCommand(input) {
87
- return new Promise((resolve) => {
88
- const args = input.trim().split(/\s+/).filter(Boolean);
89
- if (args.length === 0) {
90
- resolve([]);
91
- return;
92
- }
93
- const lines = [];
94
- const proc = spawn('claude-forge', args, { stdio: ['ignore', 'pipe', 'pipe'] });
95
- const collect = (d) => {
96
- d.toString().split('\n').forEach(l => { if (l)
97
- lines.push(l); });
98
- };
99
- proc.stdout.on('data', collect);
100
- proc.stderr.on('data', collect);
101
- const timeout = setTimeout(() => {
102
- proc.kill();
103
- lines.push('(执行超时)');
104
- resolve(lines);
105
- }, 10000);
106
- proc.on('close', () => { clearTimeout(timeout); resolve(lines); });
107
- proc.on('error', (e) => { clearTimeout(timeout); lines.push(`错误:${e.message}`); resolve(lines); });
108
- });
109
- }
110
- async function fetchState() {
111
- const state = emptyState();
112
- state.lastRefresh = new Date().toLocaleTimeString();
113
- try {
114
- // 检查守护进程是否运行(通过 socket 连通性)
115
- const data = await queryDaemon('status');
116
- if (data) {
117
- state.daemonRunning = true;
118
- state.daemonPid = data.pid ?? null;
119
- state.uptime = data.uptime ?? '—';
120
- state.events = data.recentEvents ?? [];
121
- state.pipelines = data.pipelines ?? [];
122
- state.skills = data.skills ?? [];
123
- state.distillStats = data.distillStats ?? state.distillStats;
124
- state.profile = data.profile ?? state.profile;
125
- state.logs = data.logs ?? [];
126
- }
127
- }
128
- catch {
129
- // 守护进程未运行或不支持 tui_query,尝试读取日志文件
130
- state.daemonRunning = false;
131
- try {
132
- const fs = await import('fs');
133
- const logPath = path.join(os.homedir(), '.claude-forge', 'daemon.log');
134
- if (fs.existsSync(logPath)) {
135
- const lines = fs.readFileSync(logPath, 'utf-8').split('\n').filter(Boolean);
136
- state.logs = lines.slice(-20).reverse();
137
- // 从日志推断守护进程状态
138
- const lastLine = lines[lines.length - 1] ?? '';
139
- if (lastLine.includes('守护进程已启动')) {
140
- state.daemonRunning = true;
141
- const pidMatch = lastLine.match(/PID[::]\s*(\d+)/);
142
- if (pidMatch)
143
- state.daemonPid = parseInt(pidMatch[1]);
144
- }
145
- }
146
- }
147
- catch { /* ignore */ }
148
- }
149
- // 读取结构化事件日志(events.jsonl),与守护进程是否运行无关
150
- try {
151
- const fs = await import('fs');
152
- if (fs.existsSync(EVENTS_JSONL)) {
153
- const raw = fs.readFileSync(EVENTS_JSONL, 'utf-8');
154
- const entries = raw
155
- .split('\n')
156
- .filter(Boolean)
157
- .map(line => { try {
158
- return JSON.parse(line);
159
- }
160
- catch {
161
- return null;
162
- } })
163
- .filter((e) => e !== null);
164
- state.eventLogs = entries.slice(-200); // 保留最近 200 条
165
- // 收集所有项目名(取路径最后一段)
166
- const projects = [...new Set(entries.map(e => e.project))];
167
- state.allProjects = projects;
168
- }
169
- }
170
- catch { /* ignore */ }
171
- return state;
172
- }
173
- function termWidth() { return process.stdout.columns || 100; }
174
- function termHeight() { return process.stdout.rows || 30; }
175
- function hline(char = '─') { return char.repeat(termWidth()); }
176
- function box(title, content, width) {
177
- const w = width ?? termWidth();
178
- const inner = w - 2;
179
- const titleStr = ` ${title} `;
180
- const topLine = '┌' + titleStr + '─'.repeat(Math.max(0, inner - titleStr.length)) + '┐';
181
- const botLine = '└' + '─'.repeat(inner) + '┘';
182
- const lines = [topLine];
183
- for (const line of content) {
184
- const stripped = line.replace(/\x1b\[[0-9;]*m/g, '');
185
- const pad = Math.max(0, inner - stripped.length - 2);
186
- lines.push('│ ' + line + ' '.repeat(pad) + ' │');
187
- }
188
- lines.push(botLine);
189
- return lines;
190
- }
191
- function progressBar(pct, width = 20) {
192
- const filled = Math.round((pct / 100) * width);
193
- const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
194
- const color = pct >= 80 ? C.green : pct >= 40 ? C.yellow : C.red;
195
- return `${color}${bar}${C.reset} ${pct}%`;
196
- }
197
- function renderHeader(state) {
198
- const w = termWidth();
199
- const status = state.daemonRunning
200
- ? green('● 运行中') + (state.daemonPid ? dim(` PID:${state.daemonPid}`) : '')
201
- : red('○ 未运行');
202
- const title = bold(cyan(' ⚡ Claude Forge '));
203
- const refresh = dim(`刷新: ${state.lastRefresh}`);
204
- const uptime = dim(`运行时长: ${state.uptime}`);
205
- const right = `${uptime} ${refresh}`;
206
- const mid = ' '.repeat(Math.max(0, w - title.replace(/\x1b\[[0-9;]*m/g, '').length - status.replace(/\x1b\[[0-9;]*m/g, '').length - right.replace(/\x1b\[[0-9;]*m/g, '').length - 4));
207
- return [
208
- hline('═'),
209
- ` ${title} ${status}${mid}${right} `,
210
- hline('─'),
211
- ];
212
- }
213
- function renderPipelines(state) {
214
- const lines = [];
215
- if (state.pipelines.length === 0) {
216
- lines.push(dim(' 暂无活跃 Pipeline'));
217
- }
218
- else {
219
- for (const p of state.pipelines.slice(0, 3)) {
220
- const req = p.requirement.length > 30 ? p.requirement.slice(0, 30) + '…' : p.requirement;
221
- lines.push(` ${cyan(req)}`);
222
- lines.push(` 阶段: ${yellow(p.phase)} ${progressBar(p.progress, 16)}`);
223
- }
224
- }
225
- return box(bold('📋 Pipeline'), lines, Math.floor(termWidth() / 2));
226
- }
227
- function renderSkills(state) {
228
- const lines = [];
229
- if (state.skills.length === 0) {
230
- lines.push(dim(' 暂无技能数据'));
231
- }
232
- else {
233
- for (const s of state.skills.slice(0, 5)) {
234
- const score = s.score >= 80 ? green(`${s.score}`) : s.score >= 50 ? yellow(`${s.score}`) : red(`${s.score}`);
235
- lines.push(` ${cyan(s.name)} ${dim(`v${s.version}`)} 评分: ${score}`);
236
- }
237
- }
238
- return box(bold('🔧 技能'), lines, Math.floor(termWidth() / 2));
239
- }
240
- function renderStats(state) {
241
- const { total, distilled, lastAt } = state.distillStats;
242
- const pct = total > 0 ? Math.round((distilled / total) * 100) : 0;
243
- const lines = [
244
- ` 事件总数: ${cyan(String(total))} 已蒸馏: ${green(String(distilled))} ${progressBar(pct, 12)}`,
245
- ` 上次蒸馏: ${dim(lastAt)}`,
246
- ` 画像: 复杂度=${yellow(state.profile.complexity)} 干预=${magenta(state.profile.intervention)} 会话=${cyan(String(state.profile.sessions))}`,
247
- ];
248
- return box(bold('📊 统计'), lines);
249
- }
250
- function renderEvents(state) {
251
- const lines = [];
252
- if (state.events.length === 0) {
253
- lines.push(dim(' 暂无事件'));
254
- }
255
- else {
256
- for (const e of state.events.slice(0, 5)) {
257
- const proj = e.project.split('/').slice(-1)[0] ?? e.project;
258
- lines.push(` ${dim(e.time)} ${yellow(e.type.padEnd(12))} ${cyan(e.tool.padEnd(10))} ${dim(proj)}`);
259
- }
260
- }
261
- return box(bold('🔔 最近事件'), lines);
262
- }
263
- function renderLogs(state) {
264
- const maxLines = Math.max(3, termHeight() - 28);
265
- // 优先使用结构化事件日志
266
- if (state.eventLogs.length > 0) {
267
- const filtered = state.projectFilter
268
- ? state.eventLogs.filter(e => e.project === state.projectFilter)
269
- : state.eventLogs;
270
- const recent = filtered.slice(-maxLines).reverse();
271
- const filterLabel = state.projectFilter
272
- ? cyan(state.projectFilter.split('/').slice(-1)[0] ?? state.projectFilter)
273
- : dim('全部项目');
274
- const title = bold('📜 事件日志') + ' ' + dim('[Tab=切换项目]') + ' 过滤: ' + filterLabel;
275
- const lines = recent.length > 0
276
- ? recent.map(e => {
277
- const proj = e.project.split('/').slice(-1)[0] ?? e.project;
278
- const time = e.ts.slice(11, 19); // HH:MM:SS
279
- const msg = e.msg.length > termWidth() - 40 ? e.msg.slice(0, termWidth() - 43) + '…' : e.msg;
280
- const line = `${dim(time)} ${magenta(proj.padEnd(16))} ${yellow(e.event.padEnd(14))} ${dim(msg)}`;
281
- if (e.level === 'error')
282
- return ` ${red(line)}`;
283
- if (e.level === 'warn')
284
- return ` ${yellow(line)}`;
285
- return ` ${line}`;
286
- })
287
- : [dim(' 暂无事件日志')];
288
- return box(title, lines);
289
- }
290
- // 回退:显示守护进程纯文本日志
291
- const logs = state.logs.slice(0, maxLines);
292
- const lines = logs.length > 0
293
- ? logs.map(l => {
294
- const clean = l.replace(/^\[.*?\]\s*\[.*?\]\s*/, '');
295
- const short = clean.length > termWidth() - 6 ? clean.slice(0, termWidth() - 9) + '…' : clean;
296
- if (l.includes('[ERROR]') || l.includes('[错误]'))
297
- return ` ${red(short)}`;
298
- if (l.includes('[WARN]') || l.includes('[警告]'))
299
- return ` ${yellow(short)}`;
300
- return ` ${dim(short)}`;
301
- })
302
- : [dim(' 暂无日志')];
303
- return box(bold('📜 日志'), lines);
304
- }
305
- function renderHelp() {
306
- return dim(' q 退出 r 立即刷新 Tab 切换项目过滤 ↑↓ 滚动日志');
307
- }
308
- function renderCommandBar(state) {
309
- if (state.commandMode) {
310
- return cyan(':') + ' ' + state.commandInput + cyan('█');
311
- }
312
- return dim(' q 退出 r 刷新 Tab 切换项目 ') + cyan(':') + dim(' 输入命令');
313
- }
314
- function renderOutputScreen(state) {
315
- clearScreen();
316
- const w = termWidth();
317
- const sep = '═'.repeat(w);
318
- const lines = [];
319
- lines.push(sep);
320
- lines.push(` ${bold(cyan('$ claude-forge ' + state.outputTitle))}`);
321
- lines.push('─'.repeat(w));
322
- for (const l of state.outputLines) {
323
- lines.push(' ' + l);
324
- }
325
- if (state.outputLines.length === 0) {
326
- lines.push(dim(' (无输出)'));
327
- }
328
- lines.push('─'.repeat(w));
329
- lines.push(dim(' 按任意键返回'));
330
- lines.push(sep);
331
- process.stdout.write(lines.join('\n') + '\n');
332
- }
333
- function render(state) {
334
- if (state.outputMode) {
335
- renderOutputScreen(state);
336
- return;
337
- }
338
- clearScreen();
339
- const out = [];
340
- out.push(...renderHeader(state));
341
- // 两列布局:Pipeline | 技能
342
- const half = Math.floor(termWidth() / 2);
343
- const pipeLines = renderPipelines(state);
344
- const skillLines = renderSkills(state);
345
- const maxRows = Math.max(pipeLines.length, skillLines.length);
346
- for (let i = 0; i < maxRows; i++) {
347
- const left = (pipeLines[i] ?? '').padEnd(half);
348
- const right = skillLines[i] ?? '';
349
- out.push(left + right);
350
- }
351
- out.push(...renderStats(state));
352
- out.push(...renderEvents(state));
353
- out.push(...renderLogs(state));
354
- out.push(hline('─'));
355
- out.push(renderCommandBar(state));
356
- process.stdout.write(out.join('\n') + '\n');
357
- }
358
- export async function startTui() {
359
- hideCursor();
360
- readline.emitKeypressEvents(process.stdin);
361
- if (process.stdin.isTTY)
362
- process.stdin.setRawMode(true);
363
- let state = emptyState();
364
- let running = true;
365
- let projectFilter = null;
366
- const refresh = async () => {
367
- const newState = await fetchState();
368
- newState.projectFilter = projectFilter;
369
- state = newState;
370
- render(state);
371
- };
372
- await refresh();
373
- const timer = setInterval(refresh, REFRESH_MS);
374
- process.stdin.on('keypress', async (str, key) => {
375
- if (!key)
376
- return;
377
- // ── 全屏输出模式:任意键返回 ──────────────────────────────────────────
378
- if (state.outputMode) {
379
- state.outputMode = false;
380
- showCursor();
381
- hideCursor();
382
- await refresh();
383
- return;
384
- }
385
- // ── 命令输入模式 ──────────────────────────────────────────────────────
386
- if (state.commandMode) {
387
- if (key.name === 'escape') {
388
- state.commandMode = false;
389
- state.commandInput = '';
390
- hideCursor();
391
- render(state);
392
- return;
393
- }
394
- if (key.name === 'backspace') {
395
- state.commandInput = state.commandInput.slice(0, -1);
396
- render(state);
397
- return;
398
- }
399
- if (key.name === 'return') {
400
- const input = state.commandInput.trim();
401
- state.commandMode = false;
402
- hideCursor();
403
- if (input) {
404
- state.outputTitle = input;
405
- state.outputLines = ['执行中...'];
406
- state.outputMode = true;
407
- render(state);
408
- const lines = await executeCommand(input);
409
- state.outputLines = lines;
410
- render(state);
411
- }
412
- else {
413
- state.commandInput = '';
414
- render(state);
415
- }
416
- return;
417
- }
418
- // 可打印字符
419
- if (str && str.length === 1 && str.charCodeAt(0) >= 32) {
420
- state.commandInput += str;
421
- render(state);
422
- }
423
- return;
424
- }
425
- // ── 普通模式 ──────────────────────────────────────────────────────────
426
- if (key.name === 'q' || (key.ctrl && key.name === 'c')) {
427
- running = false;
428
- clearInterval(timer);
429
- showCursor();
430
- clearScreen();
431
- process.stdout.write('已退出 Claude Forge TUI\n');
432
- process.exit(0);
433
- }
434
- if (key.name === 'r') {
435
- await refresh();
436
- }
437
- if (str === ':') {
438
- state.commandMode = true;
439
- state.commandInput = '';
440
- showCursor();
441
- render(state);
442
- return;
443
- }
444
- if (key.name === 'tab') {
445
- // 切换项目过滤
446
- const projects = state.allProjects;
447
- if (projects.length === 0)
448
- return;
449
- if (projectFilter === null) {
450
- projectFilter = projects[0] ?? null;
451
- }
452
- else {
453
- const idx = projects.indexOf(projectFilter);
454
- if (idx === -1 || idx === projects.length - 1) {
455
- projectFilter = null; // 回到"全部"
456
- }
457
- else {
458
- projectFilter = projects[idx + 1] ?? null;
459
- }
460
- }
461
- state.projectFilter = projectFilter;
462
- render(state);
463
- }
464
- });
465
- process.on('SIGINT', () => {
466
- clearInterval(timer);
467
- showCursor();
468
- clearScreen();
469
- process.exit(0);
470
- });
471
- process.on('SIGTERM', () => {
472
- clearInterval(timer);
473
- showCursor();
474
- process.exit(0);
475
- });
476
- // 窗口大小变化时重绘
477
- process.stdout.on('resize', () => { render(state); });
478
- // 保持进程活跃
479
- await new Promise((resolve) => {
480
- const check = setInterval(() => { if (!running) {
481
- clearInterval(check);
482
- resolve();
483
- } }, 500);
484
- });
485
- }
486
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAC9E,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,UAAU;AACV,MAAM,CAAC,GAAG;IACR,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF,SAAS,KAAK,CAAC,CAAS,EAAE,IAAY,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3E,SAAS,IAAI,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAS,GAAG,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,SAAS,KAAK,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7D,SAAS,MAAM,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,SAAS,GAAG,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,SAAS,IAAI,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAS,IAAI,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAS,OAAO,CAAC,IAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjE,SAAS,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACjE,SAAS,MAAM,CAAC,GAAW,EAAE,GAAW,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5D,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAkC5D,SAAS,UAAU;IACjB,OAAO;QACL,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;QACrD,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE;QAC5D,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,GAAG;QAChB,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAErF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAE/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;YAC5B,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAEpD,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAmC,CAAC;QAC3E,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;YAC3B,KAAK,CAAC,SAAS,GAAI,IAAI,CAAC,GAAc,IAAI,IAAI,CAAC;YAC/C,KAAK,CAAC,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,GAAG,CAAC;YAC9C,KAAK,CAAC,MAAM,GAAI,IAAI,CAAC,YAAmC,IAAI,EAAE,CAAC;YAC/D,KAAK,CAAC,SAAS,GAAI,IAAI,CAAC,SAAmC,IAAI,EAAE,CAAC;YAClE,KAAK,CAAC,MAAM,GAAI,IAAI,CAAC,MAA6B,IAAI,EAAE,CAAC;YACzD,KAAK,CAAC,YAAY,GAAI,IAAI,CAAC,YAAyC,IAAI,KAAK,CAAC,YAAY,CAAC;YAC3F,KAAK,CAAC,OAAO,GAAI,IAAI,CAAC,OAA+B,IAAI,KAAK,CAAC,OAAO,CAAC;YACvE,KAAK,CAAC,IAAI,GAAI,IAAI,CAAC,IAAiB,IAAI,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;QACjC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;YACvE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5E,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxC,cAAc;gBACd,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACnD,IAAI,QAAQ;wBAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,OAAO,GAAoB,GAAG;iBACjC,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC;iBACzF,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACjD,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;YACpD,mBAAmB;YACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3D,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAExB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,KAAK,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;AAC9D,SAAS,UAAU,KAAK,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAE3D,SAAS,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/D,SAAS,GAAG,CAAC,KAAa,EAAE,OAAiB,EAAE,KAAc;IAC3D,MAAM,CAAC,GAAG,KAAK,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;IACxF,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAAK,GAAG,EAAE;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,OAAO,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,KAAe;IACnC,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;QAChC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,MAAM,KAAK,OAAO,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtL,OAAO;QACL,KAAK,CAAC,GAAG,CAAC;QACV,IAAI,KAAK,KAAK,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG;QACrC,KAAK,CAAC,GAAG,CAAC;KACX,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAe;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACzF,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,KAAe;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7G,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;IACxD,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG;QACZ,WAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAC3F,WAAW,GAAG,CAAC,MAAM,CAAC,EAAE;QACxB,aAAa,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;KACvI,CAAC;IACF,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,KAAe;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,KAAe;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhD,cAAc;IACd,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa;YAClC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,aAAa,CAAC;YAChE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;YACrC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC;YAC1E,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,OAAO,GAAG,WAAW,CAAC;QAChF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACb,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;gBAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC7F,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrG,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;oBAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACtB,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,iBAAiB;IACjB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACX,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAC7F,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe;IACvC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe;IACzC,WAAW,EAAE,CAAC;IACd,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,KAAe;IAC7B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,WAAW,EAAE,CAAC;IACd,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjC,qBAAqB;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAElC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,UAAU,EAAE,CAAC;IACb,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAExD,IAAI,KAAK,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAC;QACpC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;QACvC,KAAK,GAAG,QAAQ,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,OAAO,EAAE,CAAC;IAChB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAE/C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,6DAA6D;QAC7D,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YACzB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC1B,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;gBACxB,UAAU,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC7B,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACxC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC1B,UAAU,EAAE,CAAC;gBACb,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;oBAC1B,KAAK,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC1C,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;oBAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,QAAQ;YACR,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvD,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;YACD,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvD,OAAO,GAAG,KAAK,CAAC;YAChB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;YACzB,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;YACxB,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvB,SAAS;YACT,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;YACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAClC,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC5C,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,aAAa,GAAG,IAAI,CAAC,CAAC,SAAS;gBACjC,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,YAAY;IACZ,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,SAAS;IACT,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC"}