@bubblelab/bubble-core 0.1.174 → 0.1.176

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 (50) hide show
  1. package/dist/bubble-bundle.d.ts +105 -27
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +8 -0
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/attio/attio.d.ts +563 -0
  6. package/dist/bubbles/service-bubble/attio/attio.d.ts.map +1 -0
  7. package/dist/bubbles/service-bubble/attio/attio.js +484 -0
  8. package/dist/bubbles/service-bubble/attio/attio.js.map +1 -0
  9. package/dist/bubbles/service-bubble/attio/attio.schema.d.ts +527 -0
  10. package/dist/bubbles/service-bubble/attio/attio.schema.d.ts.map +1 -0
  11. package/dist/bubbles/service-bubble/attio/attio.schema.js +386 -0
  12. package/dist/bubbles/service-bubble/attio/attio.schema.js.map +1 -0
  13. package/dist/bubbles/service-bubble/attio/attio.utils.d.ts +1 -0
  14. package/dist/bubbles/service-bubble/attio/attio.utils.d.ts.map +1 -0
  15. package/dist/bubbles/service-bubble/attio/attio.utils.js +4 -0
  16. package/dist/bubbles/service-bubble/attio/attio.utils.js.map +1 -0
  17. package/dist/bubbles/service-bubble/attio/index.d.ts +3 -0
  18. package/dist/bubbles/service-bubble/attio/index.d.ts.map +1 -0
  19. package/dist/bubbles/service-bubble/attio/index.js +3 -0
  20. package/dist/bubbles/service-bubble/attio/index.js.map +1 -0
  21. package/dist/bubbles/service-bubble/capability-pipeline.js +2 -2
  22. package/dist/bubbles/service-bubble/capability-pipeline.js.map +1 -1
  23. package/dist/bubbles/service-bubble/hubspot/hubspot.d.ts +388 -0
  24. package/dist/bubbles/service-bubble/hubspot/hubspot.d.ts.map +1 -0
  25. package/dist/bubbles/service-bubble/hubspot/hubspot.js +241 -0
  26. package/dist/bubbles/service-bubble/hubspot/hubspot.js.map +1 -0
  27. package/dist/bubbles/service-bubble/hubspot/hubspot.schema.d.ts +345 -0
  28. package/dist/bubbles/service-bubble/hubspot/hubspot.schema.d.ts.map +1 -0
  29. package/dist/bubbles/service-bubble/hubspot/hubspot.schema.js +180 -0
  30. package/dist/bubbles/service-bubble/hubspot/hubspot.schema.js.map +1 -0
  31. package/dist/bubbles/service-bubble/hubspot/index.d.ts +3 -0
  32. package/dist/bubbles/service-bubble/hubspot/index.d.ts.map +1 -0
  33. package/dist/bubbles/service-bubble/hubspot/index.js +3 -0
  34. package/dist/bubbles/service-bubble/hubspot/index.js.map +1 -0
  35. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts +5 -30
  36. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts.map +1 -1
  37. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js +70 -204
  38. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js.map +1 -1
  39. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts +4 -0
  40. package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts.map +1 -1
  41. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts +31 -0
  42. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts.map +1 -1
  43. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js +202 -39
  44. package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js.map +1 -1
  45. package/dist/bubbles.json +1598 -2
  46. package/dist/index.d.ts +4 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +2 -0
  49. package/dist/index.js.map +1 -1
  50. package/package.json +2 -2
@@ -0,0 +1,484 @@
1
+ import { CredentialType } from '@bubblelab/shared-schemas';
2
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
3
+ import { AttioParamsSchema, AttioResultSchema, } from './attio.schema.js';
4
+ const ATTIO_API_BASE = 'https://api.attio.com/v2';
5
+ export class AttioBubble extends ServiceBubble {
6
+ static service = 'attio';
7
+ static authType = 'oauth';
8
+ static bubbleName = 'attio';
9
+ static type = 'service';
10
+ static schema = AttioParamsSchema;
11
+ static resultSchema = AttioResultSchema;
12
+ static shortDescription = 'Attio CRM integration for managing records, notes, tasks, and lists';
13
+ static longDescription = `
14
+ Integrate with Attio CRM to manage your customer relationships.
15
+ Supported operations:
16
+ - Records: List, get, create, update, and delete records for any object type (people, companies, deals, custom objects)
17
+ - Notes: Create and list notes linked to records
18
+ - Tasks: Create, list, update, and delete CRM tasks with deadlines and assignees
19
+ - Lists & Entries: Manage pipeline lists and add/query entries
20
+ Authentication: OAuth2 with Bearer token
21
+ `;
22
+ static alias = 'attio';
23
+ constructor(params = {
24
+ operation: 'list_records',
25
+ object: 'people',
26
+ }, context) {
27
+ super(params, context);
28
+ }
29
+ chooseCredential() {
30
+ const params = this.params;
31
+ const credentials = params.credentials;
32
+ if (!credentials || typeof credentials !== 'object') {
33
+ return undefined;
34
+ }
35
+ return credentials[CredentialType.ATTIO_CRED];
36
+ }
37
+ async makeAttioRequest(path, options = {}) {
38
+ const token = this.chooseCredential();
39
+ if (!token) {
40
+ return { ok: false, error: 'Attio credential not found' };
41
+ }
42
+ const { method = 'GET', body, queryParams } = options;
43
+ let url = `${ATTIO_API_BASE}${path}`;
44
+ if (queryParams) {
45
+ const params = new URLSearchParams(queryParams);
46
+ url += `?${params.toString()}`;
47
+ }
48
+ const headers = {
49
+ Authorization: `Bearer ${token}`,
50
+ 'Content-Type': 'application/json',
51
+ };
52
+ try {
53
+ const fetchOptions = { method, headers };
54
+ if (body && method !== 'GET') {
55
+ fetchOptions.body = JSON.stringify(body);
56
+ }
57
+ const response = await fetch(url, fetchOptions);
58
+ const text = await response.text();
59
+ if (!response.ok) {
60
+ let errorMessage = `Attio API error (${response.status})`;
61
+ try {
62
+ const errorData = JSON.parse(text);
63
+ errorMessage = errorData.message || errorData.error || errorMessage;
64
+ }
65
+ catch {
66
+ if (text)
67
+ errorMessage += `: ${text.slice(0, 200)}`;
68
+ }
69
+ return { ok: false, error: errorMessage };
70
+ }
71
+ if (!text || text.trim() === '') {
72
+ return { ok: true };
73
+ }
74
+ const data = JSON.parse(text);
75
+ return { ok: true, data };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ ok: false,
80
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
81
+ };
82
+ }
83
+ }
84
+ async testCredential() {
85
+ const token = this.chooseCredential();
86
+ if (!token) {
87
+ throw new Error('Attio credentials are required');
88
+ }
89
+ try {
90
+ const response = await fetch(`${ATTIO_API_BASE}/self`, {
91
+ method: 'GET',
92
+ headers: {
93
+ Authorization: `Bearer ${token}`,
94
+ 'Content-Type': 'application/json',
95
+ },
96
+ });
97
+ return response.ok;
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ async performAction(context) {
104
+ void context;
105
+ const params = this.params;
106
+ const { operation } = params;
107
+ try {
108
+ switch (operation) {
109
+ case 'list_records':
110
+ return (await this.listRecords(params));
111
+ case 'get_record':
112
+ return (await this.getRecord(params));
113
+ case 'create_record':
114
+ return (await this.createRecord(params));
115
+ case 'update_record':
116
+ return (await this.updateRecord(params));
117
+ case 'delete_record':
118
+ return (await this.deleteRecord(params));
119
+ case 'create_note':
120
+ return (await this.createNote(params));
121
+ case 'list_notes':
122
+ return (await this.listNotes(params));
123
+ case 'create_task':
124
+ return (await this.createTask(params));
125
+ case 'list_tasks':
126
+ return (await this.listTasks(params));
127
+ case 'update_task':
128
+ return (await this.updateTask(params));
129
+ case 'delete_task':
130
+ return (await this.deleteTask(params));
131
+ case 'list_lists':
132
+ return (await this.listLists(params));
133
+ case 'create_entry':
134
+ return (await this.createEntry(params));
135
+ case 'list_entries':
136
+ return (await this.listEntries(params));
137
+ default:
138
+ throw new Error(`Unknown operation: ${operation}`);
139
+ }
140
+ }
141
+ catch (error) {
142
+ return {
143
+ operation,
144
+ success: false,
145
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
146
+ };
147
+ }
148
+ }
149
+ // ========================== Records ==========================
150
+ async listRecords(params) {
151
+ const body = {
152
+ limit: params.limit,
153
+ offset: params.offset,
154
+ };
155
+ if (params.sorts)
156
+ body.sorts = params.sorts;
157
+ if (params.filter)
158
+ body.filter = params.filter;
159
+ const result = await this.makeAttioRequest(`/objects/${encodeURIComponent(params.object)}/records/query`, { method: 'POST', body });
160
+ if (!result.ok) {
161
+ return {
162
+ operation: 'list_records',
163
+ success: false,
164
+ error: result.error || 'Failed to list records',
165
+ };
166
+ }
167
+ const responseData = result.data;
168
+ return {
169
+ operation: 'list_records',
170
+ records: responseData?.data || [],
171
+ next_page_offset: (params.offset ?? 0) + (params.limit ?? 25),
172
+ success: true,
173
+ error: '',
174
+ };
175
+ }
176
+ async getRecord(params) {
177
+ const result = await this.makeAttioRequest(`/objects/${encodeURIComponent(params.object)}/records/${encodeURIComponent(params.record_id)}`);
178
+ if (!result.ok) {
179
+ return {
180
+ operation: 'get_record',
181
+ success: false,
182
+ error: result.error || 'Failed to get record',
183
+ };
184
+ }
185
+ const responseData = result.data;
186
+ return {
187
+ operation: 'get_record',
188
+ record: responseData?.data,
189
+ success: true,
190
+ error: '',
191
+ };
192
+ }
193
+ /**
194
+ * Auto-fill `full_name` on personal-name values when only first/last are provided.
195
+ * Attio rejects name values without `full_name`.
196
+ */
197
+ normalizeValues(values) {
198
+ if (!values.name || !Array.isArray(values.name))
199
+ return values;
200
+ const normalized = { ...values };
201
+ normalized.name = values.name.map((v) => {
202
+ if (v.full_name || (!v.first_name && !v.last_name))
203
+ return v;
204
+ return {
205
+ ...v,
206
+ full_name: [v.first_name, v.last_name].filter(Boolean).join(' '),
207
+ };
208
+ });
209
+ return normalized;
210
+ }
211
+ async createRecord(params) {
212
+ const body = {
213
+ data: { values: this.normalizeValues(params.values) },
214
+ };
215
+ const path = `/objects/${encodeURIComponent(params.object)}/records`;
216
+ let method = 'POST';
217
+ let queryParams;
218
+ if (params.matching_attribute) {
219
+ method = 'PUT';
220
+ queryParams = { matching_attribute: params.matching_attribute };
221
+ }
222
+ const result = await this.makeAttioRequest(path, {
223
+ method,
224
+ body,
225
+ queryParams,
226
+ });
227
+ if (!result.ok) {
228
+ return {
229
+ operation: 'create_record',
230
+ success: false,
231
+ error: result.error || 'Failed to create record',
232
+ };
233
+ }
234
+ const responseData = result.data;
235
+ return {
236
+ operation: 'create_record',
237
+ record: responseData?.data,
238
+ success: true,
239
+ error: '',
240
+ };
241
+ }
242
+ async updateRecord(params) {
243
+ const result = await this.makeAttioRequest(`/objects/${encodeURIComponent(params.object)}/records/${encodeURIComponent(params.record_id)}`, {
244
+ method: 'PATCH',
245
+ body: { data: { values: this.normalizeValues(params.values) } },
246
+ });
247
+ if (!result.ok) {
248
+ return {
249
+ operation: 'update_record',
250
+ success: false,
251
+ error: result.error || 'Failed to update record',
252
+ };
253
+ }
254
+ const responseData = result.data;
255
+ return {
256
+ operation: 'update_record',
257
+ record: responseData?.data,
258
+ success: true,
259
+ error: '',
260
+ };
261
+ }
262
+ async deleteRecord(params) {
263
+ const result = await this.makeAttioRequest(`/objects/${encodeURIComponent(params.object)}/records/${encodeURIComponent(params.record_id)}`, { method: 'DELETE' });
264
+ return {
265
+ operation: 'delete_record',
266
+ success: result.ok,
267
+ error: result.ok ? '' : result.error || 'Failed to delete record',
268
+ };
269
+ }
270
+ // ========================== Notes ==========================
271
+ async createNote(params) {
272
+ const result = await this.makeAttioRequest('/notes', {
273
+ method: 'POST',
274
+ body: {
275
+ data: {
276
+ title: params.title,
277
+ content: params.content,
278
+ format: params.format,
279
+ parent_object: params.parent_object,
280
+ parent_record_id: params.parent_record_id,
281
+ },
282
+ },
283
+ });
284
+ if (!result.ok) {
285
+ return {
286
+ operation: 'create_note',
287
+ success: false,
288
+ error: result.error || 'Failed to create note',
289
+ };
290
+ }
291
+ const responseData = result.data;
292
+ return {
293
+ operation: 'create_note',
294
+ note: responseData?.data,
295
+ success: true,
296
+ error: '',
297
+ };
298
+ }
299
+ async listNotes(params) {
300
+ const queryParams = {
301
+ limit: String(params.limit),
302
+ offset: String(params.offset),
303
+ };
304
+ if (params.parent_object)
305
+ queryParams.parent_object = params.parent_object;
306
+ if (params.parent_record_id)
307
+ queryParams.parent_record_id = params.parent_record_id;
308
+ const result = await this.makeAttioRequest('/notes', { queryParams });
309
+ if (!result.ok) {
310
+ return {
311
+ operation: 'list_notes',
312
+ success: false,
313
+ error: result.error || 'Failed to list notes',
314
+ };
315
+ }
316
+ const responseData = result.data;
317
+ return {
318
+ operation: 'list_notes',
319
+ notes: responseData?.data || [],
320
+ success: true,
321
+ error: '',
322
+ };
323
+ }
324
+ // ========================== Tasks ==========================
325
+ async createTask(params) {
326
+ const taskData = {
327
+ content: params.content,
328
+ format: 'plaintext',
329
+ is_completed: params.is_completed ?? false,
330
+ deadline_at: params.deadline_at ?? null,
331
+ linked_records: params.linked_records ?? [],
332
+ assignees: params.assignees ?? [],
333
+ };
334
+ const result = await this.makeAttioRequest('/tasks', {
335
+ method: 'POST',
336
+ body: { data: taskData },
337
+ });
338
+ if (!result.ok) {
339
+ return {
340
+ operation: 'create_task',
341
+ success: false,
342
+ error: result.error || 'Failed to create task',
343
+ };
344
+ }
345
+ const responseData = result.data;
346
+ return {
347
+ operation: 'create_task',
348
+ task: responseData?.data,
349
+ success: true,
350
+ error: '',
351
+ };
352
+ }
353
+ async listTasks(params) {
354
+ const result = await this.makeAttioRequest('/tasks', {
355
+ queryParams: {
356
+ limit: String(params.limit),
357
+ offset: String(params.offset),
358
+ },
359
+ });
360
+ if (!result.ok) {
361
+ return {
362
+ operation: 'list_tasks',
363
+ success: false,
364
+ error: result.error || 'Failed to list tasks',
365
+ };
366
+ }
367
+ const responseData = result.data;
368
+ return {
369
+ operation: 'list_tasks',
370
+ tasks: responseData?.data || [],
371
+ success: true,
372
+ error: '',
373
+ };
374
+ }
375
+ async updateTask(params) {
376
+ const taskData = {};
377
+ if (params.content !== undefined)
378
+ taskData.content = params.content;
379
+ if (params.deadline_at !== undefined)
380
+ taskData.deadline_at = params.deadline_at;
381
+ if (params.is_completed !== undefined)
382
+ taskData.is_completed = params.is_completed;
383
+ const result = await this.makeAttioRequest(`/tasks/${encodeURIComponent(params.task_id)}`, {
384
+ method: 'PATCH',
385
+ body: { data: taskData },
386
+ });
387
+ if (!result.ok) {
388
+ return {
389
+ operation: 'update_task',
390
+ success: false,
391
+ error: result.error || 'Failed to update task',
392
+ };
393
+ }
394
+ const responseData = result.data;
395
+ return {
396
+ operation: 'update_task',
397
+ task: responseData?.data,
398
+ success: true,
399
+ error: '',
400
+ };
401
+ }
402
+ async deleteTask(params) {
403
+ const result = await this.makeAttioRequest(`/tasks/${encodeURIComponent(params.task_id)}`, { method: 'DELETE' });
404
+ return {
405
+ operation: 'delete_task',
406
+ success: result.ok,
407
+ error: result.ok ? '' : result.error || 'Failed to delete task',
408
+ };
409
+ }
410
+ // ========================== Lists & Entries ==========================
411
+ async listLists(params) {
412
+ const result = await this.makeAttioRequest('/lists', {
413
+ queryParams: {
414
+ limit: String(params.limit),
415
+ offset: String(params.offset),
416
+ },
417
+ });
418
+ if (!result.ok) {
419
+ return {
420
+ operation: 'list_lists',
421
+ success: false,
422
+ error: result.error || 'Failed to list lists',
423
+ };
424
+ }
425
+ const responseData = result.data;
426
+ return {
427
+ operation: 'list_lists',
428
+ lists: responseData?.data || [],
429
+ success: true,
430
+ error: '',
431
+ };
432
+ }
433
+ async createEntry(params) {
434
+ const result = await this.makeAttioRequest(`/lists/${encodeURIComponent(params.list)}/entries`, {
435
+ method: 'POST',
436
+ body: {
437
+ data: {
438
+ parent_object: params.parent_object,
439
+ parent_record_id: params.parent_record_id,
440
+ entry_values: params.entry_values,
441
+ },
442
+ },
443
+ });
444
+ if (!result.ok) {
445
+ return {
446
+ operation: 'create_entry',
447
+ success: false,
448
+ error: result.error || 'Failed to create entry',
449
+ };
450
+ }
451
+ const responseData = result.data;
452
+ return {
453
+ operation: 'create_entry',
454
+ entry: responseData?.data,
455
+ success: true,
456
+ error: '',
457
+ };
458
+ }
459
+ async listEntries(params) {
460
+ const body = {
461
+ limit: params.limit,
462
+ offset: params.offset,
463
+ };
464
+ if (params.filter)
465
+ body.filter = params.filter;
466
+ const result = await this.makeAttioRequest(`/lists/${encodeURIComponent(params.list)}/entries/query`, { method: 'POST', body });
467
+ if (!result.ok) {
468
+ return {
469
+ operation: 'list_entries',
470
+ success: false,
471
+ error: result.error || 'Failed to list entries',
472
+ };
473
+ }
474
+ const responseData = result.data;
475
+ return {
476
+ operation: 'list_entries',
477
+ entries: responseData?.data || [],
478
+ next_page_offset: (params.offset ?? 0) + (params.limit ?? 25),
479
+ success: true,
480
+ error: '',
481
+ };
482
+ }
483
+ }
484
+ //# sourceMappingURL=attio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attio.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/attio/attio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAElD,MAAM,OAAO,WAEX,SAAQ,aAGT;IACC,MAAM,CAAU,OAAO,GAAG,OAAO,CAAC;IAClC,MAAM,CAAU,QAAQ,GAAG,OAAgB,CAAC;IAC5C,MAAM,CAAU,UAAU,GAAG,OAAgB,CAAC;IAC9C,MAAM,CAAU,IAAI,GAAG,SAAkB,CAAC;IAC1C,MAAM,CAAU,MAAM,GAAG,iBAAiB,CAAC;IAC3C,MAAM,CAAU,YAAY,GAAG,iBAAiB,CAAC;IACjD,MAAM,CAAU,gBAAgB,GAC9B,qEAAqE,CAAC;IACxE,MAAM,CAAU,eAAe,GAAG;;;;;;;;GAQjC,CAAC;IACF,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC;IAEhC,YACE,SAAY;QACV,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,QAAQ;KACZ,EACN,OAAuB;QAEvB,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAES,gBAAgB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAqB,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,IAAY,EACZ,UAII,EAAE;QAEN,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEtD,IAAI,GAAG,GAAG,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;YAChD,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QACjC,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,YAAY,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YACtD,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,YAAY,GAAG,oBAAoB,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAC1D,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnC,YAAY,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,IAAI,YAAY,CAAC;gBACtE,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,IAAI;wBAAE,YAAY,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtD,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACtB,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,OAAO,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,KAAK,EAAE;oBAChC,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,OAAuB;QAEvB,KAAK,OAAO,CAAC;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAqB,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,IAAI,CAAC;YACH,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,cAAc;oBACjB,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAC5B,MAA6D,CAC9D,CAAwD,CAAC;gBAC5D,KAAK,YAAY;oBACf,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAC1B,MAA2D,CAC5D,CAAwD,CAAC;gBAC5D,KAAK,eAAe;oBAClB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAC7B,MAA8D,CAC/D,CAAwD,CAAC;gBAC5D,KAAK,eAAe;oBAClB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAC7B,MAA8D,CAC/D,CAAwD,CAAC;gBAC5D,KAAK,eAAe;oBAClB,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAC7B,MAA8D,CAC/D,CAAwD,CAAC;gBAC5D,KAAK,aAAa;oBAChB,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAC3B,MAA4D,CAC7D,CAAwD,CAAC;gBAC5D,KAAK,YAAY;oBACf,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAC1B,MAA2D,CAC5D,CAAwD,CAAC;gBAC5D,KAAK,aAAa;oBAChB,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAC3B,MAA4D,CAC7D,CAAwD,CAAC;gBAC5D,KAAK,YAAY;oBACf,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAC1B,MAA2D,CAC5D,CAAwD,CAAC;gBAC5D,KAAK,aAAa;oBAChB,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAC3B,MAA4D,CAC7D,CAAwD,CAAC;gBAC5D,KAAK,aAAa;oBAChB,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAC3B,MAA4D,CAC7D,CAAwD,CAAC;gBAC5D,KAAK,YAAY;oBACf,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAC1B,MAA2D,CAC5D,CAAwD,CAAC;gBAC5D,KAAK,cAAc;oBACjB,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAC5B,MAA6D,CAC9D,CAAwD,CAAC;gBAC5D,KAAK,cAAc;oBACjB,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAC5B,MAA6D,CAC9D,CAAwD,CAAC;gBAC5D;oBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,SAAS;gBACT,OAAO,EAAE,KAAK;gBACd,KAAK,EACH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;aACb,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,gEAAgE;IAExD,KAAK,CAAC,WAAW,CACvB,MAA2D;QAE3D,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QACF,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAC7D,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CACzB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,cAAc;YACzB,OAAO,EAAG,YAAY,EAAE,IAAkC,IAAI,EAAE;YAChE,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAyD;QAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAChG,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAsB;aAC9C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,YAAY,EAAE,IAAI;YAC1B,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,eAAe,CACrB,MAA+B;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;QAC/D,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACjC,UAAU,CAAC,IAAI,GAAI,MAAM,CAAC,IAAkC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACrE,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC7D,OAAO;gBACL,GAAG,CAAC;gBACJ,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aACjE,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAA4D;QAE5D,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;SACtD,CAAC;QAEF,MAAM,IAAI,GAAG,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrE,IAAI,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,WAA+C,CAAC;QAEpD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,GAAG,KAAK,CAAC;YACf,WAAW,GAAG,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC/C,MAAM;YACN,IAAI;YACJ,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,yBAAyB;aACjD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,eAAe;YAC1B,MAAM,EAAE,YAAY,EAAE,IAAI;YAC1B,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAA4D;QAE5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAC/F;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;SAChE,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,yBAAyB;aACjD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,eAAe;YAC1B,MAAM,EAAE,YAAY,EAAE,IAAI;YAC1B,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAA4D;QAE5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAC/F,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,yBAAyB;SAClE,CAAC;IACJ,CAAC;IAED,8DAA8D;IAEtD,KAAK,CAAC,UAAU,CACtB,MAA0D;QAE1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;iBAC1C;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,uBAAuB;aAC/C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,YAAY,EAAE,IAAI;YACxB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAyD;QAEzD,MAAM,WAAW,GAA2B;YAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SAC9B,CAAC;QACF,IAAI,MAAM,CAAC,aAAa;YAAE,WAAW,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3E,IAAI,MAAM,CAAC,gBAAgB;YACzB,WAAW,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAsB;aAC9C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAwC,CAAC;QACrE,OAAO;YACL,SAAS,EAAE,YAAY;YACvB,KAAK,EAAG,YAAY,EAAE,IAAkC,IAAI,EAAE;YAC9D,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,8DAA8D;IAEtD,KAAK,CAAC,UAAU,CACtB,MAA0D;QAE1D,MAAM,QAAQ,GAA4B;YACxC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,WAAW;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK;YAC1C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;YACvC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;YAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;SAClC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,uBAAuB;aAC/C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,YAAY,EAAE,IAAI;YACxB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAyD;QAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACnD,WAAW,EAAE;gBACX,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC9B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAsB;aAC9C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAwC,CAAC;QACrE,OAAO;YACL,SAAS,EAAE,YAAY;YACvB,KAAK,EAAG,YAAY,EAAE,IAAkC,IAAI,EAAE;YAC9D,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,MAA0D;QAE1D,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACpE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAClC,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC5C,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;YACnC,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,UAAU,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAC9C;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzB,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,uBAAuB;aAC/C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,IAAI,EAAE,YAAY,EAAE,IAAI;YACxB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,MAA0D;QAE1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,UAAU,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAC9C,EAAE,MAAM,EAAE,QAAQ,EAAE,CACrB,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,uBAAuB;SAChE,CAAC;IACJ,CAAC;IAED,wEAAwE;IAEhE,KAAK,CAAC,SAAS,CACrB,MAAyD;QAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACnD,WAAW,EAAE;gBACX,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC9B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAsB;aAC9C,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAwC,CAAC;QACrE,OAAO;YACL,SAAS,EAAE,YAAY;YACvB,KAAK,EAAG,YAAY,EAAE,IAAkC,IAAI,EAAE;YAC9D,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAA2D;QAE3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,UAAU,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EACnD;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;oBACzC,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAEf,CAAC;QACd,OAAO;YACL,SAAS,EAAE,cAAc;YACzB,KAAK,EAAE,YAAY,EAAE,IAAI;YACzB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAA2D;QAE3D,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;QACF,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,UAAU,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EACzD,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CACzB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAwC,CAAC;QACrE,OAAO;YACL,SAAS,EAAE,cAAc;YACzB,OAAO,EAAG,YAAY,EAAE,IAAkC,IAAI,EAAE;YAChE,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC"}