apcore-toolkit 0.4.1 → 0.5.1
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/CHANGELOG.md +68 -0
- package/LICENSE +185 -0
- package/README.md +91 -39
- package/dist/ai-enhancer.d.ts +18 -1
- package/dist/ai-enhancer.d.ts.map +1 -1
- package/dist/ai-enhancer.js +100 -23
- package/dist/ai-enhancer.js.map +1 -1
- package/dist/binding-loader.d.ts +55 -0
- package/dist/binding-loader.d.ts.map +1 -0
- package/dist/binding-loader.js +175 -0
- package/dist/binding-loader.js.map +1 -0
- package/dist/binding-parser.d.ts +80 -0
- package/dist/binding-parser.d.ts.map +1 -0
- package/dist/binding-parser.js +257 -0
- package/dist/binding-parser.js.map +1 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +46 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/{display-resolver.d.ts → display/resolver.d.ts} +14 -2
- package/dist/display/resolver.d.ts.map +1 -0
- package/dist/{display-resolver.js → display/resolver.js} +79 -25
- package/dist/display/resolver.js.map +1 -0
- package/dist/formatting/markdown.d.ts.map +1 -1
- package/dist/formatting/markdown.js +25 -22
- package/dist/formatting/markdown.js.map +1 -1
- package/dist/http-verb-map.d.ts +79 -0
- package/dist/http-verb-map.d.ts.map +1 -0
- package/dist/http-verb-map.js +179 -0
- package/dist/http-verb-map.js.map +1 -0
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +37 -10
- package/dist/openapi.js.map +1 -1
- package/dist/output/base-writer.d.ts +17 -0
- package/dist/output/base-writer.d.ts.map +1 -0
- package/dist/output/base-writer.js +34 -0
- package/dist/output/base-writer.js.map +1 -0
- package/dist/output/errors.d.ts +7 -2
- package/dist/output/errors.d.ts.map +1 -1
- package/dist/output/errors.js +8 -3
- package/dist/output/errors.js.map +1 -1
- package/dist/output/factory.d.ts +13 -1
- package/dist/output/factory.d.ts.map +1 -1
- package/dist/output/factory.js +21 -2
- package/dist/output/factory.js.map +1 -1
- package/dist/output/http-proxy-writer.d.ts +82 -0
- package/dist/output/http-proxy-writer.d.ts.map +1 -0
- package/dist/output/http-proxy-writer.js +222 -0
- package/dist/output/http-proxy-writer.js.map +1 -0
- package/dist/output/index.d.ts +1 -1
- package/dist/output/index.d.ts.map +1 -1
- package/dist/output/index.js +1 -1
- package/dist/output/index.js.map +1 -1
- package/dist/output/registry-writer.d.ts +23 -5
- package/dist/output/registry-writer.d.ts.map +1 -1
- package/dist/output/registry-writer.js +52 -14
- package/dist/output/registry-writer.js.map +1 -1
- package/dist/output/types.d.ts +1 -0
- package/dist/output/types.d.ts.map +1 -1
- package/dist/output/types.js.map +1 -1
- package/dist/output/typescript-writer.d.ts +14 -6
- package/dist/output/typescript-writer.d.ts.map +1 -1
- package/dist/output/typescript-writer.js +100 -32
- package/dist/output/typescript-writer.js.map +1 -1
- package/dist/output/verifiers.d.ts +1 -9
- package/dist/output/verifiers.d.ts.map +1 -1
- package/dist/output/verifiers.js +92 -42
- package/dist/output/verifiers.js.map +1 -1
- package/dist/output/verify-core.d.ts +20 -0
- package/dist/output/verify-core.d.ts.map +1 -0
- package/dist/output/verify-core.js +59 -0
- package/dist/output/verify-core.js.map +1 -0
- package/dist/output/yaml-writer.d.ts +18 -6
- package/dist/output/yaml-writer.d.ts.map +1 -1
- package/dist/output/yaml-writer.js +99 -42
- package/dist/output/yaml-writer.js.map +1 -1
- package/dist/resolve-target.d.ts.map +1 -1
- package/dist/resolve-target.js +34 -5
- package/dist/resolve-target.js.map +1 -1
- package/dist/safe-keys.d.ts +2 -0
- package/dist/safe-keys.d.ts.map +1 -0
- package/dist/safe-keys.js +19 -0
- package/dist/safe-keys.js.map +1 -0
- package/dist/scanner.d.ts +22 -0
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +40 -16
- package/dist/scanner.js.map +1 -1
- package/dist/schema-utils.d.ts.map +1 -1
- package/dist/schema-utils.js +13 -2
- package/dist/schema-utils.js.map +1 -1
- package/dist/serializers.d.ts.map +1 -1
- package/dist/serializers.js +2 -0
- package/dist/serializers.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +9 -2
- package/dist/display-resolver.d.ts.map +0 -1
- package/dist/display-resolver.js.map +0 -1
- package/dist/flatten-params.d.ts +0 -16
- package/dist/flatten-params.d.ts.map +0 -1
- package/dist/flatten-params.js +0 -18
- package/dist/flatten-params.js.map +0 -1
package/dist/ai-enhancer.js
CHANGED
|
@@ -68,6 +68,22 @@ function parseIntEnv(name, fallback) {
|
|
|
68
68
|
throw new Error(`${name} must be a valid integer, got "${raw}"`);
|
|
69
69
|
return val;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* AI-driven metadata enhancement using a local SLM (Small Language Model).
|
|
73
|
+
*
|
|
74
|
+
* Calls an OpenAI-compatible local API (Ollama, vLLM, LM Studio, etc.) to fill
|
|
75
|
+
* metadata gaps that static analysis cannot resolve: missing descriptions,
|
|
76
|
+
* behavioral annotation inference, and input schema generation for untyped
|
|
77
|
+
* functions.
|
|
78
|
+
*
|
|
79
|
+
* Enhancement is gated behind the `APCORE_AI_ENABLED` environment variable.
|
|
80
|
+
* All AI-generated fields are tagged with `x-generated-by: slm` in the module
|
|
81
|
+
* metadata for auditability.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const enhancer = new AIEnhancer({ endpoint: 'http://localhost:11434/v1', model: 'qwen:0.6b' });
|
|
85
|
+
* const enhanced = await enhancer.enhance(modules);
|
|
86
|
+
*/
|
|
71
87
|
export class AIEnhancer {
|
|
72
88
|
endpoint;
|
|
73
89
|
model;
|
|
@@ -80,6 +96,17 @@ export class AIEnhancer {
|
|
|
80
96
|
this.threshold = options?.threshold ?? parseFloatEnv('APCORE_AI_THRESHOLD', _DEFAULT_THRESHOLD);
|
|
81
97
|
this.batchSize = options?.batchSize ?? parseIntEnv('APCORE_AI_BATCH_SIZE', _DEFAULT_BATCH_SIZE);
|
|
82
98
|
this.timeout = options?.timeout ?? parseIntEnv('APCORE_AI_TIMEOUT', _DEFAULT_TIMEOUT);
|
|
99
|
+
try {
|
|
100
|
+
const parsed = new URL(this.endpoint);
|
|
101
|
+
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
102
|
+
throw new Error(`AIEnhancer endpoint must use http: or https: protocol, got "${parsed.protocol}"`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
if (err instanceof Error && err.message.startsWith('AIEnhancer endpoint'))
|
|
107
|
+
throw err;
|
|
108
|
+
throw new Error(`AIEnhancer endpoint is not a valid URL: ${this.endpoint}`, { cause: err });
|
|
109
|
+
}
|
|
83
110
|
if (this.threshold < 0 || this.threshold > 1) {
|
|
84
111
|
throw new Error('APCORE_AI_THRESHOLD must be a number between 0.0 and 1.0');
|
|
85
112
|
}
|
|
@@ -95,6 +122,8 @@ export class AIEnhancer {
|
|
|
95
122
|
return val === 'true' || val === '1' || val === 'yes';
|
|
96
123
|
}
|
|
97
124
|
async enhance(modules) {
|
|
125
|
+
if (!AIEnhancer.isEnabled())
|
|
126
|
+
return modules;
|
|
98
127
|
const results = [...modules];
|
|
99
128
|
const pending = [];
|
|
100
129
|
for (let i = 0; i < modules.length; i++) {
|
|
@@ -105,18 +134,35 @@ export class AIEnhancer {
|
|
|
105
134
|
}
|
|
106
135
|
for (let batchStart = 0; batchStart < pending.length; batchStart += this.batchSize) {
|
|
107
136
|
const batch = pending.slice(batchStart, batchStart + this.batchSize);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
137
|
+
const settled = await Promise.allSettled(batch.map(({ module, gaps }) => this._enhanceModule(module, gaps)));
|
|
138
|
+
for (let i = 0; i < batch.length; i++) {
|
|
139
|
+
const { idx, module } = batch[i];
|
|
140
|
+
const outcome = settled[i];
|
|
141
|
+
if (outcome.status === 'fulfilled') {
|
|
142
|
+
results[idx] = outcome.value;
|
|
112
143
|
}
|
|
113
|
-
|
|
114
|
-
|
|
144
|
+
else {
|
|
145
|
+
console.warn('AIEnhancer: enhancement failed for %s:', module.moduleId, outcome.reason);
|
|
115
146
|
}
|
|
116
147
|
}
|
|
117
148
|
}
|
|
118
149
|
return results;
|
|
119
150
|
}
|
|
151
|
+
_annotationsAreDefault(annotations) {
|
|
152
|
+
if (annotations == null)
|
|
153
|
+
return true;
|
|
154
|
+
const ann = annotations;
|
|
155
|
+
const def = DEFAULT_ANNOTATIONS;
|
|
156
|
+
return Object.keys(def).every((k) => {
|
|
157
|
+
// `extra` is an object type whose default is Object.freeze({}). Reference
|
|
158
|
+
// equality always fails after cloning, producing spurious SLM calls.
|
|
159
|
+
// The SLM never populates `extra` (excluded from ANNOTATION_FIELD_SPECS),
|
|
160
|
+
// so we skip it here to avoid false "not at default" readings.
|
|
161
|
+
if (k === 'extra')
|
|
162
|
+
return true;
|
|
163
|
+
return ann[k] === def[k];
|
|
164
|
+
});
|
|
165
|
+
}
|
|
120
166
|
_identifyGaps(module) {
|
|
121
167
|
const gaps = [];
|
|
122
168
|
if (!module.description || module.description === module.moduleId) {
|
|
@@ -125,10 +171,13 @@ export class AIEnhancer {
|
|
|
125
171
|
if (!module.documentation) {
|
|
126
172
|
gaps.push('documentation');
|
|
127
173
|
}
|
|
128
|
-
if (
|
|
174
|
+
if (this._annotationsAreDefault(module.annotations)) {
|
|
129
175
|
gaps.push('annotations');
|
|
130
176
|
}
|
|
131
|
-
const
|
|
177
|
+
const schema = module.inputSchema;
|
|
178
|
+
const props = typeof schema === 'object' && schema !== null && !Array.isArray(schema)
|
|
179
|
+
? schema.properties
|
|
180
|
+
: undefined;
|
|
132
181
|
if (!props || (typeof props === 'object' && Object.keys(props).length === 0)) {
|
|
133
182
|
gaps.push('input_schema');
|
|
134
183
|
}
|
|
@@ -139,7 +188,16 @@ export class AIEnhancer {
|
|
|
139
188
|
const response = await this._callLLM(prompt);
|
|
140
189
|
const parsed = AIEnhancer._parseResponse(response);
|
|
141
190
|
const updates = {};
|
|
142
|
-
|
|
191
|
+
// Build parsedConf from a null-prototype object so attacker-controlled
|
|
192
|
+
// keys like '__proto__' cannot affect prototype lookups.
|
|
193
|
+
const rawConf = parsed.confidence;
|
|
194
|
+
const parsedConf = Object.create(null);
|
|
195
|
+
if (rawConf !== null && typeof rawConf === 'object' && !Array.isArray(rawConf)) {
|
|
196
|
+
for (const [k, v] of Object.entries(rawConf)) {
|
|
197
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
198
|
+
parsedConf[k] = v;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
143
201
|
const confidence = {};
|
|
144
202
|
const warnings = [...module.warnings];
|
|
145
203
|
if (gaps.includes('description') && parsed.description) {
|
|
@@ -170,7 +228,7 @@ export class AIEnhancer {
|
|
|
170
228
|
const annData = parsed.annotations;
|
|
171
229
|
const accepted = {};
|
|
172
230
|
for (const [snakeKey, spec] of ANNOTATION_FIELD_SPECS) {
|
|
173
|
-
if (!(snakeKey
|
|
231
|
+
if (!Object.hasOwn(annData, snakeKey) || !spec.validate(annData[snakeKey]))
|
|
174
232
|
continue;
|
|
175
233
|
const fieldConf = parsedConf[`annotations.${snakeKey}`] ?? parsedConf[snakeKey] ?? 0;
|
|
176
234
|
confidence[`annotations.${snakeKey}`] = fieldConf;
|
|
@@ -189,8 +247,13 @@ export class AIEnhancer {
|
|
|
189
247
|
if (gaps.includes('input_schema') && parsed.input_schema) {
|
|
190
248
|
const conf = parsedConf.input_schema ?? 0;
|
|
191
249
|
confidence.input_schema = conf;
|
|
192
|
-
|
|
193
|
-
|
|
250
|
+
const s = parsed.input_schema;
|
|
251
|
+
const isValidShape = typeof s === 'object' && !Array.isArray(s) && s !== null && 'type' in s;
|
|
252
|
+
if (!isValidShape) {
|
|
253
|
+
warnings.push('SLM returned malformed input_schema (missing "type") — skipped. Review manually.');
|
|
254
|
+
}
|
|
255
|
+
else if (conf >= this.threshold) {
|
|
256
|
+
updates.inputSchema = s;
|
|
194
257
|
}
|
|
195
258
|
else {
|
|
196
259
|
warnings.push(`Low confidence (${conf.toFixed(2)}) for input_schema — skipped. Review manually.`);
|
|
@@ -244,9 +307,16 @@ export class AIEnhancer {
|
|
|
244
307
|
if (gaps.includes('input_schema')) {
|
|
245
308
|
parts.push(' "input_schema": <JSON Schema object for function parameters>,');
|
|
246
309
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
310
|
+
// Build confidence keys dynamically from all annotation fields so the
|
|
311
|
+
// prompt stays in sync as DEFAULT_ANNOTATIONS evolves upstream.
|
|
312
|
+
const confidenceKeys = Object.fromEntries(Object.keys(DEFAULT_ANNOTATIONS)
|
|
313
|
+
.filter(k => k !== 'extra')
|
|
314
|
+
.map(k => [camelToSnake(k), 0.0]));
|
|
315
|
+
const confidenceKeysJson = JSON.stringify(confidenceKeys, null, 4)
|
|
316
|
+
.split('\n')
|
|
317
|
+
.map((l, i) => i === 0 ? ` "confidence": ${l}` : ` ${l}`)
|
|
318
|
+
.join('\n');
|
|
319
|
+
parts.push(confidenceKeysJson);
|
|
250
320
|
parts.push('}');
|
|
251
321
|
parts.push('');
|
|
252
322
|
parts.push('Respond with ONLY valid JSON, no markdown fences or explanation.');
|
|
@@ -280,7 +350,7 @@ export class AIEnhancer {
|
|
|
280
350
|
}
|
|
281
351
|
catch (err) {
|
|
282
352
|
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
283
|
-
throw new Error(`SLM request timed out after ${this.timeout}s
|
|
353
|
+
throw new Error(`SLM request timed out after ${this.timeout}s`, { cause: err });
|
|
284
354
|
}
|
|
285
355
|
throw err;
|
|
286
356
|
}
|
|
@@ -290,19 +360,26 @@ export class AIEnhancer {
|
|
|
290
360
|
}
|
|
291
361
|
static _parseResponse(response) {
|
|
292
362
|
let text = response.trim();
|
|
363
|
+
// Strip markdown code fence: ```[lang]\n ... \n``` (closing fence optional)
|
|
293
364
|
if (text.startsWith('```')) {
|
|
294
|
-
const
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
365
|
+
const firstNl = text.indexOf('\n');
|
|
366
|
+
if (firstNl === -1) {
|
|
367
|
+
text = '';
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
text = text.slice(firstNl + 1);
|
|
371
|
+
if (text.endsWith('```')) {
|
|
372
|
+
const lastNl = text.lastIndexOf('\n');
|
|
373
|
+
text = lastNl === -1 ? '' : text.slice(0, lastNl);
|
|
374
|
+
}
|
|
375
|
+
text = text.trim();
|
|
376
|
+
}
|
|
300
377
|
}
|
|
301
378
|
try {
|
|
302
379
|
return JSON.parse(text);
|
|
303
380
|
}
|
|
304
381
|
catch (err) {
|
|
305
|
-
throw new Error(`SLM returned invalid JSON: ${err.message}
|
|
382
|
+
throw new Error(`SLM returned invalid JSON: ${err.message}`, { cause: err });
|
|
306
383
|
}
|
|
307
384
|
}
|
|
308
385
|
}
|
package/dist/ai-enhancer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-enhancer.js","sourceRoot":"","sources":["../src/ai-enhancer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-enhancer.js","sourceRoot":"","sources":["../src/ai-enhancer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoBzC,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC3E,IAAI,QAAQ,KAAK,OAAO;YAAE,SAAS;QACnC,IAAI,QAAiC,CAAC;QACtC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAClC,2DAA2D;YAC3D,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7C,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,oEAAoE;YACpE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,SAAS;QACX,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YAChC,QAAQ,EAAE,QAAmC;YAC7C,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAC;AAE3D,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AACtD,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,SAAS,aAAa,CAAC,IAAY,EAAE,QAAgB;IACnD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iCAAiC,GAAG,GAAG,CAAC,CAAC;IACvF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,GAAG,GAAG,CAAC,CAAC;IACxF,OAAO,GAAG,CAAC;AACb,CAAC;AAoBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,UAAU;IACZ,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,OAAO,CAAS;IAEzB,YAAY,OAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC;QACzF,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,cAAc,CAAC;QAC7E,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,aAAa,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,WAAW,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QAEtF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,+DAA+D,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;gBAAE,MAAM,GAAG,CAAC;YACrF,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS;QACd,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAAE,OAAO,OAAO,CAAC;QAC5C,MAAM,OAAO,GAAoB,CAAC,GAAG,OAAO,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAkE,EAAE,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACnE,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,WAAyC;QACtE,IAAI,WAAW,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,GAAG,GAAG,WAAiD,CAAC;QAC9D,MAAM,GAAG,GAAG,mBAAyD,CAAC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,0EAA0E;YAC1E,qEAAqE;YACrE,0EAA0E;YAC1E,+DAA+D;YAC/D,IAAI,CAAC,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC/B,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAqB;QACzC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAClC,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrE,CAAC,CAAE,MAAkC,CAAC,UAAU;YAChD,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAqB,EAAE,IAAc;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,uEAAuE;QACvE,yDAAyD;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;QAClC,MAAM,UAAU,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAC;QACzF,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;gBACxE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAa,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;YACzC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;YAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC;YAC3C,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAChC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACjG,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAsC,CAAC;YAC9D,MAAM,QAAQ,GAAsD,EAAE,CAAC;YACvE,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAAE,SAAS;gBACrF,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrF,UAAU,CAAC,eAAe,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC;gBAClD,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,QAAQ,8BAA8B,CAAC,CAAC;gBACpH,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,GAAG,mBAAmB,EAAE,CAAC;gBAC9D,OAAO,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC;YAC1C,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;YAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAK,CAAY,CAAC;YACzG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;YACpG,CAAC;iBAAM,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC/C,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAA4B,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACnC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC;QAEzC,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAA4B,CAAC,CAAC;IAC3F,CAAC;IAEO,YAAY,CAAC,MAAqB,EAAE,IAAc;QACxD,MAAM,KAAK,GAAG;YACZ,wFAAwF;YACxF,EAAE;YACF,cAAc,MAAM,CAAC,QAAQ,EAAE;YAC/B,WAAW,MAAM,CAAC,MAAM,EAAE;SAC3B,CAAC;QACF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAClE,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;QAED,sEAAsE;QACtE,gEAAgE;QAChE,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CACpC,CAAC;QACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;aAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAE/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAc;QACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC5B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8D,CAAC;YACpF,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,QAAgB;QAC5C,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,4EAA4E;QAC5E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,GAAG,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA+B,GAAa,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BindingLoader — parse `.binding.yaml` files back into `ScannedModule`.
|
|
3
|
+
*
|
|
4
|
+
* Inverse of {@link YAMLWriter}. Unlike apcore-js's binding loader (which
|
|
5
|
+
* imports the target and creates a runtime `FunctionModule`), this loader
|
|
6
|
+
* is pure data: it parses YAML into `ScannedModule` objects for validation,
|
|
7
|
+
* merging, diffing, or round-trip workflows. No module resolution occurs.
|
|
8
|
+
*
|
|
9
|
+
* This file adds the filesystem-reading entry point (`load(filePath)`) on
|
|
10
|
+
* top of the runtime-neutral parsing in `binding-parser.ts`. Consumers that
|
|
11
|
+
* only need to parse already-loaded documents (browsers, edge runtimes,
|
|
12
|
+
* workers) should use {@link BindingParser} or {@link parseBindingDocument}
|
|
13
|
+
* from `apcore-toolkit/browser` instead.
|
|
14
|
+
*/
|
|
15
|
+
import { BindingParser } from './binding-parser.js';
|
|
16
|
+
import type { BindingLoadOptions } from './binding-parser.js';
|
|
17
|
+
import type { ScannedModule } from './types.js';
|
|
18
|
+
export { BindingLoadError, BindingParser, parseBindingDocument } from './binding-parser.js';
|
|
19
|
+
export type { BindingLoadOptions } from './binding-parser.js';
|
|
20
|
+
/**
|
|
21
|
+
* Loads `.binding.yaml` files into `ScannedModule` objects.
|
|
22
|
+
*
|
|
23
|
+
* Extends {@link BindingParser} so `loadData(data)` (runtime-neutral parsing
|
|
24
|
+
* of pre-loaded documents) is also available on every `BindingLoader`
|
|
25
|
+
* instance — the class hierarchy mirrors the Python SDK's
|
|
26
|
+
* `BindingLoader.load_data` method.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const loader = new BindingLoader();
|
|
31
|
+
* const modules = loader.load('./bindings/');
|
|
32
|
+
* const strict = loader.load('foo.binding.yaml', { strict: true });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class BindingLoader extends BindingParser {
|
|
36
|
+
/**
|
|
37
|
+
* Load one file or every `*.binding.yaml` in a directory.
|
|
38
|
+
*
|
|
39
|
+
* @throws {BindingLoadError} when the path is missing, YAML is malformed,
|
|
40
|
+
* or any entry fails validation.
|
|
41
|
+
*/
|
|
42
|
+
load(filePath: string, options?: BindingLoadOptions): ScannedModule[];
|
|
43
|
+
/**
|
|
44
|
+
* Recursively collect `.binding.yaml` files under `dir`. Follows symlinks
|
|
45
|
+
* (for parity with the non-recursive branch, which reads file contents and
|
|
46
|
+
* thus transparently dereferences symlinks) and caps recursion at
|
|
47
|
+
* {@link MAX_RECURSION_DEPTH}. Permission errors (`EACCES`/`EPERM`) on an
|
|
48
|
+
* individual subdirectory are swallowed with a warning so one unreadable
|
|
49
|
+
* subtree does not abort loading of the rest; all other `readdirSync`
|
|
50
|
+
* failures (e.g. `EMFILE`, `ENOTDIR`) propagate so systemic problems are
|
|
51
|
+
* not silently turned into partial loads.
|
|
52
|
+
*/
|
|
53
|
+
private _collectRecursive;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=binding-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-loader.d.ts","sourceRoot":"","sources":["../src/binding-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAEL,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAU9D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,EAAE;IAiErE;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;CA6C1B"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BindingLoader — parse `.binding.yaml` files back into `ScannedModule`.
|
|
3
|
+
*
|
|
4
|
+
* Inverse of {@link YAMLWriter}. Unlike apcore-js's binding loader (which
|
|
5
|
+
* imports the target and creates a runtime `FunctionModule`), this loader
|
|
6
|
+
* is pure data: it parses YAML into `ScannedModule` objects for validation,
|
|
7
|
+
* merging, diffing, or round-trip workflows. No module resolution occurs.
|
|
8
|
+
*
|
|
9
|
+
* This file adds the filesystem-reading entry point (`load(filePath)`) on
|
|
10
|
+
* top of the runtime-neutral parsing in `binding-parser.ts`. Consumers that
|
|
11
|
+
* only need to parse already-loaded documents (browsers, edge runtimes,
|
|
12
|
+
* workers) should use {@link BindingParser} or {@link parseBindingDocument}
|
|
13
|
+
* from `apcore-toolkit/browser` instead.
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import * as yaml from 'js-yaml';
|
|
18
|
+
import { BindingLoadError, BindingParser, parseBindingDocument, } from './binding-parser.js';
|
|
19
|
+
// Re-export the runtime-neutral surface so the default package entry
|
|
20
|
+
// (`apcore-toolkit`) continues to expose exactly the same symbols it did
|
|
21
|
+
// before the split — existing consumers (`nestjs-apcore` etc.) see no
|
|
22
|
+
// change — plus the new {@link BindingParser} and
|
|
23
|
+
// {@link parseBindingDocument} additions that are now also available.
|
|
24
|
+
export { BindingLoadError, BindingParser, parseBindingDocument } from './binding-parser.js';
|
|
25
|
+
// Cap on directory recursion depth in `_collectRecursive`. This is the
|
|
26
|
+
// PRIMARY defense against symlink loops (`a -> b -> a`): `statSync` resolves
|
|
27
|
+
// symlinks but does not detect cycles, so a cyclic graph would recurse until
|
|
28
|
+
// the JS stack overflows without this cap. Also bounds worst-case stack
|
|
29
|
+
// usage on legitimately-deep trees; 64 is well above any realistic
|
|
30
|
+
// `.binding.yaml` layout.
|
|
31
|
+
const MAX_RECURSION_DEPTH = 64;
|
|
32
|
+
/**
|
|
33
|
+
* Loads `.binding.yaml` files into `ScannedModule` objects.
|
|
34
|
+
*
|
|
35
|
+
* Extends {@link BindingParser} so `loadData(data)` (runtime-neutral parsing
|
|
36
|
+
* of pre-loaded documents) is also available on every `BindingLoader`
|
|
37
|
+
* instance — the class hierarchy mirrors the Python SDK's
|
|
38
|
+
* `BindingLoader.load_data` method.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const loader = new BindingLoader();
|
|
43
|
+
* const modules = loader.load('./bindings/');
|
|
44
|
+
* const strict = loader.load('foo.binding.yaml', { strict: true });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export class BindingLoader extends BindingParser {
|
|
48
|
+
/**
|
|
49
|
+
* Load one file or every `*.binding.yaml` in a directory.
|
|
50
|
+
*
|
|
51
|
+
* @throws {BindingLoadError} when the path is missing, YAML is malformed,
|
|
52
|
+
* or any entry fails validation.
|
|
53
|
+
*/
|
|
54
|
+
load(filePath, options) {
|
|
55
|
+
const strict = options?.strict ?? false;
|
|
56
|
+
const recursive = options?.recursive ?? false;
|
|
57
|
+
let stat;
|
|
58
|
+
try {
|
|
59
|
+
stat = fs.statSync(filePath);
|
|
60
|
+
}
|
|
61
|
+
catch (exc) {
|
|
62
|
+
const code = exc.code;
|
|
63
|
+
const reason = code === 'ENOENT'
|
|
64
|
+
? 'path does not exist'
|
|
65
|
+
: `cannot stat path (${code ?? 'unknown'})`;
|
|
66
|
+
throw new BindingLoadError({ reason, filePath });
|
|
67
|
+
}
|
|
68
|
+
let files;
|
|
69
|
+
if (stat.isFile()) {
|
|
70
|
+
files = [filePath];
|
|
71
|
+
}
|
|
72
|
+
else if (stat.isDirectory()) {
|
|
73
|
+
if (recursive) {
|
|
74
|
+
files = this._collectRecursive(filePath).sort();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
files = fs
|
|
78
|
+
.readdirSync(filePath)
|
|
79
|
+
.filter((f) => f.endsWith('.binding.yaml'))
|
|
80
|
+
.sort()
|
|
81
|
+
.map((f) => path.join(filePath, f));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
throw new BindingLoadError({
|
|
86
|
+
reason: 'path is neither a file nor a directory',
|
|
87
|
+
filePath,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const modules = [];
|
|
91
|
+
for (const f of files) {
|
|
92
|
+
let content;
|
|
93
|
+
try {
|
|
94
|
+
content = fs.readFileSync(f, 'utf-8');
|
|
95
|
+
}
|
|
96
|
+
catch (exc) {
|
|
97
|
+
throw new BindingLoadError({
|
|
98
|
+
reason: `failed to read file: ${exc.message}`,
|
|
99
|
+
filePath: f,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
let raw;
|
|
103
|
+
try {
|
|
104
|
+
raw = yaml.load(content);
|
|
105
|
+
}
|
|
106
|
+
catch (exc) {
|
|
107
|
+
throw new BindingLoadError({
|
|
108
|
+
reason: `failed to parse YAML: ${exc.message}`,
|
|
109
|
+
filePath: f,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (raw == null) {
|
|
113
|
+
console.warn(`BindingLoader: ${f} is empty, skipping`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
modules.push(...parseBindingDocument(raw, { strict }, f));
|
|
117
|
+
}
|
|
118
|
+
return modules;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Recursively collect `.binding.yaml` files under `dir`. Follows symlinks
|
|
122
|
+
* (for parity with the non-recursive branch, which reads file contents and
|
|
123
|
+
* thus transparently dereferences symlinks) and caps recursion at
|
|
124
|
+
* {@link MAX_RECURSION_DEPTH}. Permission errors (`EACCES`/`EPERM`) on an
|
|
125
|
+
* individual subdirectory are swallowed with a warning so one unreadable
|
|
126
|
+
* subtree does not abort loading of the rest; all other `readdirSync`
|
|
127
|
+
* failures (e.g. `EMFILE`, `ENOTDIR`) propagate so systemic problems are
|
|
128
|
+
* not silently turned into partial loads.
|
|
129
|
+
*/
|
|
130
|
+
_collectRecursive(dir, depth = 0) {
|
|
131
|
+
if (depth > MAX_RECURSION_DEPTH) {
|
|
132
|
+
console.warn(`BindingLoader: max recursion depth (${MAX_RECURSION_DEPTH}) reached at ${dir}; stopping descent.`);
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
let entries;
|
|
136
|
+
try {
|
|
137
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
138
|
+
}
|
|
139
|
+
catch (exc) {
|
|
140
|
+
const code = exc.code;
|
|
141
|
+
if (code === 'EACCES' || code === 'EPERM') {
|
|
142
|
+
console.warn(`BindingLoader: cannot read ${dir}: ${exc.message}; skipping`);
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
throw exc;
|
|
146
|
+
}
|
|
147
|
+
const results = [];
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
const full = path.join(dir, entry.name);
|
|
150
|
+
let isDir = entry.isDirectory();
|
|
151
|
+
let isFile = entry.isFile();
|
|
152
|
+
// Dirent.isDirectory/isFile both return false for symlinks; follow the
|
|
153
|
+
// link with stat so symlinked bindings / bindings-dirs behave the same
|
|
154
|
+
// as real ones (matching non-recursive-branch behaviour).
|
|
155
|
+
if (entry.isSymbolicLink()) {
|
|
156
|
+
try {
|
|
157
|
+
const st = fs.statSync(full);
|
|
158
|
+
isDir = st.isDirectory();
|
|
159
|
+
isFile = st.isFile();
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (isDir) {
|
|
166
|
+
results.push(...this._collectRecursive(full, depth + 1));
|
|
167
|
+
}
|
|
168
|
+
else if (isFile && entry.name.endsWith('.binding.yaml')) {
|
|
169
|
+
results.push(full);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return results;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=binding-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-loader.js","sourceRoot":"","sources":["../src/binding-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime-neutral binding document parser.
|
|
3
|
+
*
|
|
4
|
+
* Contains the pure parsing logic shared by {@link BindingLoader} — it takes
|
|
5
|
+
* a pre-loaded `bindings` document (e.g. the result of `yaml.load()` or a
|
|
6
|
+
* JSON fetch response) and returns `ScannedModule[]`. No filesystem access.
|
|
7
|
+
*
|
|
8
|
+
* `BindingLoader` (in `binding-loader.ts`) extends {@link BindingParser} to
|
|
9
|
+
* add the `load(filePath)` entry point that reads from disk with `node:fs`.
|
|
10
|
+
* Consumers that only need in-memory parsing — browsers, edge runtimes,
|
|
11
|
+
* workers — import {@link BindingParser} or {@link parseBindingDocument}
|
|
12
|
+
* from here (or via `apcore-toolkit/browser`).
|
|
13
|
+
*/
|
|
14
|
+
import type { ScannedModule } from './types.js';
|
|
15
|
+
/** Options for {@link BindingParser} / {@link BindingLoader} methods. */
|
|
16
|
+
export interface BindingLoadOptions {
|
|
17
|
+
/**
|
|
18
|
+
* When `true`, also require `input_schema` and `output_schema`.
|
|
19
|
+
* Default: `false` (loose mode — only `module_id` and `target` required).
|
|
20
|
+
*/
|
|
21
|
+
strict?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* When `true` and the path is a directory, recursively walk subdirectories
|
|
24
|
+
* to find all `**\/*.binding.yaml` files. When `false` (default), only files
|
|
25
|
+
* in the immediate directory are loaded (flat glob behaviour).
|
|
26
|
+
*
|
|
27
|
+
* Only honoured by {@link BindingLoader.load}; ignored by
|
|
28
|
+
* {@link BindingParser.loadData} and {@link parseBindingDocument} which
|
|
29
|
+
* do not touch the filesystem.
|
|
30
|
+
*/
|
|
31
|
+
recursive?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** Thrown when a binding YAML entry cannot be parsed. */
|
|
34
|
+
export declare class BindingLoadError extends Error {
|
|
35
|
+
filePath: string | null;
|
|
36
|
+
moduleId: string | null;
|
|
37
|
+
missingFields: string[];
|
|
38
|
+
reason: string;
|
|
39
|
+
constructor(params: {
|
|
40
|
+
reason: string;
|
|
41
|
+
filePath?: string | null;
|
|
42
|
+
moduleId?: string | null;
|
|
43
|
+
missingFields?: string[];
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parse a binding document (already-loaded data, no filesystem access) into
|
|
48
|
+
* `ScannedModule[]`.
|
|
49
|
+
*
|
|
50
|
+
* Equivalent to {@link BindingParser.loadData} but lets callers supply an
|
|
51
|
+
* explicit `filePath` string that will be embedded in any
|
|
52
|
+
* {@link BindingLoadError} thrown for malformed entries — useful when you
|
|
53
|
+
* know the document came from a specific file (e.g. a server endpoint
|
|
54
|
+
* identifies it by path). Pass `null` when no file context applies.
|
|
55
|
+
*/
|
|
56
|
+
export declare function parseBindingDocument(raw: unknown, options?: BindingLoadOptions, filePath?: string | null): ScannedModule[];
|
|
57
|
+
/**
|
|
58
|
+
* Runtime-neutral binding parser.
|
|
59
|
+
*
|
|
60
|
+
* Parses pre-loaded `bindings` data (e.g. from `yaml.load()`, `fetch()` +
|
|
61
|
+
* `JSON.parse()`, etc.) into `ScannedModule[]`. Does not touch the
|
|
62
|
+
* filesystem — safe for browsers, edge runtimes, and workers.
|
|
63
|
+
*
|
|
64
|
+
* For filesystem-based loading, use {@link BindingLoader} (subclass,
|
|
65
|
+
* Node-only) which adds the `load(filePath)` entry point.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* import { BindingParser } from 'apcore-toolkit/browser';
|
|
70
|
+
*
|
|
71
|
+
* const resp = await fetch('/api/bindings.yaml');
|
|
72
|
+
* const doc = yaml.load(await resp.text());
|
|
73
|
+
* const mods = new BindingParser().loadData(doc);
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare class BindingParser {
|
|
77
|
+
/** Parse a pre-loaded binding dict (`{ bindings: [...] }`). */
|
|
78
|
+
loadData(data: Record<string, unknown>, options?: BindingLoadOptions): ScannedModule[];
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=binding-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-parser.d.ts","sourceRoot":"","sources":["../src/binding-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,yDAAyD;AACzD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;gBAEH,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B;CAcF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,aAAa,EAAE,CA4BjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,EAAE;CAGvF"}
|