gdelt-ts-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js ADDED
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GdeltClient = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const constants_1 = require("./constants");
18
+ const enhanced_types_1 = require("./types/enhanced-types");
19
+ const query_builder_1 = require("./types/query-builder");
20
+ const type_guards_1 = require("./types/type-guards");
21
+ /**
22
+ * GDELT API Client
23
+ * A strongly-typed client for interacting with the GDELT API
24
+ */
25
+ class GdeltClient {
26
+ /**
27
+ * Creates a new GDELT API client
28
+ * @param config - The client configuration
29
+ */
30
+ constructor(config) {
31
+ var _a, _b, _c, _d, _e, _f;
32
+ this._baseUrl = (_a = config === null || config === void 0 ? void 0 : config.baseUrl) !== null && _a !== void 0 ? _a : constants_1.API_BASE_URL;
33
+ this._defaultFormat = (_b = config === null || config === void 0 ? void 0 : config.defaultFormat) !== null && _b !== void 0 ? _b : constants_1.EFormat.json;
34
+ this._retry = (_c = config === null || config === void 0 ? void 0 : config.retry) !== null && _c !== void 0 ? _c : true;
35
+ this._maxRetries = (_d = config === null || config === void 0 ? void 0 : config.maxRetries) !== null && _d !== void 0 ? _d : 3;
36
+ this._retryDelay = (_e = config === null || config === void 0 ? void 0 : config.retryDelay) !== null && _e !== void 0 ? _e : 1000;
37
+ this._axiosInstance = axios_1.default.create({
38
+ baseURL: this._baseUrl,
39
+ timeout: (_f = config === null || config === void 0 ? void 0 : config.timeout) !== null && _f !== void 0 ? _f : 30000,
40
+ headers: {
41
+ // Using type assertion to bypass ESLint naming convention check for HTTP headers
42
+ // eslint-disable-next-line @typescript-eslint/naming-convention
43
+ 'Accept': 'application/json',
44
+ // eslint-disable-next-line @typescript-eslint/naming-convention
45
+ 'Content-Type': 'application/json'
46
+ }
47
+ });
48
+ }
49
+ /**
50
+ * Creates a timespan string from a timespan object
51
+ * @param timespan - The timespan object
52
+ * @returns The timespan string
53
+ * @private
54
+ */
55
+ _createTimespanString(timespan) {
56
+ return `${timespan.value}${timespan.unit}`;
57
+ }
58
+ /**
59
+ * Validates API parameters
60
+ * @param params - The API parameters to validate
61
+ * @private
62
+ */
63
+ _validateParams(params) {
64
+ // Validate query parameter
65
+ if (!params.query || typeof params.query !== 'string' || params.query.trim() === '') {
66
+ throw new Error('Query parameter is required and must be a non-empty string');
67
+ }
68
+ // Validate maxrecords
69
+ if (params.maxrecords !== undefined) {
70
+ if (!Number.isInteger(params.maxrecords) || params.maxrecords < 1 || params.maxrecords > 250) {
71
+ throw new Error('maxrecords must be an integer between 1 and 250');
72
+ }
73
+ }
74
+ // Validate timelinesmooth
75
+ if (params.timelinesmooth !== undefined) {
76
+ if (!Number.isInteger(params.timelinesmooth) || params.timelinesmooth < 1 || params.timelinesmooth > 30) {
77
+ throw new Error('timelinesmooth must be an integer between 1 and 30');
78
+ }
79
+ }
80
+ // Validate datetime formats
81
+ const datetimeRegex = /^\d{14}$/;
82
+ if (params.startdatetime && !datetimeRegex.test(params.startdatetime)) {
83
+ throw new Error('startdatetime must be in YYYYMMDDHHMMSS format (14 digits)');
84
+ }
85
+ if (params.enddatetime && !datetimeRegex.test(params.enddatetime)) {
86
+ throw new Error('enddatetime must be in YYYYMMDDHHMMSS format (14 digits)');
87
+ }
88
+ // Validate timespan format if provided
89
+ if (params.timespan) {
90
+ const timespanRegex = /^\d+(?:min|h|d|w|m)$/;
91
+ if (!timespanRegex.test(params.timespan)) {
92
+ throw new Error('timespan must be in format like "1d", "2h", "30min", "1w", "3m"');
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Transforms API response data without mutating the original
98
+ * @param data - The original response data
99
+ * @returns The transformed response data
100
+ * @private
101
+ */
102
+ _transformResponse(data) {
103
+ if (!data || typeof data !== 'object') {
104
+ throw new Error('Invalid response data: expected object');
105
+ }
106
+ // Create a new object without mutating the original
107
+ const transformedData = Object.assign({}, data);
108
+ // Add status if missing
109
+ if (!('status' in transformedData)) {
110
+ transformedData['status'] = 'ok';
111
+ }
112
+ // Add count property for article list responses
113
+ if ('articles' in transformedData && Array.isArray(transformedData["articles"]) && !('count' in transformedData)) {
114
+ transformedData['count'] = transformedData["articles"].length;
115
+ }
116
+ // Add count property for image collage responses
117
+ if ('images' in transformedData && Array.isArray(transformedData["images"]) && !('count' in transformedData)) {
118
+ transformedData['count'] = transformedData["images"].length;
119
+ }
120
+ return transformedData;
121
+ }
122
+ /**
123
+ * Builds the query parameters for the API request
124
+ * @param params - The API parameters
125
+ * @returns The query parameters object
126
+ * @private
127
+ */
128
+ _buildQueryParams(params) {
129
+ const queryParams = {
130
+ query: params.query
131
+ };
132
+ if (params.mode) {
133
+ queryParams['mode'] = params.mode;
134
+ }
135
+ if (params.format) {
136
+ queryParams['format'] = params.format;
137
+ }
138
+ else {
139
+ queryParams['format'] = this._defaultFormat;
140
+ }
141
+ if (params.timespan) {
142
+ queryParams['timespan'] = params.timespan;
143
+ }
144
+ if (params.startdatetime) {
145
+ queryParams['startdatetime'] = params.startdatetime;
146
+ }
147
+ if (params.enddatetime) {
148
+ queryParams['enddatetime'] = params.enddatetime;
149
+ }
150
+ if (params.maxrecords) {
151
+ queryParams['maxrecords'] = params.maxrecords;
152
+ }
153
+ if (params.timelinesmooth) {
154
+ queryParams['timelinesmooth'] = params.timelinesmooth;
155
+ }
156
+ if (params.trans) {
157
+ queryParams['trans'] = params.trans;
158
+ }
159
+ if (params.sort) {
160
+ queryParams['sort'] = params.sort;
161
+ }
162
+ if (params.timezoom) {
163
+ queryParams['timezoom'] = params.timezoom;
164
+ }
165
+ if (params.callback && params.format === constants_1.EFormat.jsonp) {
166
+ queryParams['callback'] = params.callback;
167
+ }
168
+ return queryParams;
169
+ }
170
+ /**
171
+ * Makes a request to the GDELT API
172
+ * @param params - The API parameters
173
+ * @returns A promise that resolves to the API response
174
+ * @private
175
+ */
176
+ _makeRequest(params) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ // Validate parameters before making request
179
+ this._validateParams(params);
180
+ const queryParams = this._buildQueryParams(params);
181
+ let retries = 0;
182
+ const makeAxiosRequest = () => __awaiter(this, void 0, void 0, function* () {
183
+ try {
184
+ return yield this._axiosInstance.get('', {
185
+ params: queryParams
186
+ });
187
+ }
188
+ catch (error) {
189
+ if (this._retry && retries < this._maxRetries) {
190
+ retries++;
191
+ yield new Promise(resolve => setTimeout(resolve, this._retryDelay));
192
+ return makeAxiosRequest();
193
+ }
194
+ throw error;
195
+ }
196
+ });
197
+ const response = yield makeAxiosRequest();
198
+ // Handle string responses (error messages)
199
+ if (typeof response.data === 'string') {
200
+ throw new Error(response.data);
201
+ }
202
+ // Transform response data without mutating original
203
+ const transformedData = this._transformResponse(response.data);
204
+ return transformedData;
205
+ });
206
+ }
207
+ getArticles(paramsOrQuery, options) {
208
+ return __awaiter(this, void 0, void 0, function* () {
209
+ let finalParams;
210
+ if (typeof paramsOrQuery === 'string') {
211
+ finalParams = Object.assign({ query: paramsOrQuery }, options);
212
+ }
213
+ else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
214
+ finalParams = paramsOrQuery;
215
+ }
216
+ else {
217
+ throw new Error('Invalid parameters: expected object with query property or query string');
218
+ }
219
+ // Use enhanced validation
220
+ this._validateEnhancedParams(finalParams);
221
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.articleList, format: constants_1.EFormat.json }));
222
+ return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isArticleListResponse);
223
+ });
224
+ }
225
+ getImages(paramsOrQuery, options) {
226
+ return __awaiter(this, void 0, void 0, function* () {
227
+ let finalParams;
228
+ if (typeof paramsOrQuery === 'string') {
229
+ finalParams = Object.assign({ query: paramsOrQuery }, options);
230
+ }
231
+ else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
232
+ finalParams = paramsOrQuery;
233
+ }
234
+ else {
235
+ throw new Error('Invalid parameters: expected object with query property or query string');
236
+ }
237
+ // Use enhanced validation
238
+ this._validateEnhancedParams(finalParams);
239
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.imageCollageInfo, format: constants_1.EFormat.json }));
240
+ return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isImageCollageResponse);
241
+ });
242
+ }
243
+ getTimeline(paramsOrQuery, timespanOrOptions) {
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ let finalParams;
246
+ if (typeof paramsOrQuery === 'string') {
247
+ if (timespanOrOptions && typeof timespanOrOptions === 'string') {
248
+ finalParams = {
249
+ query: paramsOrQuery,
250
+ timespan: timespanOrOptions
251
+ };
252
+ }
253
+ else {
254
+ finalParams = Object.assign({ query: paramsOrQuery }, timespanOrOptions);
255
+ }
256
+ }
257
+ else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
258
+ finalParams = paramsOrQuery;
259
+ }
260
+ else {
261
+ throw new Error('Invalid parameters: expected object with query property or query string');
262
+ }
263
+ // Use enhanced validation
264
+ this._validateEnhancedParams(finalParams);
265
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineVolume, format: constants_1.EFormat.json }));
266
+ return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
267
+ });
268
+ }
269
+ getTimelineWithArticles(paramsOrQuery, options) {
270
+ return __awaiter(this, void 0, void 0, function* () {
271
+ let finalParams;
272
+ if (typeof paramsOrQuery === 'string') {
273
+ finalParams = Object.assign({ query: paramsOrQuery }, options);
274
+ }
275
+ else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
276
+ finalParams = paramsOrQuery;
277
+ }
278
+ else {
279
+ throw new Error('Invalid parameters: expected object with query property or query string');
280
+ }
281
+ this._validateEnhancedParams(finalParams);
282
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineVolumeInfo, format: constants_1.EFormat.json }));
283
+ return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
284
+ });
285
+ }
286
+ /**
287
+ * Gets a timeline of news coverage volume broken down by language that matches the query
288
+ * @param params - The API parameters
289
+ * @returns A promise that resolves to the timeline breakdown response
290
+ */
291
+ getTimelineByLanguage(params) {
292
+ return __awaiter(this, void 0, void 0, function* () {
293
+ return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.timelineLanguage, format: constants_1.EFormat.json }));
294
+ });
295
+ }
296
+ /**
297
+ * Gets a timeline of news coverage volume broken down by source country that matches the query
298
+ * @param params - The API parameters
299
+ * @returns A promise that resolves to the timeline breakdown response
300
+ */
301
+ getTimelineByCountry(params) {
302
+ return __awaiter(this, void 0, void 0, function* () {
303
+ return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.timelineSourceCountry, format: constants_1.EFormat.json }));
304
+ });
305
+ }
306
+ getTimelineTone(paramsOrQuery, options) {
307
+ return __awaiter(this, void 0, void 0, function* () {
308
+ let finalParams;
309
+ if (typeof paramsOrQuery === 'string') {
310
+ finalParams = Object.assign({ query: paramsOrQuery }, options);
311
+ }
312
+ else if (typeof paramsOrQuery === 'object' && paramsOrQuery !== null && 'query' in paramsOrQuery) {
313
+ finalParams = paramsOrQuery;
314
+ }
315
+ else {
316
+ throw new Error('Invalid parameters: expected object with query property or query string');
317
+ }
318
+ this._validateEnhancedParams(finalParams);
319
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.timelineTone, format: constants_1.EFormat.json }));
320
+ return this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isTimelineResponse);
321
+ });
322
+ }
323
+ getToneChart(paramsOrQuery, options) {
324
+ return __awaiter(this, void 0, void 0, function* () {
325
+ let finalParams;
326
+ if (typeof paramsOrQuery === 'string') {
327
+ finalParams = Object.assign({ query: paramsOrQuery }, options);
328
+ }
329
+ else if (typeof paramsOrQuery === 'object' && 'query' in paramsOrQuery) {
330
+ finalParams = paramsOrQuery;
331
+ }
332
+ else {
333
+ throw new Error('Invalid parameters: expected object with query property or query string');
334
+ }
335
+ // Use enhanced validation
336
+ this._validateEnhancedParams(finalParams);
337
+ const response = yield this._makeRequest(Object.assign(Object.assign({}, finalParams), { mode: constants_1.EMode.toneChart, format: constants_1.EFormat.json }));
338
+ // Enhanced validation with type guard
339
+ const validatedResponse = this._transformAndValidateResponse(response, type_guards_1.TypeGuards.isToneChartResponse);
340
+ // Ensure the response has the expected structure
341
+ if (!validatedResponse.tonechart) {
342
+ throw new Error('Invalid response format from GDELT API: missing tonechart property');
343
+ }
344
+ return validatedResponse;
345
+ });
346
+ }
347
+ /**
348
+ * Gets a word cloud of image tags that match the query
349
+ * @param params - The API parameters
350
+ * @returns A promise that resolves to the word cloud response
351
+ */
352
+ getImageTagCloud(params) {
353
+ return __awaiter(this, void 0, void 0, function* () {
354
+ return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.wordCloudImageTags, format: constants_1.EFormat.json }));
355
+ });
356
+ }
357
+ /**
358
+ * Gets a word cloud of image web tags that match the query
359
+ * @param params - The API parameters
360
+ * @returns A promise that resolves to the word cloud response
361
+ */
362
+ getImageWebTagCloud(params) {
363
+ return __awaiter(this, void 0, void 0, function* () {
364
+ return this._makeRequest(Object.assign(Object.assign({}, params), { mode: constants_1.EMode.wordCloudImageWebTags, format: constants_1.EFormat.json }));
365
+ });
366
+ }
367
+ createTimespan(value, unit) {
368
+ const timespanStr = this._createTimespanString({ value, unit: unit });
369
+ // If using enhanced types, validate the result
370
+ const enhancedUnits = Object.values(enhanced_types_1.TimespanUnit);
371
+ if (enhancedUnits.includes(unit)) {
372
+ if (!(0, enhanced_types_1.isValidTimespan)(timespanStr)) {
373
+ throw new Error(`Invalid timespan format: ${timespanStr}`);
374
+ }
375
+ return timespanStr;
376
+ }
377
+ return timespanStr;
378
+ }
379
+ // ===== ENHANCED UTILITY METHODS =====
380
+ /**
381
+ * Create a new query builder for constructing complex queries
382
+ */
383
+ query() {
384
+ return query_builder_1.QueryHelpers.createQuery();
385
+ }
386
+ /**
387
+ * Create a specialized query builder for article searches
388
+ */
389
+ articleQuery() {
390
+ return query_builder_1.QueryHelpers.createArticleQuery();
391
+ }
392
+ /**
393
+ * Create a specialized query builder for image searches
394
+ */
395
+ imageQuery() {
396
+ return query_builder_1.QueryHelpers.createImageQuery();
397
+ }
398
+ /**
399
+ * Validate query string format and complexity
400
+ */
401
+ validateQuery(query) {
402
+ const errors = [];
403
+ if (!query || query.trim().length === 0) {
404
+ errors.push('Query cannot be empty');
405
+ }
406
+ if (!query_builder_1.QueryHelpers.isValidQuery(query)) {
407
+ errors.push('Query has unbalanced parentheses');
408
+ }
409
+ if (!query_builder_1.QueryHelpers.hasBalancedQuotes(query)) {
410
+ errors.push('Query has unbalanced quotes');
411
+ }
412
+ const complexity = query_builder_1.QueryHelpers.getQueryComplexity(query);
413
+ if (complexity > 50) {
414
+ errors.push(`Query complexity (${complexity}) may be too high and could cause timeouts`);
415
+ }
416
+ return {
417
+ valid: errors.length === 0,
418
+ errors
419
+ };
420
+ }
421
+ /**
422
+ * Get suggested optimizations for a query
423
+ */
424
+ getQueryOptimizations(query) {
425
+ const suggestions = [];
426
+ const complexity = query_builder_1.QueryHelpers.getQueryComplexity(query);
427
+ if (complexity > 30) {
428
+ suggestions.push('Consider breaking this complex query into smaller, more specific queries');
429
+ }
430
+ if (query.includes(' OR ') && query.split(' OR ').length > 10) {
431
+ suggestions.push('Consider reducing the number of OR terms for better performance');
432
+ }
433
+ if (!query.includes('timespan:') && !query.includes('startdatetime:')) {
434
+ suggestions.push('Consider adding a timespan constraint to limit the search scope');
435
+ }
436
+ if (query.length > 500) {
437
+ suggestions.push('Very long queries may hit URL length limits in some environments');
438
+ }
439
+ return suggestions;
440
+ }
441
+ // ===== ENHANCED TYPE VALIDATION =====
442
+ /**
443
+ * Enhanced parameter validation using new type guards
444
+ */
445
+ _validateEnhancedParams(params) {
446
+ // Run base validation first
447
+ this._validateParams(params);
448
+ // Enhanced validations using new type guards
449
+ if (params.timespan && !(0, enhanced_types_1.isValidTimespan)(params.timespan)) {
450
+ throw new Error(`Invalid timespan format: ${String(params.timespan)}. Must be like "1d", "2h", "30min", "1w", "3m"`);
451
+ }
452
+ if (params.startdatetime && !(0, enhanced_types_1.isValidDateTime)(params.startdatetime)) {
453
+ throw new Error(`Invalid startdatetime format: ${String(params.startdatetime)}. Must be YYYYMMDDHHMMSS`);
454
+ }
455
+ if (params.enddatetime && !(0, enhanced_types_1.isValidDateTime)(params.enddatetime)) {
456
+ throw new Error(`Invalid enddatetime format: ${String(params.enddatetime)}. Must be YYYYMMDDHHMMSS`);
457
+ }
458
+ if (params.maxrecords !== undefined && !(0, enhanced_types_1.isValidMaxRecords)(params.maxrecords)) {
459
+ throw new Error(`Invalid maxrecords: ${String(params.maxrecords)}. Must be an integer between 1 and 250`);
460
+ }
461
+ if (params.timelinesmooth !== undefined && !(0, enhanced_types_1.isValidTimelineSmooth)(params.timelinesmooth)) {
462
+ throw new Error(`Invalid timelinesmooth: ${String(params.timelinesmooth)}. Must be an integer between 1 and 30`);
463
+ }
464
+ }
465
+ /**
466
+ * Enhanced response validation and transformation
467
+ */
468
+ _transformAndValidateResponse(data, typeGuard) {
469
+ const transformedData = this._transformResponse(data);
470
+ // If a type guard is provided, use it for additional validation (only warn, don't throw)
471
+ if (typeGuard && !typeGuard(transformedData)) {
472
+ console.warn('Response validation warning: unexpected response structure');
473
+ }
474
+ return transformedData;
475
+ }
476
+ }
477
+ exports.GdeltClient = GdeltClient;
478
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA4D;AAC5D,2CAKqB;AAcrB,2DASgC;AAChC,yDAK+B;AAC/B,qDAAiD;AAEjD;;;GAGG;AACH,MAAa,WAAW;IAqCtB;;;OAGG;IACH,YAAmB,MAA2B;;QAC5C,IAAI,CAAC,QAAQ,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,wBAAY,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,mCAAI,mBAAO,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,IAAI,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,mCAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,mCAAI,IAAI,CAAC;QAE9C,IAAI,CAAC,cAAc,GAAG,eAAK,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,KAAK;YACjC,OAAO,EAAE;gBACP,iFAAiF;gBACjF,gEAAgE;gBAChE,QAAQ,EAAE,kBAAkB;gBAC5B,gEAAgE;gBAChE,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,qBAAqB,CAAC,QAAmB;QAC/C,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,MAA2B;QACjD,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC7F,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC;gBACxG,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,UAAU,CAAC;QACjC,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,uCAAuC;QACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,aAAa,GAAG,sBAAsB,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CAAmB,IAAa;QACxD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,oDAAoD;QACpD,MAAM,eAAe,GAAG,kBAAK,IAAI,CAA6B,CAAC;QAE/D,wBAAwB;QACxB,IAAI,CAAC,CAAC,QAAQ,IAAI,eAAe,CAAC,EAAE,CAAC;YACnC,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,gDAAgD;QAChD,IAAI,UAAU,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC;YACjH,eAAe,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QAChE,CAAC;QAED,iDAAiD;QACjD,IAAI,QAAQ,IAAI,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC;YAC7G,eAAe,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAC9D,CAAC;QAED,OAAO,eAAoB,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,MAA2B;QACnD,MAAM,WAAW,GAAoC;YACnD,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9C,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,WAAW,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;QACtD,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,WAAW,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAClD,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAChD,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,WAAW,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;QACxD,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,mBAAO,CAAC,KAAK,EAAE,CAAC;YACvD,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC5C,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACW,YAAY,CAAmB,MAA2B;;YACtE,4CAA4C;YAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,MAAM,gBAAgB,GAAG,GAAoC,EAAE;gBAC7D,IAAI,CAAC;oBACH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAI,EAAE,EAAE;wBAC1C,MAAM,EAAE,WAAW;qBACpB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC9C,OAAO,EAAE,CAAC;wBACV,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;wBACpE,OAAO,gBAAgB,EAAE,CAAC;oBAC5B,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC,CAAA,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;YAE1C,2CAA2C;YAC3C,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,oDAAoD;YACpD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;YAElE,OAAO,eAAe,CAAC;QACzB,CAAC;KAAA;IAeY,WAAW,CACtB,aAA0D,EAC1D,OAAsC;;YAEtC,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,OAAO,CACX,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACzE,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,WAAW,EACvB,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,qBAAqB,CAAC,CAAC;QACxF,CAAC;KAAA;IAeY,SAAS,CACpB,aAA0D,EAC1D,OAAsC;;YAEtC,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,OAAO,CACX,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACzE,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,gBAAgB,EAC5B,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,sBAAsB,CAAC,CAAC;QACzF,CAAC;KAAA;IAeY,WAAW,CACtB,aAA0D,EAC1D,iBAAiE;;YAEjE,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;oBAC/D,WAAW,GAAG;wBACZ,KAAK,EAAE,aAAa;wBACpB,QAAQ,EAAE,iBAAiB;qBAC5B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,iBAAiB,CACrB,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACnG,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,cAAc,EAC1B,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,kBAAkB,CAAC,CAAC;QACrF,CAAC;KAAA;IAeY,uBAAuB,CAClC,aAA0D,EAC1D,OAAsC;;YAEtC,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,OAAO,CACX,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACnG,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,kBAAkB,EAC9B,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,kBAAkB,CAAC,CAAC;QACrF,CAAC;KAAA;IAED;;;;OAIG;IACU,qBAAqB,CAAC,MAA2B;;YAC5D,OAAO,IAAI,CAAC,YAAY,iCACnB,MAAM,KACT,IAAI,EAAE,iBAAK,CAAC,gBAAgB,EAC5B,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;QACL,CAAC;KAAA;IAED;;;;OAIG;IACU,oBAAoB,CAAC,MAA2B;;YAC3D,OAAO,IAAI,CAAC,YAAY,iCACnB,MAAM,KACT,IAAI,EAAE,iBAAK,CAAC,qBAAqB,EACjC,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;QACL,CAAC;KAAA;IAeY,eAAe,CAC1B,aAA0D,EAC1D,OAAsC;;YAEtC,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,OAAO,CACX,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACnG,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,YAAY,EACxB,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,OAAO,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,kBAAkB,CAAC,CAAC;QACrF,CAAC;KAAA;IAeY,YAAY,CACvB,aAA0D,EAC1D,OAAsC;;YAEtC,IAAI,WAAgC,CAAC;YAErC,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACtC,WAAW,mBACT,KAAK,EAAE,aAAa,IACjB,OAAO,CACX,CAAC;YACJ,CAAC;iBAAM,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBACzE,WAAW,GAAG,aAAa,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,iCACnC,WAAW,KACd,IAAI,EAAE,iBAAK,CAAC,SAAS,EACrB,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;YAEH,sCAAsC;YACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,wBAAU,CAAC,mBAAmB,CAAC,CAAC;YAEvG,iDAAiD;YACjD,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACxF,CAAC;YAED,OAAO,iBAAiB,CAAC;QAC3B,CAAC;KAAA;IAED;;;;OAIG;IACU,gBAAgB,CAAC,MAA2B;;YACvD,OAAO,IAAI,CAAC,YAAY,iCACnB,MAAM,KACT,IAAI,EAAE,iBAAK,CAAC,kBAAkB,EAC9B,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;QACL,CAAC;KAAA;IAED;;;;OAIG;IACU,mBAAmB,CAAC,MAA2B;;YAC1D,OAAO,IAAI,CAAC,YAAY,iCACnB,MAAM,KACT,IAAI,EAAE,iBAAK,CAAC,qBAAqB,EACjC,MAAM,EAAE,mBAAO,CAAC,IAAI,IACpB,CAAC;QACL,CAAC;KAAA;IAgBM,cAAc,CAAC,KAAa,EAAE,IAAsC;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAqB,EAAE,CAAC,CAAC;QAEvF,+CAA+C;QAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,6BAAY,CAAC,CAAC;QAClD,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,IAAA,gCAAe,EAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,WAA6B,CAAC;QACvC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,uCAAuC;IAEvC;;OAEG;IACI,KAAK;QACV,OAAO,4BAAY,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,OAAO,4BAAY,CAAC,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACI,UAAU;QACf,OAAO,4BAAY,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,KAAa;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,4BAAY,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,4BAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,UAAU,GAAG,4BAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,UAAU,4CAA4C,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,KAAa;QACxC,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,4BAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACpB,WAAW,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC9D,WAAW,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtE,WAAW,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,uCAAuC;IAEvC;;OAEG;IACK,uBAAuB,CAAC,MAA2B;QACzD,4BAA4B;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAA,gCAAe,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;QACvH,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,IAAA,gCAAe,EAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,IAAA,gCAAe,EAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAA,kCAAiB,EAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,wCAAwC,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,IAAA,sCAAqB,EAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,uCAAuC,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,6BAA6B,CAAmB,IAAa,EAAE,SAAgD;QACrH,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAI,IAAI,CAAC,CAAC;QAEzD,yFAAyF;QACzF,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA3sBD,kCA2sBC"}