@askdb/config 1.0.0-beta.16 → 1.0.0-beta.18
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/README.md +15 -4
- package/dist/ai-env.d.ts +31 -0
- package/dist/ai-env.d.ts.map +1 -0
- package/dist/ai-env.js +88 -0
- package/dist/ai-env.js.map +1 -0
- package/dist/bootstrap.d.ts +6 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -17
- package/dist/bootstrap.js.map +1 -1
- package/dist/defaults.d.ts +7 -20
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +7 -58
- package/dist/defaults.js.map +1 -1
- package/dist/env.d.ts +2 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +2 -1
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/load-merge.js +1 -1
- package/dist/load-merge.js.map +1 -1
- package/dist/projection.d.ts +12 -2
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +18 -6
- package/dist/projection.js.map +1 -1
- package/dist/resolve.d.ts +36 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/{normalize.js → resolve.js} +375 -8
- package/dist/resolve.js.map +1 -0
- package/dist/runtime-config.d.ts +5 -173
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +18 -222
- package/dist/runtime-config.js.map +1 -1
- package/dist/runtime-store.d.ts +9 -6
- package/dist/runtime-store.d.ts.map +1 -1
- package/dist/runtime-store.js +9 -11
- package/dist/runtime-store.js.map +1 -1
- package/dist/runtime-types.d.ts +176 -0
- package/dist/runtime-types.d.ts.map +1 -0
- package/dist/runtime-types.js +2 -0
- package/dist/runtime-types.js.map +1 -0
- package/dist/scaffold/ai.d.ts +3 -0
- package/dist/scaffold/ai.d.ts.map +1 -1
- package/dist/scaffold/ai.js +3 -0
- package/dist/scaffold/ai.js.map +1 -1
- package/dist/scaffold/index.d.ts +12 -3
- package/dist/scaffold/index.d.ts.map +1 -1
- package/dist/scaffold/index.js +10 -3
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scaffold/package-manager.d.ts +93 -0
- package/dist/scaffold/package-manager.d.ts.map +1 -0
- package/dist/scaffold/package-manager.js +200 -0
- package/dist/scaffold/package-manager.js.map +1 -0
- package/dist/scaffold/plan.d.ts +110 -0
- package/dist/scaffold/plan.d.ts.map +1 -0
- package/dist/scaffold/plan.js +301 -0
- package/dist/scaffold/plan.js.map +1 -0
- package/dist/types.d.ts +6 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/flatten.d.ts +0 -14
- package/dist/flatten.d.ts.map +0 -1
- package/dist/flatten.js +0 -255
- package/dist/flatten.js.map +0 -1
- package/dist/normalize.d.ts +0 -58
- package/dist/normalize.d.ts.map +0 -1
- package/dist/normalize.js.map +0 -1
package/dist/projection.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { normalizeAskDbConfig } from "./normalize.js";
|
|
1
|
+
import { resolveAskDbConfig } from "./resolve.js";
|
|
3
2
|
export const ASKDB_ENV_PROJECTION = Symbol.for("askdb.envProjection");
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
* `satisfies AskDbConfig` so excess or mistyped keys fail
|
|
4
|
+
* Checks a nested {@link AskDbConfig} and wraps it with its canonical env keys, for `bootstrapAskDbEnv`
|
|
5
|
+
* to install. Use TypeScript’s `satisfies AskDbConfig` on the object so excess or mistyped keys fail
|
|
6
|
+
* at compile time while literals stay narrow, e.g.:
|
|
7
7
|
*
|
|
8
8
|
* ```ts
|
|
9
9
|
* export default defineConfig({
|
|
@@ -19,19 +19,31 @@ export const ASKDB_ENV_PROJECTION = Symbol.for("askdb.envProjection");
|
|
|
19
19
|
* Throws an `askdb.config: …` error for a config that can't load.
|
|
20
20
|
*/
|
|
21
21
|
export function defineConfig(config) {
|
|
22
|
-
const {
|
|
22
|
+
const { flat, deprecations } = resolveAskDbConfig(config);
|
|
23
23
|
return {
|
|
24
24
|
[ASKDB_ENV_PROJECTION]: true,
|
|
25
25
|
config,
|
|
26
|
-
entries:
|
|
26
|
+
entries: flat,
|
|
27
27
|
deprecations,
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Flattens a nested {@link AskDbConfig} into the canonical env keys of the runtime snapshot
|
|
32
|
+
* (`AskDbEnvProjection.entries`), for example to build a child process's env. Most optional keys are
|
|
33
|
+
* written only when the config sets them, so defaults such as the HTTP port stay out of the env;
|
|
34
|
+
* `ASKDB_RAG_EMBEDDER`, `ASKDB_INTROSPECT_OUT` and, with the pgvector store,
|
|
35
|
+
* `ASKDB_PGVECTOR_INDEX_STRATEGY` and the mock embedder's `ASKDB_RAG_EMBEDDER_DIMENSIONS` are always
|
|
36
|
+
* written. Throws the same `askdb.config: …` errors as `defineConfig`.
|
|
37
|
+
*/
|
|
38
|
+
export function flattenAskDbConfig(config) {
|
|
39
|
+
return resolveAskDbConfig(config).flat;
|
|
40
|
+
}
|
|
30
41
|
export function isAskDbEnvProjection(value) {
|
|
31
42
|
return (typeof value === "object" &&
|
|
32
43
|
value !== null &&
|
|
33
44
|
ASKDB_ENV_PROJECTION in value &&
|
|
34
45
|
value[ASKDB_ENV_PROJECTION] === true &&
|
|
46
|
+
"entries" in value &&
|
|
35
47
|
typeof value.entries === "object" &&
|
|
36
48
|
value.entries !== null &&
|
|
37
49
|
"config" in value &&
|
package/dist/projection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AActE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAA8B,MAAS;IACjE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO;QACL,CAAC,oBAAoB,CAAC,EAAE,IAAI;QAC5B,MAAM;QACN,OAAO,EAAE,IAAI;QACb,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,oBAAoB,IAAI,KAAK;QAC7B,KAAK,CAAC,oBAAoB,CAAC,KAAK,IAAI;QACpC,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,KAAK,CAAC,OAAO,KAAK,IAAI;QACtB,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,KAAK,IAAI,CACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { AskDbRuntimeConfig, AskDbRuntimeAiConfig } from "./runtime-types.js";
|
|
2
|
+
import type { AskDbConfig } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The config resolver: the one place that checks, translates and defaults every `askdb.config`
|
|
5
|
+
* setting. Each setting's runtime value and its flat-map key come out of the same pass, so
|
|
6
|
+
* `defineConfig` and `getAskDbRuntimeConfig` agree, and `@askdb/config` never reads a setting
|
|
7
|
+
* back from a flat map.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Every {@link AskDbRuntimeConfig} section, checked, translated and defaulted. Not `structured`,
|
|
11
|
+
* `flat`, `deprecations` or `ai.aiEnv`, which is built from `flat`.
|
|
12
|
+
*/
|
|
13
|
+
type ResolvedAskDbConfig = Omit<AskDbRuntimeConfig, "structured" | "flat" | "ai" | "deprecations"> & {
|
|
14
|
+
ai: Omit<AskDbRuntimeAiConfig, "aiEnv">;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* A plain `{ ... }` object: not null, an array, a Promise or a module namespace. Read through
|
|
18
|
+
* `Object.prototype.toString`, so an object from another realm still counts.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
21
|
+
/** What {@link resolveAskDbConfig} returns. */
|
|
22
|
+
export type AskDbConfigResolution = {
|
|
23
|
+
resolved: ResolvedAskDbConfig;
|
|
24
|
+
/** The flat map: each setting's canonical env key, written in the same pass that checks it. */
|
|
25
|
+
flat: Record<string, string>;
|
|
26
|
+
deprecations: string[];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
|
|
30
|
+
* defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
|
|
31
|
+
* message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
|
|
32
|
+
* config that can't load (the loader adds the file name).
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveAskDbConfig(config: AskDbConfig): AskDbConfigResolution;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EACV,kBAAkB,EAKlB,oBAAoB,EAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAA0B,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;GAKG;AAEH;;;GAGG;AACH,KAAK,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,GAAG;IACnG,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;CACzC,CAAC;AAqEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAw3BD,+CAA+C;AAC/C,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,qBAAqB,CA6B7E"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ASKDB_AI_PROVIDERS, ASKDB_RAG_EMBEDDERS, ASKDB_REASONING_EFFORTS, } from "./constants.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const CONNECTION_FIELDS = ["apiKey", "secondaryApiKey", "resourceName", "baseUrl", "apiVersion"];
|
|
1
|
+
import { ASKDB_AI_PROVIDERS, ASKDB_LOG_LEVELS, ASKDB_MODES_V1, ASKDB_RAG_EMBEDDERS, ASKDB_RAG_STORES, ASKDB_REASONING_EFFORTS, ASKDB_STUDIO_EXECUTE_PROVIDERS, } from "./constants.js";
|
|
2
|
+
import { aiEmbeddingEnv, aiLanguageEnv, CONNECTION_FIELDS, setEnvKey, } from "./ai-env.js";
|
|
3
|
+
import { DEFAULT_ANTHROPIC_LANGUAGE_MODEL, DEFAULT_AZURE_OPENAI_DEPLOYMENT, DEFAULT_GATEWAY_LANGUAGE_MODEL, DEFAULT_GOOGLE_LANGUAGE_MODEL, DEFAULT_HTTP_API_HOST, DEFAULT_HTTP_API_PORT, DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS, DEFAULT_INTROSPECT_OUTPUT_DIR, DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS, DEFAULT_OPENAI_LANGUAGE_MODEL, DEFAULT_PGVECTOR_INDEX_STRATEGY, DEFAULT_RAG_EMBEDDING_MODEL, DEFAULT_STUDIO_EXECUTE_MAX_ROWS, DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS, MAX_HTTP_API_REQUEST_TIMEOUT_MS, defaultRagEmbeddingDimensions, } from "./defaults.js";
|
|
5
4
|
const DEFAULT_CONNECTION = "default";
|
|
6
5
|
/** Name of the connection a legacy RAG key moves to when it differs from the provider's default connection. */
|
|
7
6
|
const LEGACY_RAG_CONNECTION = "rag-embeddings";
|
|
@@ -16,7 +15,7 @@ const LEGACY_DEFAULT_EMBEDDING_MODEL_PROVIDERS = new Set(["openai", "azure", "fo
|
|
|
16
15
|
function widthEarlierVersionsAssumed(model) {
|
|
17
16
|
return defaultRagEmbeddingDimensions(model);
|
|
18
17
|
}
|
|
19
|
-
|
|
18
|
+
function isMember(value, allowed) {
|
|
20
19
|
return allowed.includes(value);
|
|
21
20
|
}
|
|
22
21
|
function isBuiltinProvider(provider) {
|
|
@@ -129,7 +128,7 @@ function parseConfiguredDimensions(value, key) {
|
|
|
129
128
|
return undefined;
|
|
130
129
|
const parsed = parsePositiveInteger(value);
|
|
131
130
|
if (parsed === undefined) {
|
|
132
|
-
throw new Error(`askdb.config: ${key} must be a positive integer (got ${
|
|
131
|
+
throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
|
|
133
132
|
}
|
|
134
133
|
return parsed;
|
|
135
134
|
}
|
|
@@ -267,7 +266,7 @@ function translateLegacyLanguageField(field, configured, table, languageEntry, w
|
|
|
267
266
|
* the old and new location, never a value). Throws `askdb.config: …` errors for a config that
|
|
268
267
|
* can't load.
|
|
269
268
|
*/
|
|
270
|
-
|
|
269
|
+
function normalizeAskDbConfig(config) {
|
|
271
270
|
// The type requires both blocks, but a JS config (or a TS one run without a type check) can
|
|
272
271
|
// leave one out. Name it here rather than crash on it below (#626).
|
|
273
272
|
if (!isPlainObject(config.ai)) {
|
|
@@ -415,4 +414,372 @@ export function normalizeAskDbConfig(config) {
|
|
|
415
414
|
deprecations,
|
|
416
415
|
};
|
|
417
416
|
}
|
|
418
|
-
|
|
417
|
+
// ---------------------------------------------------------------------------
|
|
418
|
+
// Reading one value. Each reader names the config key in its error, never a flat key.
|
|
419
|
+
// ---------------------------------------------------------------------------
|
|
420
|
+
/**
|
|
421
|
+
* A value for an error message: a string quoted, `null`, `undefined`, a number or a boolean as
|
|
422
|
+
* written, anything else by its type. An object or a function is never printed, since its text
|
|
423
|
+
* could hold a key or a connection string.
|
|
424
|
+
*/
|
|
425
|
+
function describeValue(value) {
|
|
426
|
+
if (typeof value === "string")
|
|
427
|
+
return JSON.stringify(value);
|
|
428
|
+
if (value === null || value === undefined || typeof value === "number" || typeof value === "boolean") {
|
|
429
|
+
return String(value);
|
|
430
|
+
}
|
|
431
|
+
if (Array.isArray(value))
|
|
432
|
+
return "an array";
|
|
433
|
+
return typeof value === "object" ? "an object" : `a ${typeof value}`;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* A string key: trimmed, or `undefined` when unset (`undefined` or `null`) or blank. Any other
|
|
437
|
+
* value fails: hosts read some string keys from the structured config as written (`host.*`,
|
|
438
|
+
* `studio.listen.host`), so a wrong type must stop the load, not a later call.
|
|
439
|
+
*/
|
|
440
|
+
function readString(value, key) {
|
|
441
|
+
if (typeof value === "string")
|
|
442
|
+
return nonBlank(value);
|
|
443
|
+
if (value === undefined || value === null)
|
|
444
|
+
return undefined;
|
|
445
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a string).`);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* A boolean key must be `true`, `false` or unset. Anything else fails: the string `"false"` is
|
|
449
|
+
* truthy, so reading it as a flag would turn the setting on.
|
|
450
|
+
*/
|
|
451
|
+
function readBoolean(value, key) {
|
|
452
|
+
if (value === undefined || typeof value === "boolean")
|
|
453
|
+
return value;
|
|
454
|
+
throw new Error(`askdb.config: ${key} must be a boolean (got ${describeValue(value)}).`);
|
|
455
|
+
}
|
|
456
|
+
/** One of `allowed`, or `undefined` when unset (`undefined`, `null` or `""`). */
|
|
457
|
+
function readMember(value, allowed, key) {
|
|
458
|
+
if (value === undefined || value === null || value === "")
|
|
459
|
+
return undefined;
|
|
460
|
+
if (isMember(value, allowed))
|
|
461
|
+
return value;
|
|
462
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected one of: ${allowed.join(", ")}).`);
|
|
463
|
+
}
|
|
464
|
+
/** A list of strings, each trimmed, blanks dropped; `undefined` when unset or empty. */
|
|
465
|
+
function readStringList(value, key) {
|
|
466
|
+
if (value === undefined || value === null)
|
|
467
|
+
return undefined;
|
|
468
|
+
if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
|
|
469
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an array of strings).`);
|
|
470
|
+
}
|
|
471
|
+
const list = value.map((item) => item.trim()).filter(Boolean);
|
|
472
|
+
return list.length > 0 ? list : undefined;
|
|
473
|
+
}
|
|
474
|
+
/** A positive integer, or a string holding one; `undefined` for anything else. */
|
|
475
|
+
function parsePositiveInteger(value) {
|
|
476
|
+
if (typeof value === "number")
|
|
477
|
+
return Number.isInteger(value) && value > 0 ? value : undefined;
|
|
478
|
+
if (typeof value !== "string")
|
|
479
|
+
return undefined;
|
|
480
|
+
const t = value.trim();
|
|
481
|
+
if (t === "")
|
|
482
|
+
return undefined;
|
|
483
|
+
const n = Number(t);
|
|
484
|
+
return Number.isInteger(n) && n > 0 ? n : undefined;
|
|
485
|
+
}
|
|
486
|
+
/** A positive-integer key, as a number or a string holding one. */
|
|
487
|
+
function readPositiveInteger(value, key) {
|
|
488
|
+
if (value === undefined)
|
|
489
|
+
return undefined;
|
|
490
|
+
const n = parsePositiveInteger(value);
|
|
491
|
+
if (n === undefined) {
|
|
492
|
+
throw new Error(`askdb.config: ${key} must be a positive integer (got ${describeValue(value)}).`);
|
|
493
|
+
}
|
|
494
|
+
return n;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* `httpApi.requestTimeoutMs`: `undefined` when unset; otherwise a positive integer no larger than
|
|
498
|
+
* {@link MAX_HTTP_API_REQUEST_TIMEOUT_MS}, as a number or a string holding one.
|
|
499
|
+
*/
|
|
500
|
+
function readRequestTimeoutMs(value, key) {
|
|
501
|
+
if (value === undefined)
|
|
502
|
+
return undefined;
|
|
503
|
+
const n = parsePositiveInteger(value);
|
|
504
|
+
if (n === undefined || n > MAX_HTTP_API_REQUEST_TIMEOUT_MS) {
|
|
505
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected a positive integer number of milliseconds, at most ${MAX_HTTP_API_REQUEST_TIMEOUT_MS}).`);
|
|
506
|
+
}
|
|
507
|
+
return n;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* `httpApi.listen.port`: `undefined` when unset or `NaN` (`Number(env("PORT"))` with `PORT`
|
|
511
|
+
* unset), as Studio does for `studio.listen.port`. Port `0` asks the OS for a free port. Anything
|
|
512
|
+
* but an integer from 0 to 65535, or a string holding one, fails.
|
|
513
|
+
*/
|
|
514
|
+
function readListenPort(value, key) {
|
|
515
|
+
if (value === undefined || (typeof value === "number" && Number.isNaN(value)))
|
|
516
|
+
return undefined;
|
|
517
|
+
const text = typeof value === "string" ? value.trim() : undefined;
|
|
518
|
+
// `Number("")` is 0, so a blank string is checked before it's converted.
|
|
519
|
+
const port = typeof value === "number" ? value : text ? Number(text) : NaN;
|
|
520
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535) {
|
|
521
|
+
throw new Error(`askdb.config: invalid ${key} ${describeValue(value)} (expected an integer from 0 to 65535).`);
|
|
522
|
+
}
|
|
523
|
+
return port;
|
|
524
|
+
}
|
|
525
|
+
const PGVECTOR_INDEX_STRATEGIES = ["ivfflat", "hnsw", "none"];
|
|
526
|
+
/**
|
|
527
|
+
* `rag.storeConfig.pgvector.indexStrategy`, lowercased, or the default when unset or blank. A
|
|
528
|
+
* value that isn't a string counts as unset.
|
|
529
|
+
*/
|
|
530
|
+
function pgvectorIndexStrategy(raw) {
|
|
531
|
+
if (typeof raw !== "string" || raw.trim() === "")
|
|
532
|
+
return DEFAULT_PGVECTOR_INDEX_STRATEGY;
|
|
533
|
+
const v = raw.trim().toLowerCase();
|
|
534
|
+
if (isMember(v, PGVECTOR_INDEX_STRATEGIES))
|
|
535
|
+
return v;
|
|
536
|
+
throw new Error(`askdb.config: invalid rag.storeConfig.pgvector.indexStrategy "${raw}" (expected one of: ${PGVECTOR_INDEX_STRATEGIES.join(", ")}).`);
|
|
537
|
+
}
|
|
538
|
+
/** Writes `value` under `key` unless it's unset or blank. */
|
|
539
|
+
function setFlat(flat, key, value) {
|
|
540
|
+
setEnvKey(flat, key, value === undefined ? undefined : String(value));
|
|
541
|
+
}
|
|
542
|
+
function resolveIntrospection(intro, flat) {
|
|
543
|
+
const { provider } = intro;
|
|
544
|
+
const engines = intro.providerConfig;
|
|
545
|
+
// Only the active engine's connection is read, so other branches stay `undefined`.
|
|
546
|
+
const connection = (engine) => provider === engine
|
|
547
|
+
? readString(engines?.[engine]?.databaseUrl, `introspection.providerConfig.${engine}.databaseUrl`)
|
|
548
|
+
: undefined;
|
|
549
|
+
const resolved = {
|
|
550
|
+
provider,
|
|
551
|
+
postgresDatabaseUrl: connection("postgres"),
|
|
552
|
+
prismaSchemaPath: provider === "prisma"
|
|
553
|
+
? readString(engines?.prisma?.schemaPath, "introspection.providerConfig.prisma.schemaPath")
|
|
554
|
+
: undefined,
|
|
555
|
+
mysqlDatabaseUrl: connection("mysql"),
|
|
556
|
+
schemas: readStringList(intro.schemas, "introspection.schemas"),
|
|
557
|
+
sqliteFile: provider === "sqlite" ? readString(engines?.sqlite?.file, "introspection.providerConfig.sqlite.file") : undefined,
|
|
558
|
+
sqlserverDatabaseUrl: connection("sqlserver"),
|
|
559
|
+
outputDir: readString(intro.outputDir, "introspection.outputDir") ?? DEFAULT_INTROSPECT_OUTPUT_DIR,
|
|
560
|
+
};
|
|
561
|
+
setFlat(flat, "ASKDB_INTROSPECT_POSTGRES_URL", resolved.postgresDatabaseUrl);
|
|
562
|
+
setFlat(flat, "ASKDB_INTROSPECT_MYSQL_URL", resolved.mysqlDatabaseUrl);
|
|
563
|
+
setFlat(flat, "ASKDB_INTROSPECT_SQLITE_FILE", resolved.sqliteFile);
|
|
564
|
+
setFlat(flat, "ASKDB_INTROSPECT_SQLSERVER_URL", resolved.sqlserverDatabaseUrl);
|
|
565
|
+
// The Prisma schema path has no flat key: @askdb/prisma reads `prismaSchemaPath`.
|
|
566
|
+
setFlat(flat, "ASKDB_INTROSPECT_OUT", resolved.outputDir);
|
|
567
|
+
setFlat(flat, "ASKDB_INTROSPECT_SCHEMAS", resolved.schemas?.join(","));
|
|
568
|
+
return resolved;
|
|
569
|
+
}
|
|
570
|
+
function resolveAi(ai, flat) {
|
|
571
|
+
const { language, embedding } = ai;
|
|
572
|
+
const languageEnv = aiLanguageEnv(language);
|
|
573
|
+
// The flat map carries the language section's env view; the embedding section's stays on its own.
|
|
574
|
+
Object.assign(flat, languageEnv);
|
|
575
|
+
return {
|
|
576
|
+
language: {
|
|
577
|
+
provider: language.provider,
|
|
578
|
+
connection: language.connection.name,
|
|
579
|
+
model: language.model,
|
|
580
|
+
env: languageEnv,
|
|
581
|
+
modelFamily: language.modelFamily,
|
|
582
|
+
},
|
|
583
|
+
embedding: embedding
|
|
584
|
+
? {
|
|
585
|
+
provider: embedding.provider,
|
|
586
|
+
connection: embedding.connection.name,
|
|
587
|
+
model: embedding.model,
|
|
588
|
+
env: aiEmbeddingEnv(embedding),
|
|
589
|
+
dimensions: embedding.dimensions,
|
|
590
|
+
}
|
|
591
|
+
: undefined,
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
function resolveRag(rag, ai, flat) {
|
|
595
|
+
const { store, storeConfig } = rag;
|
|
596
|
+
const embedding = ai.embedding;
|
|
597
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER", embedding ? "ai" : "mock");
|
|
598
|
+
if (embedding) {
|
|
599
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_MODEL", embedding.model);
|
|
600
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", embedding.dimensions);
|
|
601
|
+
}
|
|
602
|
+
if (!isMember(store, ASKDB_RAG_STORES)) {
|
|
603
|
+
throw new Error(`askdb.config: invalid rag.store ${describeValue(store)} (expected one of: ${ASKDB_RAG_STORES.join(", ")}).`);
|
|
604
|
+
}
|
|
605
|
+
if (store === "file") {
|
|
606
|
+
if (!storeConfig.file)
|
|
607
|
+
throw new Error('askdb.config: rag.store is "file" but `rag.storeConfig.file` is missing.');
|
|
608
|
+
// Unset, the CLI and Studio use `<schema dir>/schema`.
|
|
609
|
+
setFlat(flat, "ASKDB_RAG_FILE_BASE_PATH", readString(storeConfig.file.basePath, "rag.storeConfig.file.basePath"));
|
|
610
|
+
}
|
|
611
|
+
else if (store === "pgvector") {
|
|
612
|
+
const pgvector = storeConfig.pgvector;
|
|
613
|
+
if (!pgvector)
|
|
614
|
+
throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector` is missing.');
|
|
615
|
+
const url = readString(pgvector.databaseUrl, "rag.storeConfig.pgvector.databaseUrl");
|
|
616
|
+
if (!url) {
|
|
617
|
+
throw new Error('askdb.config: rag.store is "pgvector" but `rag.storeConfig.pgvector.databaseUrl` is missing; set it, for example `databaseUrl: env("PGVECTOR_URL")`.');
|
|
618
|
+
}
|
|
619
|
+
setFlat(flat, "ASKDB_PGVECTOR_URL", url);
|
|
620
|
+
// The mock embedder's vectors are always 64 wide. With `ai.embedding`, the dimensions written
|
|
621
|
+
// above are only a size to request: unset, the model's own width applies, learned at index time.
|
|
622
|
+
if (!embedding)
|
|
623
|
+
setFlat(flat, "ASKDB_RAG_EMBEDDER_DIMENSIONS", DEFAULT_MOCK_RAG_EMBEDDING_DIMENSIONS);
|
|
624
|
+
setFlat(flat, "ASKDB_PGVECTOR_INDEX_STRATEGY", pgvectorIndexStrategy(pgvector.indexStrategy));
|
|
625
|
+
}
|
|
626
|
+
// The RAG CLI's OpenAI embedder never reads another provider's key or base URL: it uses the
|
|
627
|
+
// embedding connection when that is OpenAI's, else only the OpenAI language connection.
|
|
628
|
+
const openaiEmbedding = embedding?.provider === "openai" ? embedding : undefined;
|
|
629
|
+
const source = openaiEmbedding ?? ai.language;
|
|
630
|
+
return {
|
|
631
|
+
embedder: {
|
|
632
|
+
apiKey: source.env.OPENAI_API_KEY,
|
|
633
|
+
baseURL: source.env.OPENAI_BASE_URL,
|
|
634
|
+
model: openaiEmbedding?.model,
|
|
635
|
+
},
|
|
636
|
+
store,
|
|
637
|
+
storeConfig,
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
function resolveLogging(logging, flat) {
|
|
641
|
+
const resolved = {
|
|
642
|
+
level: readMember(logging?.level, ASKDB_LOG_LEVELS, "logging.level"),
|
|
643
|
+
correlationId: readString(logging?.correlationId, "logging.correlationId"),
|
|
644
|
+
logFile: readString(logging?.logFile, "logging.logFile"),
|
|
645
|
+
logStdout: readBoolean(logging?.logStdout, "logging.logStdout") ?? false,
|
|
646
|
+
};
|
|
647
|
+
setFlat(flat, "ASKDB_LOG_LEVEL", resolved.level);
|
|
648
|
+
setFlat(flat, "ASKDB_CORRELATION_ID", resolved.correlationId);
|
|
649
|
+
setFlat(flat, "ASKDB_LOG_FILE", resolved.logFile);
|
|
650
|
+
if (resolved.logStdout)
|
|
651
|
+
setFlat(flat, "ASKDB_LOG_STDOUT", "true");
|
|
652
|
+
return resolved;
|
|
653
|
+
}
|
|
654
|
+
function resolveModes(modes, flat) {
|
|
655
|
+
const resolved = {
|
|
656
|
+
askdbMode: readMember(modes?.askdbMode, ASKDB_MODES_V1, "modes.askdbMode"),
|
|
657
|
+
omitSensitiveFromPrompt: readBoolean(modes?.omitSensitiveFromPrompt, "modes.omitSensitiveFromPrompt") ?? false,
|
|
658
|
+
};
|
|
659
|
+
setFlat(flat, "ASKDB_MODE", resolved.askdbMode);
|
|
660
|
+
if (resolved.omitSensitiveFromPrompt)
|
|
661
|
+
setFlat(flat, "ASKDB_OMIT_SENSITIVE_FROM_PROMPT", "true");
|
|
662
|
+
return resolved;
|
|
663
|
+
}
|
|
664
|
+
/** `host` has no runtime section: `createAskDb` reads `structured.host`. It's checked here all the same. */
|
|
665
|
+
function resolveHost(host, flat) {
|
|
666
|
+
setFlat(flat, "ASKDB_SCHEMA_PATH", readString(host?.schemaPath, "host.schemaPath"));
|
|
667
|
+
setFlat(flat, "ASKDB_SCHEMA_JSON", readString(host?.schemaJson, "host.schemaJson"));
|
|
668
|
+
}
|
|
669
|
+
function resolveHttpApi(httpApi, flat) {
|
|
670
|
+
const port = readListenPort(httpApi?.listen?.port, "httpApi.listen.port");
|
|
671
|
+
const host = readString(httpApi?.listen?.host, "httpApi.listen.host");
|
|
672
|
+
const allowSchemaOverride = readBoolean(httpApi?.allowSchemaOverride, "httpApi.allowSchemaOverride") ?? false;
|
|
673
|
+
const requestTimeoutMs = readRequestTimeoutMs(httpApi?.requestTimeoutMs, "httpApi.requestTimeoutMs");
|
|
674
|
+
setFlat(flat, "PORT", port);
|
|
675
|
+
setFlat(flat, "HOST", host);
|
|
676
|
+
if (allowSchemaOverride)
|
|
677
|
+
setFlat(flat, "ASKDB_HTTP_ALLOW_SCHEMA_OVERRIDE", "true");
|
|
678
|
+
setFlat(flat, "ASKDB_HTTP_REQUEST_TIMEOUT_MS", requestTimeoutMs);
|
|
679
|
+
return {
|
|
680
|
+
listen: { port: port ?? DEFAULT_HTTP_API_PORT, host: host ?? DEFAULT_HTTP_API_HOST },
|
|
681
|
+
allowSchemaOverride,
|
|
682
|
+
requestTimeoutMs: requestTimeoutMs ?? DEFAULT_HTTP_API_REQUEST_TIMEOUT_MS,
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
/** The introspection connection for `provider`, when introspection uses that engine. */
|
|
686
|
+
function introspectionConnectionFor(provider, introspection) {
|
|
687
|
+
switch (provider) {
|
|
688
|
+
case "postgres":
|
|
689
|
+
return introspection.postgresDatabaseUrl;
|
|
690
|
+
case "mysql":
|
|
691
|
+
return introspection.mysqlDatabaseUrl;
|
|
692
|
+
case "sqlserver":
|
|
693
|
+
return introspection.sqlserverDatabaseUrl;
|
|
694
|
+
case "sqlite":
|
|
695
|
+
return introspection.sqliteFile;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
function resolveStudio(studio, introspection, flat) {
|
|
699
|
+
// `listen` has no runtime section: Studio reads `structured.studio.listen` and checks the port
|
|
700
|
+
// when it starts, so only the host's type is checked here.
|
|
701
|
+
const listen = studio?.listen;
|
|
702
|
+
setFlat(flat, "ASKDB_STUDIO_HOST", readString(listen?.host, "studio.listen.host"));
|
|
703
|
+
if (listen?.port !== undefined && !Number.isNaN(listen.port))
|
|
704
|
+
setFlat(flat, "ASKDB_STUDIO_PORT", listen.port);
|
|
705
|
+
const execute = studio?.execute;
|
|
706
|
+
// An explicit provider, else the introspection provider when it's a live engine, else postgres.
|
|
707
|
+
// An unknown provider falls back the same way.
|
|
708
|
+
const configured = readString(execute?.provider, "studio.execute.provider");
|
|
709
|
+
const provider = isMember(configured, ASKDB_STUDIO_EXECUTE_PROVIDERS)
|
|
710
|
+
? configured
|
|
711
|
+
: isMember(introspection.provider, ASKDB_STUDIO_EXECUTE_PROVIDERS)
|
|
712
|
+
? introspection.provider
|
|
713
|
+
: "postgres";
|
|
714
|
+
const enabled = readBoolean(execute?.enabled, "studio.execute.enabled");
|
|
715
|
+
const useIntrospectionConnection = readBoolean(execute?.useIntrospectionConnection, "studio.execute.useIntrospectionConnection");
|
|
716
|
+
const timeoutMs = readPositiveInteger(execute?.timeoutMs, "studio.execute.timeoutMs");
|
|
717
|
+
const maxRows = readPositiveInteger(execute?.maxRows, "studio.execute.maxRows");
|
|
718
|
+
const configuredUrl = readString(execute?.databaseUrl, "studio.execute.databaseUrl");
|
|
719
|
+
const configuredFile = readString(execute?.file, "studio.execute.file");
|
|
720
|
+
if (configured !== undefined)
|
|
721
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_PROVIDER", provider);
|
|
722
|
+
setFlat(flat, "ASKDB_STUDIO_DATABASE_URL", configuredUrl);
|
|
723
|
+
setFlat(flat, "ASKDB_STUDIO_SQLITE_FILE", configuredFile);
|
|
724
|
+
if (enabled !== undefined)
|
|
725
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_ENABLED", String(enabled));
|
|
726
|
+
if (useIntrospectionConnection !== undefined) {
|
|
727
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_USE_INTROSPECTION_CONNECTION", String(useIntrospectionConnection));
|
|
728
|
+
}
|
|
729
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_TIMEOUT_MS", timeoutMs);
|
|
730
|
+
setFlat(flat, "ASKDB_STUDIO_EXECUTE_MAX_ROWS", maxRows);
|
|
731
|
+
// The introspection connection is reused only when `useIntrospectionConnection` is on, so
|
|
732
|
+
// turning execute on never runs ad-hoc SQL with introspection credentials by accident.
|
|
733
|
+
const explicit = provider === "sqlite" ? configuredFile : configuredUrl;
|
|
734
|
+
const introspectionConnection = introspectionConnectionFor(provider, introspection);
|
|
735
|
+
const connection = explicit ?? (useIntrospectionConnection ? introspectionConnection : undefined);
|
|
736
|
+
return {
|
|
737
|
+
execute: {
|
|
738
|
+
provider,
|
|
739
|
+
databaseUrl: provider === "sqlite" ? undefined : connection,
|
|
740
|
+
file: provider === "sqlite" ? connection : undefined,
|
|
741
|
+
enabled: enabled ?? false,
|
|
742
|
+
useIntrospectionConnection: useIntrospectionConnection ?? false,
|
|
743
|
+
introspectionConnectionAvailable: explicit === undefined && !useIntrospectionConnection && introspectionConnection !== undefined,
|
|
744
|
+
timeoutMs: timeoutMs ?? DEFAULT_STUDIO_EXECUTE_TIMEOUT_MS,
|
|
745
|
+
maxRows: maxRows ?? DEFAULT_STUDIO_EXECUTE_MAX_ROWS,
|
|
746
|
+
},
|
|
747
|
+
};
|
|
748
|
+
}
|
|
749
|
+
/**
|
|
750
|
+
* Resolves every setting of an authored config: checks it, translates deprecated keys and fills in
|
|
751
|
+
* defaults, and writes its flat key. Pure: it reads no environment. Returns one deprecation
|
|
752
|
+
* message per legacy key in use. Throws `askdb.config: …` errors that name the config key for a
|
|
753
|
+
* config that can't load (the loader adds the file name).
|
|
754
|
+
*/
|
|
755
|
+
export function resolveAskDbConfig(config) {
|
|
756
|
+
const { config: normalized, deprecations } = normalizeAskDbConfig(config);
|
|
757
|
+
const flat = {};
|
|
758
|
+
const ai = resolveAi(normalized.ai, flat);
|
|
759
|
+
const introspection = resolveIntrospection(config.introspection, flat);
|
|
760
|
+
const rag = resolveRag(normalized.rag, ai, flat);
|
|
761
|
+
const logging = resolveLogging(config.logging, flat);
|
|
762
|
+
const modes = resolveModes(config.modes, flat);
|
|
763
|
+
resolveHost(config.host, flat);
|
|
764
|
+
const dev = { mockSql: readString(config.dev?.mockSql, "dev.mockSql") };
|
|
765
|
+
setFlat(flat, "ASKDB_MOCK_SQL", dev.mockSql);
|
|
766
|
+
const studio = resolveStudio(config.studio, introspection, flat);
|
|
767
|
+
const httpApi = resolveHttpApi(config.httpApi, flat);
|
|
768
|
+
return {
|
|
769
|
+
resolved: {
|
|
770
|
+
ai,
|
|
771
|
+
introspection,
|
|
772
|
+
rag,
|
|
773
|
+
logging,
|
|
774
|
+
httpApi,
|
|
775
|
+
dev,
|
|
776
|
+
modes,
|
|
777
|
+
// Passed through as written: loading doesn't check it.
|
|
778
|
+
nlToSql: { dialect: config.dialect },
|
|
779
|
+
studio,
|
|
780
|
+
},
|
|
781
|
+
flat,
|
|
782
|
+
deprecations,
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,GAG/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,SAAS,GAGV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,mCAAmC,EACnC,6BAA6B,EAC7B,qCAAqC,EACrC,6BAA6B,EAC7B,+BAA+B,EAC/B,2BAA2B,EAC3B,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAwEvB,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,+GAA+G;AAC/G,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAC/C,kFAAkF;AAClF,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACpF,sGAAsG;AACtG,MAAM,wCAAwC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACzF;;;GAGG;AACH,SAAS,2BAA2B,CAAC,KAAa;IAChD,OAAO,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAA8B,KAAc,EAAE,OAAU;IACvE,OAAQ,OAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,6BAA6B,CAAC;QACvC,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,+BAA+B,CAAC;QACzC,KAAK,WAAW;YACd,OAAO,gCAAgC,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,6BAA6B,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,8BAA8B,CAAC;QACxC;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAkB,EAAE,IAAY;IACpD,MAAM,UAAU,GAA2B,EAAE,IAAI,EAAE,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS;YAAE,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,MAAmB;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAA6B,CAAC;QACpE,MAAM,KAAK,GAAG,qBAAqB,QAAQ,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,wCAAwC,IAAI,uDAAuD,CAC1H,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG;gBACH,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;gBACnC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK;aACxD,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,QAAyC;IAChE,MAAM,KAAK,GAAG,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACnF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAAuC,EACvC,OAAoB,EACpB,QAAgB,EAChB,cAAsB,EACtB,cAAkC;IAElC,MAAM,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,cAAc,IAAI,kBAAkB,CAAC;IAClD,MAAM,KAAK,GAAG,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC3F,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,mBAAmB,cAAc,4BAA4B,QAAQ,GAAG;YACjG,2CAA2C,eAAe,CAAC,mBAAmB,CAAC,IAAI,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,qCAAqC;YAC9E,YAAY,eAAe,CAAC,mBAAmB,CAAC,mCAAmC,OAAO,cAAc,CAC3G,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,qBAAqB,cAAc,QAAQ,QAAQ,KAAK;QACjG,yFAAyF;QACzF,6GAA6G,CAChH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA6C,EAAE,GAAW;IACnF,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,WAAW,KAAK,uBAAuB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC1G,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAkC,EAAE,GAAW;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,oCAAoC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,KAAkC,EAClC,GAAW,EACX,OAAe,EACf,IAA+B;IAE/B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CACF,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,iBAAiB,GAAG,iBAAiB,OAAO,qDAAqD;YAC/F,iEAAiE;QACrE,CAAC,CAAC,iBAAiB,GAAG,iBAAiB,OAAO,uCAAuC,CACxF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4GAA4G;AAC5G,SAAS,uBAAuB,CAAC,GAAoC;IACnE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CACjD,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,IAAI;QACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAC5F,CAAC;AACJ,CAAC;AAWD;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,QAA6B,EAC7B,GAAoC,EACpC,KAAuC,EACvC,gBAAwB,EACxB,IAA+B;IAE/B,MAAM,YAAY,GAAG,GAAG,CAAC,cAAc,EAAE,MAAM,IAAI,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACrE,IAAI,CACF,QAAQ,KAAK,QAAQ;QACnB,CAAC,CAAC,6HAA6H;QAC/H,CAAC,CAAC,yGAAyG,CAC9G,CAAC;IAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,6FAA6F,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,KAAK,GAAG,WAAW,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,wCAAwC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,kBAAkB,QAAQ,2CAA2C;gBAC1G,gDAAgD,CACnD,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,2BAA2B,CAAC;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,qCAAqC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAE5G,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,oHAAoH;gBAClH,iCAAiC,QAAQ,kBAAkB,QAAQ,wCAAwC;gBAC3G,wEAAwE;gBACxE,WAAW;gBACX,2EAA2E;gBAC3E,+EAA+E,QAAQ,qBAAqB;gBAC5G,QAAQ;gBACR,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GACV,+CAA+C,QAAQ,GAAG;YAC1D,qFAAqF,CAAC;QACxF,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,iEAAiE,MAAM,EAAE,CAAC,CAAC;QAC1G,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,kEAAkE,MAAM,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;IAChH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnH,0FAA0F;YAC1F,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAChE,CAAC;QACD,8GAA8G;QAC9G,MAAM,GAAG,GAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;QACjH,IAAI,mBAAmB;YAAE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAC5D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;SAAM,IACL,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;QACnE,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EACtE,CAAC;QACD,IAAI,mBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,oCAAoC,qBAAqB,QAAQ;gBAC1G,mHAAmH,CACtH,CAAC;QACJ,CAAC;QACD,sEAAsE;QACtE,MAAM,UAAU,GAA2B;YACzC,GAAG,YAAY,CAAC,UAAU;YAC1B,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,EAAE,qBAAqB;SAC5B,CAAC;QACF,mBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAS,4BAA4B,CACnC,KAA8B,EAC9B,UAA8B,EAC9B,KAAuC,EACvC,aAA0C,EAC1C,IAA+B;IAE/B,MAAM,MAAM,GAAG,eAAe,KAAK,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,KAAK,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,IAAI,KAAK,EAAE,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;YAC5C,MAAM,UAAU,GACd,KAAK,KAAK,aAAa,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC;YACnG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,CACF,iBAAiB,SAAS,sFAAsF,CACjH,CAAC;YACJ,CAAC;iBAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBACnD,IAAI,CAAC,iBAAiB,SAAS,sCAAsC,MAAM,qBAAqB,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,MAAM,CAAC;gBACf,IAAI,CAAC,iBAAiB,SAAS,8BAA8B,MAAM,GAAG,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,MAAmB;IAI/C,4FAA4F;IAC5F,oEAAoE;IACpE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,8GAA8G;YAC5G,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,iGAAiG;IACjG,6FAA6F;IAC7F,oFAAoF;IACpF,MAAM,QAAQ,GAAoC,MAAM,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACvH,sGAAsG;IACtG,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;IACrE,yGAAyG;IACzG,IACE,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EACvH,CAAC;QACD,MAAM,IAAI,KAAK,CACb,6IAA6I,CAC9I,CAAC;IACJ,CAAC;IAED,mFAAmF;IACnF,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,CACF,yIAAyI,CAC1I,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,CAAC,QAAQ,uBAAuB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAE1C,kFAAkF;IAClF,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvG,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,gEAAgE,WAAW,yDAAyD,CACrI,CAAC;QACJ,CAAC;QACD,IAAI,CACF,kHAAkH,WAAW,GAAG,CACjI,CAAC;QACF,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,wDAAwD;IACxD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,6EAA6E,CAAC,CAAC;IACtF,CAAC;IACD,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC/D,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC;IAErD,oBAAoB;IACpB,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,mBAAmB,IAAI,WAAW,CAAC;IAC5D,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,aAAa,GAAG,iBAAiB,CACrC,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,EAC1E,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC9B,CAAC;IAEF,MAAM,KAAK,GAAG,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,4BAA4B,CAC9C,aAAa,EACb,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,KAAK,EACL,aAAa,EACb,IAAI,CACL,CAAC;IAEF,MAAM,eAAe,GAAgC;QACnD,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,aAAa,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE;QACrE,KAAK,EAAE,KAAK,IAAI,oBAAoB,CAAC,gBAAgB,CAAC;QACtD,WAAW;QACX,SAAS;KACV,CAAC;IAEF,qBAAqB;IACrB,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC9E,MAAM,eAAe,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,SAAmD,CAAC;IAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,wFAAwF,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACjG,IAAI,CACF,8FAA8F;gBAC5F,2BAA2B,qCAAqC,oBAAoB,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,cAAc,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,0DAA0D,GAAG,CAAC,QAAQ,0DAA0D,CACjI,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;YACpD,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC;YAC3E,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,MAAM,EAAE,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,WAAW,IAAI,WAAW,CAAC;QAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,gJAAgJ,CACjJ,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,iBAAiB,CACtC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa,EACnE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAC1D,CAAC;QAEF,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QACvH,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAEjG,4DAA4D;QAC5D,MAAM,kBAAkB,GACtB,GAAG,CAAC,KAAK,KAAK,UAAU;YACtB,CAAC,CAAC,eAAe,CACb,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,EACpC,qCAAqC,EACrC,uBAAuB,GAAG,CAAC,QAAQ,GAAG,EACtC,IAAI,CACL;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,iBAAiB,aAAa,OAAO,UAAU,+CAA+C,kBAAkB,IAAI;oBAClH,2FAA2F,CAC9F,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,kBAAkB,CAAC;QAClC,CAAC;QAED,8FAA8F;QAC9F,sFAAsF;QACtF,IAAI,MAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,CACF,+BAA+B,GAAG,CAAC,QAAQ,uBAAuB,YAAY,kCAAkC;gBAC9G,IAAI,cAAc,sFAAsF;gBACxG,cAAc,YAAY,4EAA4E,YAAY,IAAI;gBACtH,8BAA8B,CACjC,CAAC;QACJ,CAAC;QAED,SAAS,GAAG;YACV,QAAQ;YACR,UAAU,EAAE,cAAc,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE;YACtE,KAAK,EAAE,cAAc;YACrB,UAAU;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE;YACN,GAAG,MAAM;YACT,EAAE,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE;YAC5C,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;SAC7F;QACD,YAAY;KACb,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sFAAsF;AACtF,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACrG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAc,EAAE,GAAW;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,2BAA2B,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,iFAAiF;AACjF,SAAS,UAAU,CAA8B,KAAc,EAAE,OAAU,EAAE,GAAW;IACtF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC5E,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpH,CAAC;AAED,wFAAwF;AACxF,SAAS,cAAc,CAAC,KAAc,EAAE,GAAW;IACjD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,IAAI,GAAI,KAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,kFAAkF;AAClF,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,mEAAmE;AACnE,SAAS,mBAAmB,CAAC,KAAc,EAAE,GAAW;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,oCAAoC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAc,EAAE,GAAW;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,+BAA+B,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,iEAAiE,+BAA+B,IAAI,CACzJ,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAc,EAAE,GAAW;IACjD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChG,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,yEAAyE;IACzE,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGvE;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,+BAA+B,CAAC;IACzF,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,QAAQ,CAAC,CAAC,EAAE,yBAAyB,CAAC;QAAE,OAAO,CAAC,CAAC;IACrD,MAAM,IAAI,KAAK,CACb,iEAAiE,GAAG,uBAAuB,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACpI,CAAC;AACJ,CAAC;AAeD,6DAA6D;AAC7D,SAAS,OAAO,CAAC,IAAa,EAAE,GAAW,EAAE,KAAkC;IAC7E,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAmC,EAAE,IAAa;IAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC;IACrC,mFAAmF;IACnF,MAAM,UAAU,GAAG,CAAC,MAA0C,EAAsB,EAAE,CACpF,QAAQ,KAAK,MAAM;QACjB,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,MAAM,cAAc,CAAC;QAClG,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,QAAQ,GAAoC;QAChD,QAAQ;QACR,mBAAmB,EAAE,UAAU,CAAC,UAAU,CAAC;QAC3C,gBAAgB,EACd,QAAQ,KAAK,QAAQ;YACnB,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gDAAgD,CAAC;YAC3F,CAAC,CAAC,SAAS;QACf,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,uBAAuB,CAAC;QAC/D,UAAU,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7H,oBAAoB,EAAE,UAAU,CAAC,WAAW,CAAC;QAC7C,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAyB,CAAC,IAAI,6BAA6B;KACnG,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,EAAE,4BAA4B,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,EAAE,8BAA8B,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,EAAE,gCAAgC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC/E,kFAAkF;IAClF,OAAO,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,0BAA0B,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,EAA+B,EAAE,IAAa;IAC/D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,kGAAkG;IAClG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjC,OAAO;QACL,QAAQ,EAAE;YACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI;YACpC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,EAAE,WAAW;YAChB,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC;QACD,SAAS,EAAE,SAAS;YAClB,CAAC,CAAC;gBACE,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI;gBACrC,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,GAAG,EAAE,cAAc,CAAC,SAAS,CAAC;gBAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;aACjC;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAiC,EAAE,EAA6B,EAAE,IAAa;IACjG,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAC/B,OAAO,CAAC,IAAI,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,EAAE,0BAA0B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,mCAAmC,aAAa,CAAC,KAAK,CAAC,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChI,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACnH,uDAAuD;QACvD,OAAO,CAAC,IAAI,EAAE,0BAA0B,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC,CAAC;IACpH,CAAC;SAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACnH,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACzC,8FAA8F;QAC9F,iGAAiG;QACjG,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,qCAAqC,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,qBAAqB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,4FAA4F;IAC5F,wFAAwF;IACxF,MAAM,eAAe,GAAG,SAAS,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,MAAM,GAAG,eAAe,IAAI,EAAE,CAAC,QAAQ,CAAC;IAC9C,OAAO;QACL,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc;YACjC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe;YACnC,KAAK,EAAE,eAAe,EAAE,KAAK;SAC9B;QACD,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAA+B,EAAE,IAAa;IACpE,MAAM,QAAQ,GAA8B;QAC1C,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC;QACpE,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,uBAAuB,CAAC;QAC1E,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC;QACxD,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,mBAAmB,CAAC,IAAI,KAAK;KACzE,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,EAAE,sBAAsB,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,SAAS;QAAE,OAAO,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAA2B,EAAE,IAAa;IAC9D,MAAM,QAAQ,GAA4B;QACxC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,CAAC;QAC1E,uBAAuB,EAAE,WAAW,CAAC,KAAK,EAAE,uBAAuB,EAAE,+BAA+B,CAAC,IAAI,KAAK;KAC/G,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,uBAAuB;QAAE,OAAO,CAAC,IAAI,EAAE,kCAAkC,EAAE,MAAM,CAAC,CAAC;IAChG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4GAA4G;AAC5G,SAAS,WAAW,CAAC,IAAyB,EAAE,IAAa;IAC3D,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,cAAc,CAAC,OAA+B,EAAE,IAAa;IACpE,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,CAAC,IAAI,KAAK,CAAC;IAC9G,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IACrG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,mBAAmB;QAAE,OAAO,CAAC,IAAI,EAAE,kCAAkC,EAAE,MAAM,CAAC,CAAC;IACnF,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,gBAAgB,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,qBAAqB,EAAE,IAAI,EAAE,IAAI,IAAI,qBAAqB,EAAE;QACpF,mBAAmB;QACnB,gBAAgB,EAAE,gBAAgB,IAAI,mCAAmC;KAC1E,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,0BAA0B,CACjC,QAAoC,EACpC,aAA8C;IAE9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,aAAa,CAAC,mBAAmB,CAAC;QAC3C,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,gBAAgB,CAAC;QACxC,KAAK,WAAW;YACd,OAAO,aAAa,CAAC,oBAAoB,CAAC;QAC5C,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,UAAU,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,MAA6B,EAC7B,aAA8C,EAC9C,IAAa;IAEb,+FAA+F;IAC/F,2DAA2D;IAC3D,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACnF,IAAI,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAE9G,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAChC,gGAAgG;IAChG,+CAA+C;IAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAA+B,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;QAC/F,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,8BAA8B,CAAC;YAChE,CAAC,CAAC,aAAa,CAAC,QAAQ;YACxB,CAAC,CAAC,UAAU,CAAC;IACjB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;IACxE,MAAM,0BAA0B,GAAG,WAAW,CAC5C,OAAO,EAAE,0BAA0B,EACnC,2CAA2C,CAC5C,CAAC;IACF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,4BAA4B,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,QAAQ,CAAC,CAAC;IACvF,OAAO,CAAC,IAAI,EAAE,2BAA2B,EAAE,aAAa,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,0BAA0B,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,EAAE,8BAA8B,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1F,IAAI,0BAA0B,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,EAAE,mDAAmD,EAAE,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,iCAAiC,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,EAAE,+BAA+B,EAAE,OAAO,CAAC,CAAC;IAExD,0FAA0F;IAC1F,uFAAuF;IACvF,MAAM,QAAQ,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IACxE,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClG,OAAO;QACL,OAAO,EAAE;YACP,QAAQ;YACR,WAAW,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;YAC3D,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACpD,OAAO,EAAE,OAAO,IAAI,KAAK;YACzB,0BAA0B,EAAE,0BAA0B,IAAI,KAAK;YAC/D,gCAAgC,EAC9B,QAAQ,KAAK,SAAS,IAAI,CAAC,0BAA0B,IAAI,uBAAuB,KAAK,SAAS;YAChG,SAAS,EAAE,SAAS,IAAI,iCAAiC;YACzD,OAAO,EAAE,OAAO,IAAI,+BAA+B;SACpD;KACF,CAAC;AACJ,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAY,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;IACxE,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ,EAAE;YACR,EAAE;YACF,aAAa;YACb,GAAG;YACH,OAAO;YACP,OAAO;YACP,GAAG;YACH,KAAK;YACL,uDAAuD;YACvD,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YACpC,MAAM;SACP;QACD,IAAI;QACJ,YAAY;KACb,CAAC;AACJ,CAAC"}
|