errorhub-cli 1.1.5 → 1.1.6

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.
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "errorhub-cli",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",
7
7
  "bin": {
8
- "errorhub": "./dist/index.js"
8
+ "errorhub": "./dist/bundle.js"
9
9
  },
10
10
  "scripts": {
11
- "build": "tsc && javascript-obfuscator src --output dist --compact true --string-array true --self-defending true --string-array-encoding base64",
11
+ "build": "tsc && esbuild dist/index.js --bundle --platform=node --outfile=dist/bundle.js && javascript-obfuscator dist/bundle.js --output dist/bundle.js --compact true --string-array true --self-defending true --string-array-encoding base64",
12
12
  "prepublishOnly": "npm run build"
13
13
  },
14
14
  "keywords": [],
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,366 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import open from 'open';
4
- import express from 'express';
5
- import fs from 'fs';
6
- import os from 'os';
7
- import path from 'path';
8
- import net from 'net';
9
- import { fileURLToPath } from 'url';
10
- import clc from 'cli-color';
11
- const program = new Command();
12
- const __filename = fileURLToPath(import.meta.url);
13
- const __dirname = path.dirname(__filename);
14
- const CONFIG_PATH = path.join(os.homedir(), '.token.json');
15
- const PROJECTS = path.join(os.homedir(), 'projectId.json');
16
- // ─── Color Palette ────────────────────────────────────────────────────────────
17
- const c = {
18
- cyan: clc.xterm(51).bold,
19
- cyanDim: clc.xterm(38),
20
- teal: clc.xterm(6).bold,
21
- green: clc.xterm(46).bold,
22
- greenDim: clc.xterm(34),
23
- red: clc.xterm(196).bold,
24
- orange: clc.xterm(214).bold,
25
- yellow: clc.xterm(226).bold,
26
- white: clc.xterm(255).bold,
27
- dim: clc.xterm(240),
28
- bgTeal: clc.bgXterm(6),
29
- bgRed: clc.bgXterm(196),
30
- bgGreen: clc.bgXterm(28),
31
- bgOrange: clc.bgXterm(208),
32
- };
33
- const FRONTENDBASE = "https://errorhub.vercel.app";
34
- const BACKENDBASE = "https://errorhub.onrender.com";
35
- // ─── Layout Helpers ───────────────────────────────────────────────────────────
36
- const W = 62;
37
- const line = (char = '─') => c.teal('─'.repeat(W));
38
- const dLine = () => c.teal('═'.repeat(W));
39
- const blank = () => console.log(c.teal('│') + ' '.repeat(W - 2) + c.teal('│'));
40
- const boxRow = (text, color = c.white) => {
41
- const inner = W - 4;
42
- const stripped = text.replace(/\x1B\[[0-9;]*m/g, '');
43
- const pad = Math.max(0, inner - stripped.length);
44
- const left = Math.floor(pad / 2);
45
- const right = pad - left;
46
- console.log(c.teal('│') + ' ' + ' '.repeat(left) + color(text) + ' '.repeat(right) + ' ' + c.teal('│'));
47
- };
48
- const labelRow = (label, value) => {
49
- const l = c.cyanDim(label.padEnd(14));
50
- const v = c.white(value);
51
- const raw = label.padEnd(14) + value;
52
- const pad = Math.max(0, W - 4 - raw.length);
53
- console.log(c.teal('│') + ' ' + l + v + ' '.repeat(pad) + ' ' + c.teal('│'));
54
- };
55
- // ─── ASCII Logo ───────────────────────────────────────────────────────────────
56
- const LOGO = [
57
- '███████╗██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗██╗ ██╗██████╗ ',
58
- '██╔════╝██╔══██╗██╔══██╗██╔═══██╗██╔══██╗██║ ██║██║ ██║██╔══██╗',
59
- '█████╗ ██████╔╝██████╔╝██║ ██║██████╔╝███████║██║ ██║██████╔╝',
60
- '██╔══╝ ██╔══██╗██╔══██╗██║ ██║██╔══██╗██╔══██║██║ ██║██╔══██╗',
61
- '███████╗██║ ██║██║ ██║╚██████╔╝██║ ██║██║ ██║╚██████╔╝██████╔╝',
62
- '╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝',
63
- '',
64
- ' ██████╗██╗ ██╗ ',
65
- ' ██╔════╝██║ ██║ ',
66
- ' ██║ ██║ ██║ ',
67
- ' ██║ ██║ ██║ ',
68
- ' ╚██████╗███████╗██║ ',
69
- ' ╚═════╝╚══════╝╚═╝ ',
70
- ];
71
- const printLogo = () => {
72
- console.log('');
73
- LOGO.forEach((row, i) => {
74
- const color = i < 3 ? c.cyan : i < 6 ? c.teal : c.green;
75
- console.log(color(row));
76
- });
77
- console.log('');
78
- };
79
- // ─── Banner ───────────────────────────────────────────────────────────────────
80
- const printBanner = (title, subtitle) => {
81
- console.log('');
82
- console.log(c.teal('╔' + '═'.repeat(W - 2) + '╗'));
83
- boxRow('');
84
- boxRow(title, c.cyan);
85
- if (subtitle)
86
- boxRow(subtitle, c.dim);
87
- boxRow('');
88
- console.log(c.teal('╠' + '═'.repeat(W - 2) + '╣'));
89
- };
90
- const closeBanner = () => {
91
- console.log(c.teal('╚' + '═'.repeat(W - 2) + '╝'));
92
- console.log('');
93
- };
94
- // ─── Status Badges ────────────────────────────────────────────────────────────
95
- const badge = {
96
- ok: (msg) => console.log(c.bgGreen(' ✔ OK ') + ' ' + c.green(msg)),
97
- error: (msg) => console.log(c.bgRed(' ✘ ERR ') + ' ' + c.red(msg)),
98
- info: (msg) => console.log(c.bgTeal(' ℹ INFO') + ' ' + c.cyanDim(msg)),
99
- warn: (msg) => console.log(c.bgOrange(' ⚠ WARN') + ' ' + c.orange(msg)),
100
- loading: (msg) => console.log(c.cyan(' ⟳ ') + c.cyanDim(msg)),
101
- };
102
- // ─── Spinner ──────────────────────────────────────────────────────────────────
103
- const spinner = (label) => {
104
- const frames = ['⠋', '⠙', '⠸', '⠴', '⠦', '⠇'];
105
- let i = 0;
106
- const iv = setInterval(() => {
107
- process.stdout.write('\r' + c.cyan(frames[i++ % frames.length]) + ' ' + c.cyanDim(label));
108
- }, 80);
109
- return () => {
110
- clearInterval(iv);
111
- process.stdout.write('\r' + ' '.repeat(label.length + 4) + '\r');
112
- };
113
- };
114
- // ─── Section Divider ──────────────────────────────────────────────────────────
115
- const section = (title) => {
116
- console.log('');
117
- const l = '─'.repeat(4);
118
- console.log(c.teal(l) + ' ' + c.yellow(title.toUpperCase()) + ' ' + c.teal(l));
119
- };
120
- // ─── Free Port Helper ─────────────────────────────────────────────────────────
121
- function getFreePort(startPort = 4000) {
122
- return new Promise((resolve) => {
123
- const server = net.createServer();
124
- server.listen(startPort, () => {
125
- const port = server.address().port;
126
- server.close(() => resolve(port));
127
- });
128
- server.on('error', () => {
129
- resolve(getFreePort(startPort + 1));
130
- });
131
- });
132
- }
133
- // ─────────────────────────────────────────────────────────────────────────────
134
- // CLI Setup
135
- // ─────────────────────────────────────────────────────────────────────────────
136
- program
137
- .name('errorhub-cli')
138
- .description('CLI with JWT login')
139
- .version('1.0.1');
140
- // ─────────────────────────────────────────────────────────────────────────────
141
- // INIT
142
- // ─────────────────────────────────────────────────────────────────────────────
143
- program
144
- .command('init')
145
- .description('Initialize project')
146
- .action(async () => {
147
- printLogo();
148
- printBanner('PROJECT INITIALIZER', 'Setting up your workspace...');
149
- console.log(c.teal('│'));
150
- labelRow('Version:', '1.0.0');
151
- labelRow('Node:', process.version);
152
- labelRow('Platform:', process.platform);
153
- labelRow('CWD:', process.cwd().slice(0, 40));
154
- console.log(c.teal('│'));
155
- closeBanner();
156
- section('Launching Auth Server');
157
- console.log('');
158
- const app = express();
159
- const port = await getFreePort();
160
- const stop = spinner(`Starting local server on port ${port}...`);
161
- const server = app.listen(port, () => {
162
- stop();
163
- badge.ok(`Server listening on ${c.cyan(`http://localhost:${port}`)}`);
164
- const loginUrl = `${FRONTENDBASE}/login?callback=http://localhost:${port}/callback`;
165
- badge.info(`Opening: ${c.cyanDim(loginUrl)}`);
166
- console.log('');
167
- open(loginUrl);
168
- });
169
- section('Ready');
170
- console.log('');
171
- console.log(c.dim(' Waiting for browser login flow to complete...'));
172
- console.log('');
173
- });
174
- // ─────────────────────────────────────────────────────────────────────────────
175
- // LOGIN
176
- // ─────────────────────────────────────────────────────────────────────────────
177
- program
178
- .command('login')
179
- .description('Login and store JWT')
180
- .action(async () => {
181
- printLogo();
182
- printBanner('AUTHENTICATION', 'Secure JWT login flow');
183
- labelRow('Auth Server:', FRONTENDBASE);
184
- labelRow('Config Path:', CONFIG_PATH.replace(os.homedir(), '~'));
185
- console.log(c.teal('│'));
186
- closeBanner();
187
- section('Starting OAuth Flow');
188
- console.log('');
189
- const app = express();
190
- const port = await getFreePort();
191
- const stop = spinner(`Binding to port ${port}...`);
192
- const server = app.listen(port, () => {
193
- stop();
194
- const loginUrl = `${FRONTENDBASE}/login?callback=http://localhost:${port}/callback`;
195
- badge.ok(`Local callback server ready on port ${c.cyan(String(port))}`);
196
- badge.loading('Opening browser for login...');
197
- console.log('');
198
- open(loginUrl);
199
- });
200
- app.get('/callback', (req, res) => {
201
- const token = req.query.token;
202
- if (!token) {
203
- res.status(400).send(renderHtmlPage('Error', '✘ No token received.', '#ff2d2d'));
204
- badge.error('Callback hit but no token was received.');
205
- return;
206
- }
207
- fs.writeFileSync(CONFIG_PATH, JSON.stringify({ token }, null, 2));
208
- res.send(renderHtmlPage('Success!', '✔ Login successful — you may close this tab.', '#00e5a0'));
209
- section('Login Complete');
210
- console.log('');
211
- badge.ok('JWT received and stored successfully!');
212
- console.log('');
213
- console.log(c.teal('┌' + '─'.repeat(W - 2) + '┐'));
214
- const preview = token.length > 50
215
- ? token.slice(0, 24) + c.dim(' ··· ') + token.slice(-24)
216
- : token;
217
- boxRow('TOKEN PREVIEW', c.yellow);
218
- boxRow(preview, c.cyanDim);
219
- console.log(c.teal('└' + '─'.repeat(W - 2) + '┘'));
220
- console.log('');
221
- console.log(c.dim(` Saved to: ${CONFIG_PATH}`));
222
- console.log('');
223
- server.close();
224
- });
225
- });
226
- // ─────────────────────────────────────────────────────────────────────────────
227
- // WHOAMI
228
- // ─────────────────────────────────────────────────────────────────────────────
229
- program
230
- .command('whoami')
231
- .description('Read stored JWT')
232
- .action(() => {
233
- printLogo();
234
- printBanner('IDENTITY CHECK', 'Reading stored credentials');
235
- labelRow('Config:', CONFIG_PATH.replace(os.homedir(), '~'));
236
- console.log(c.teal('│'));
237
- closeBanner();
238
- if (!fs.existsSync(CONFIG_PATH)) {
239
- console.log('');
240
- badge.error('No credentials found. Run ' + c.cyan('errorhub login') + ' first.');
241
- console.log('');
242
- console.log(c.teal('┌' + '─'.repeat(W - 2) + '┐'));
243
- boxRow('NOT AUTHENTICATED', c.red);
244
- boxRow('Use: errorhub login', c.dim);
245
- console.log(c.teal('└' + '─'.repeat(W - 2) + '┘'));
246
- console.log('');
247
- return;
248
- }
249
- const data = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8'));
250
- const { token } = data;
251
- let jwtInfo = {};
252
- try {
253
- const [h, p] = token.split('.');
254
- jwtInfo.header = JSON.parse(Buffer.from(h, 'base64').toString());
255
- jwtInfo.payload = JSON.parse(Buffer.from(p, 'base64').toString());
256
- }
257
- catch {
258
- // not a valid JWT
259
- }
260
- section('Stored Token');
261
- console.log('');
262
- console.log(c.teal('┌' + '─'.repeat(W - 2) + '┐'));
263
- if (jwtInfo.payload) {
264
- const p = jwtInfo.payload;
265
- boxRow('JWT DECODED', c.yellow);
266
- console.log(c.teal('├' + '─'.repeat(W - 2) + '┤'));
267
- const fields = Object.entries({
268
- sub: p.sub ?? '—',
269
- name: p.name ?? '—',
270
- email: p.email ?? '—',
271
- role: p.role ?? '—',
272
- iat: p.iat ? new Date(p.iat * 1000).toISOString() : '—',
273
- exp: p.exp ? new Date(p.exp * 1000).toISOString() : '—',
274
- alg: jwtInfo.header?.alg ?? '—',
275
- });
276
- for (const [k, v] of fields) {
277
- labelRow(`${k}:`, String(v));
278
- }
279
- if (jwtInfo.payload.exp) {
280
- const expired = Date.now() / 1000 > jwtInfo.payload.exp;
281
- console.log(c.teal('├' + '─'.repeat(W - 2) + '┤'));
282
- boxRow(expired ? '⚠ TOKEN EXPIRED' : '✔ TOKEN VALID', expired ? c.red : c.green);
283
- }
284
- }
285
- console.log(c.teal('├' + '─'.repeat(W - 2) + '┤'));
286
- boxRow('RAW TOKEN', c.yellow);
287
- const chunks = token.match(/.{1,54}/g) ?? [token];
288
- for (const chunk of chunks) {
289
- boxRow(chunk, c.cyanDim);
290
- }
291
- console.log(c.teal('└' + '─'.repeat(W - 2) + '┘'));
292
- console.log('');
293
- });
294
- // ─────────────────────────────────────────────────────────────────────────────
295
- // PROJECT
296
- // ─────────────────────────────────────────────────────────────────────────────
297
- program
298
- .command('project <apiKey>')
299
- .description('Find and store project by API key')
300
- .action(async (apiKey) => {
301
- if (!fs.existsSync(CONFIG_PATH)) {
302
- badge.error('Not logged in. Run errorhub login first.');
303
- return;
304
- }
305
- const data = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8'));
306
- const token = data.token;
307
- const stop = spinner('Fetching projects...');
308
- try {
309
- const response = await fetch(`${BACKENDBASE}/projects`, {
310
- headers: { Authorization: `Bearer ${token}` }
311
- });
312
- const projects = await response.json();
313
- stop();
314
- const match = projects.find((p) => p.api_key === apiKey);
315
- if (!match) {
316
- badge.error('No project found with that API key.');
317
- return;
318
- }
319
- fs.writeFileSync(PROJECTS, JSON.stringify({ projectId: match.id }, null, 2));
320
- badge.ok(`Project found and saved: ${c.cyan(match.id)}`);
321
- }
322
- catch (e) {
323
- stop();
324
- badge.error('Failed to fetch projects. Check your connection.');
325
- }
326
- });
327
- // ─────────────────────────────────────────────────────────────────────────────
328
- // HTML Helper
329
- // ─────────────────────────────────────────────────────────────────────────────
330
- function renderHtmlPage(title, message, color) {
331
- return `<!DOCTYPE html>
332
- <html>
333
- <head>
334
- <meta charset="UTF-8"/>
335
- <title>${title}</title>
336
- <style>
337
- * { margin:0; padding:0; box-sizing:border-box; }
338
- body {
339
- background: #0a0e14;
340
- color: #e0e0e0;
341
- font-family: 'Courier New', monospace;
342
- display: flex;
343
- align-items: center;
344
- justify-content: center;
345
- height: 100vh;
346
- }
347
- .card {
348
- border: 1px solid ${color};
349
- padding: 3rem 4rem;
350
- text-align: center;
351
- box-shadow: 0 0 40px ${color}44;
352
- }
353
- h1 { font-size: 2.5rem; color: ${color}; letter-spacing: 0.2em; }
354
- p { margin-top: 1rem; color: #888; font-size: 0.9rem; }
355
- </style>
356
- </head>
357
- <body>
358
- <div class="card">
359
- <h1>${title}</h1>
360
- <p>${message}</p>
361
- </div>
362
- </body>
363
- </html>`;
364
- }
365
- program.parse();
366
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,GAAG,MAAM,WAAW,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAE3D,iFAAiF;AACjF,MAAM,CAAC,GAAG;IACR,IAAI,EAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI;IAC9B,OAAO,EAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACzB,IAAI,EAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;IAC7B,KAAK,EAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI;IAC9B,QAAQ,EAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACzB,GAAG,EAAS,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI;IAC/B,MAAM,EAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI;IAC/B,MAAM,EAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI;IAC/B,KAAK,EAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI;IAC/B,GAAG,EAAS,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,MAAM,EAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,OAAO,EAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;CAC7B,CAAC;AAEF,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,WAAW,GAAG,+BAA+B,CAAA;AAEnD,iFAAiF;AACjF,MAAM,CAAC,GAAG,EAAE,CAAC;AAEb,MAAM,IAAI,GAAI,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1G,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;IAChD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,IAAI,GAAG;IACX,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,mEAAmE;IACnE,EAAE;IACF,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;CACvE,CAAC;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,QAAiB,EAAE,EAAE;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,QAAQ;QAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,KAAK,GAAG;IACZ,EAAE,EAAO,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClF,KAAK,EAAI,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9E,IAAI,EAAK,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnF,IAAI,EAAK,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpF,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,GAAG,EAAE;QACV,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF,iFAAiF;AACjF,SAAS,WAAW,CAAC,SAAS,GAAG,IAAI;IACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,MAAM,IAAI,GAAI,MAAM,CAAC,OAAO,EAAsB,CAAC,IAAI,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,OAAO;KACJ,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,oBAAoB,CAAC;KACjC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,SAAS,EAAE,CAAC;IACZ,WAAW,CAAC,qBAAqB,EAAE,8BAA8B,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC;IAEd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,iCAAiC,IAAI,KAAK,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACnC,IAAI,EAAE,CAAC;QACP,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,GAAG,YAAY,oCAAoC,IAAI,WAAW,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,SAAS,EAAE,CAAC;IACZ,WAAW,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC;IAEd,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACnC,IAAI,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,GAAG,YAAY,oCAAoC,IAAI,WAAW,CAAC;QACpF,KAAK,CAAC,EAAE,CAAC,uCAAuC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC;QAExC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC,CAAC;YACjF,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,8CAA8C,EAAE,SAAS,CAAC,CAAC,CAAC;QAEhG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,EAAE,CAAC,uCAAuC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE;YAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iBAAiB,CAAC;KAC9B,MAAM,CAAC,GAAG,EAAE;IACX,SAAS,EAAE,CAAC;IACZ,WAAW,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAC;IAC5D,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,CAAC;IAEd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEvB,IAAI,OAAO,GAAoC,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IAED,OAAO,CAAC,cAAc,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAoB,MAAM,CAAC,OAAO,CAAC;YAC7C,GAAG,EAAI,CAAC,CAAC,GAAG,IAAM,GAAG;YACrB,IAAI,EAAG,CAAC,CAAC,IAAI,IAAK,GAAG;YACrB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;YACrB,IAAI,EAAG,CAAC,CAAC,IAAI,IAAK,GAAG;YACrB,GAAG,EAAI,CAAC,CAAC,GAAG,CAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;YAC5D,GAAG,EAAI,CAAC,CAAC,GAAG,CAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;YAC5D,GAAG,EAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG;SAClC,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IAGvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,WAAW,EAAE;YACtD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAC9C,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC;QAEP,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;QACP,KAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF,SAAS,cAAc,CAAC,KAAa,EAAE,OAAe,EAAE,KAAa;IACnE,OAAO;;;;WAIE,KAAK;;;;;;;;;;;;;0BAaU,KAAK;;;6BAGF,KAAK;;qCAEG,KAAK;;;;;;UAMhC,KAAK;SACN,OAAO;;;QAGR,CAAC;AACT,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}