@adaptabletools/adaptable-mcp 0.1.0-canary.1 → 0.1.0-canary.2
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 +3 -1
- package/data/changes/21-22.json +542 -0
- package/data/changes/22-23.json +639 -0
- package/data/changes/23-24.json +1874 -0
- package/data/manifest.snapshot.json +28 -10
- package/data/templates/angular/src/app/adaptableOptions.ts +40 -0
- package/data/templates/angular/src/app/agGridModules.ts +7 -0
- package/data/templates/angular/src/app/app.component.ts +66 -0
- package/data/templates/angular/src/app/app.module.ts +14 -0
- package/data/templates/angular/src/app/columnDefs.ts +121 -0
- package/data/templates/angular/src/app/gridOptions.ts +32 -0
- package/data/templates/angular/src/app/onAdaptableReady.ts +11 -0
- package/data/templates/angular/src/app/rowData.ts +851 -0
- package/data/templates/angular/src/app/styles.css +50 -0
- package/data/templates/angular/src/index.html +17 -0
- package/data/templates/angular/src/main.ts +18 -0
- package/data/templates/angular/src/polyfills.ts +1 -0
- package/data/templates/angular/tsconfig.json +16 -0
- package/data/templates/manifest.json +406 -0
- package/data/templates/react/src/App.tsx +71 -0
- package/data/templates/react/src/adaptableOptions.ts +40 -0
- package/data/templates/react/src/agGridModules.ts +7 -0
- package/data/templates/react/src/columnDefs.ts +121 -0
- package/data/templates/react/src/gridOptions.ts +32 -0
- package/data/templates/react/src/index.tsx +8 -0
- package/data/templates/react/src/onAdaptableReady.ts +11 -0
- package/data/templates/react/src/rowData.ts +851 -0
- package/data/templates/react/src/styles.css +50 -0
- package/data/templates/react/tsconfig.json +9 -0
- package/data/templates/vanilla/index.html +18 -0
- package/data/templates/vanilla/src/adaptableOptions.ts +40 -0
- package/data/templates/vanilla/src/agGridModules.ts +7 -0
- package/data/templates/vanilla/src/columnDefs.ts +121 -0
- package/data/templates/vanilla/src/gridOptions.ts +32 -0
- package/data/templates/vanilla/src/index.ts +41 -0
- package/data/templates/vanilla/src/onAdaptableReady.ts +11 -0
- package/data/templates/vanilla/src/rowData.ts +851 -0
- package/data/templates/vanilla/src/styles.css +50 -0
- package/data/templates/vanilla/tsconfig.json +14 -0
- package/data/templates/vue/.babelrc +3 -0
- package/data/templates/vue/public/index.html +19 -0
- package/data/templates/vue/src/App.vue +35 -0
- package/data/templates/vue/src/adaptableOptions.ts +40 -0
- package/data/templates/vue/src/agGridModules.ts +7 -0
- package/data/templates/vue/src/columnDefs.ts +121 -0
- package/data/templates/vue/src/gridOptions.ts +32 -0
- package/data/templates/vue/src/main.ts +6 -0
- package/data/templates/vue/src/onAdaptableReady.ts +11 -0
- package/data/templates/vue/src/rowData.ts +851 -0
- package/data/templates/vue/src/shims-vue.d.ts +6 -0
- package/data/templates/vue/src/styles.css +50 -0
- package/data/templates/vue/tsconfig.json +30 -0
- package/dist/bin.js +7 -0
- package/dist/bin.js.map +1 -1
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/anonymise/anonymise.js +315 -0
- package/dist/core/anonymise/anonymise.js.map +1 -0
- package/dist/core/anonymise/capabilities.js +94 -0
- package/dist/core/anonymise/capabilities.js.map +1 -0
- package/dist/core/aql/capabilities.js +339 -0
- package/dist/core/aql/capabilities.js.map +1 -0
- package/dist/core/aql/check.js +204 -0
- package/dist/core/aql/check.js.map +1 -0
- package/dist/core/aql/engine.js +92 -0
- package/dist/core/aql/engine.js.map +1 -0
- package/dist/core/aql/functions.js +108 -0
- package/dist/core/aql/functions.js.map +1 -0
- package/dist/core/aql/migrate.js +62 -0
- package/dist/core/aql/migrate.js.map +1 -0
- package/dist/core/capabilities.js +9 -3
- package/dist/core/capabilities.js.map +1 -1
- package/dist/core/changes/capabilities.js +92 -0
- package/dist/core/changes/capabilities.js.map +1 -0
- package/dist/core/changes/changes.js +101 -0
- package/dist/core/changes/changes.js.map +1 -0
- package/dist/core/changes/grep.js +183 -0
- package/dist/core/changes/grep.js.map +1 -0
- package/dist/core/changes/records.js +172 -0
- package/dist/core/changes/records.js.map +1 -0
- package/dist/core/changes/render-md.js +101 -0
- package/dist/core/changes/render-md.js.map +1 -0
- package/dist/core/changes/with-docs.js +86 -0
- package/dist/core/changes/with-docs.js.map +1 -0
- package/dist/core/compat/capabilities.js +1 -1
- package/dist/core/compat/capabilities.js.map +1 -1
- package/dist/core/context/capabilities.js +1 -1
- package/dist/core/context/capabilities.js.map +1 -1
- package/dist/core/convert/capabilities.js +86 -0
- package/dist/core/convert/capabilities.js.map +1 -0
- package/dist/core/convert/coldefs.js +313 -0
- package/dist/core/convert/coldefs.js.map +1 -0
- package/dist/core/docs/cache.js +1 -1
- package/dist/core/docs/capabilities.js +1 -5
- package/dist/core/docs/capabilities.js.map +1 -1
- package/dist/core/docs/hosts.js +2 -2
- package/dist/core/docs/hosts.js.map +1 -1
- package/dist/core/extract/imports.js +163 -0
- package/dist/core/extract/imports.js.map +1 -0
- package/dist/core/extract/input.js +140 -0
- package/dist/core/extract/input.js.map +1 -0
- package/dist/core/extract/line-map.js +90 -0
- package/dist/core/extract/line-map.js.map +1 -0
- package/dist/core/extract/ts-literal.js +963 -0
- package/dist/core/extract/ts-literal.js.map +1 -0
- package/dist/core/migrate/capabilities.js +143 -0
- package/dist/core/migrate/capabilities.js.map +1 -0
- package/dist/core/migrate/leftovers.js +119 -0
- package/dist/core/migrate/leftovers.js.map +1 -0
- package/dist/core/migrate/state.js +295 -0
- package/dist/core/migrate/state.js.map +1 -0
- package/dist/core/packages/cache.js +2 -1
- package/dist/core/packages/cache.js.map +1 -1
- package/dist/core/register.js +8 -0
- package/dist/core/register.js.map +1 -1
- package/dist/core/scaffold/capabilities.js +434 -0
- package/dist/core/scaffold/capabilities.js.map +1 -0
- package/dist/core/scaffold/generate.js +409 -0
- package/dist/core/scaffold/generate.js.map +1 -0
- package/dist/core/scaffold/infer.js +441 -0
- package/dist/core/scaffold/infer.js.map +1 -0
- package/dist/core/scaffold/overlay.js +290 -0
- package/dist/core/scaffold/overlay.js.map +1 -0
- package/dist/core/scaffold/readers/csv.js +146 -0
- package/dist/core/scaffold/readers/csv.js.map +1 -0
- package/dist/core/scaffold/readers/dataset.js +53 -0
- package/dist/core/scaffold/readers/dataset.js.map +1 -0
- package/dist/core/scaffold/readers/index.js +62 -0
- package/dist/core/scaffold/readers/index.js.map +1 -0
- package/dist/core/scaffold/readers/json.js +101 -0
- package/dist/core/scaffold/readers/json.js.map +1 -0
- package/dist/core/scaffold/readers/xlsx.js +81 -0
- package/dist/core/scaffold/readers/xlsx.js.map +1 -0
- package/dist/core/scaffold/suggestions.js +57 -0
- package/dist/core/scaffold/suggestions.js.map +1 -0
- package/dist/core/scaffold/templates.js +59 -0
- package/dist/core/scaffold/templates.js.map +1 -0
- package/dist/core/setup/audit.js +91 -0
- package/dist/core/setup/audit.js.map +1 -0
- package/dist/core/setup/capabilities.js +80 -0
- package/dist/core/setup/capabilities.js.map +1 -0
- package/dist/core/setup/context.js +118 -0
- package/dist/core/setup/context.js.map +1 -0
- package/dist/core/setup/rules/cell-data-type.js +40 -0
- package/dist/core/setup/rules/cell-data-type.js.map +1 -0
- package/dist/core/setup/rules/coldef-ownership.js +67 -0
- package/dist/core/setup/rules/coldef-ownership.js.map +1 -0
- package/dist/core/setup/rules/css-import.js +34 -0
- package/dist/core/setup/rules/css-import.js.map +1 -0
- package/dist/core/setup/rules/direct-grid.js +42 -0
- package/dist/core/setup/rules/direct-grid.js.map +1 -0
- package/dist/core/setup/rules/index.js +53 -0
- package/dist/core/setup/rules/index.js.map +1 -0
- package/dist/core/setup/rules/licence-literal.js +23 -0
- package/dist/core/setup/rules/licence-literal.js.map +1 -0
- package/dist/core/setup/rules/modules.js +86 -0
- package/dist/core/setup/rules/modules.js.map +1 -0
- package/dist/core/setup/rules/react-stable-refs.js +20 -0
- package/dist/core/setup/rules/react-stable-refs.js.map +1 -0
- package/dist/core/setup/rules/ready-hook.js +33 -0
- package/dist/core/setup/rules/ready-hook.js.map +1 -0
- package/dist/core/setup/rules/required-options.js +43 -0
- package/dist/core/setup/rules/required-options.js.map +1 -0
- package/dist/core/setup/rules/rule.js +10 -0
- package/dist/core/setup/rules/rule.js.map +1 -0
- package/dist/core/setup/rules/version-skew.js +65 -0
- package/dist/core/setup/rules/version-skew.js.map +1 -0
- package/dist/core/state/capabilities.js +78 -0
- package/dist/core/state/capabilities.js.map +1 -0
- package/dist/core/state/check.js +216 -0
- package/dist/core/state/check.js.map +1 -0
- package/dist/core/state/columns.js +130 -0
- package/dist/core/state/columns.js.map +1 -0
- package/dist/core/state/did-you-mean.js +83 -0
- package/dist/core/state/did-you-mean.js.map +1 -0
- package/dist/core/state/expressions.js +170 -0
- package/dist/core/state/expressions.js.map +1 -0
- package/dist/core/state/known-names.js +96 -0
- package/dist/core/state/known-names.js.map +1 -0
- package/dist/core/state/rules/aql-legacy-shape.js +42 -0
- package/dist/core/state/rules/aql-legacy-shape.js.map +1 -0
- package/dist/core/state/rules/aql-missing.js +21 -0
- package/dist/core/state/rules/aql-missing.js.map +1 -0
- package/dist/core/state/rules/aql-syntax.js +77 -0
- package/dist/core/state/rules/aql-syntax.js.map +1 -0
- package/dist/core/state/rules/calculated-settings.js +23 -0
- package/dist/core/state/rules/calculated-settings.js.map +1 -0
- package/dist/core/state/rules/column-id-exists.js +29 -0
- package/dist/core/state/rules/column-id-exists.js.map +1 -0
- package/dist/core/state/rules/dashboard-module-names.js +31 -0
- package/dist/core/state/rules/dashboard-module-names.js.map +1 -0
- package/dist/core/state/rules/dashboard-toolbar-names.js +48 -0
- package/dist/core/state/rules/dashboard-toolbar-names.js.map +1 -0
- package/dist/core/state/rules/format-column-pivot-display-format.js +43 -0
- package/dist/core/state/rules/format-column-pivot-display-format.js.map +1 -0
- package/dist/core/state/rules/helpers.js +39 -0
- package/dist/core/state/rules/helpers.js.map +1 -0
- package/dist/core/state/rules/index.js +80 -0
- package/dist/core/state/rules/index.js.map +1 -0
- package/dist/core/state/rules/layout-column-refs.js +60 -0
- package/dist/core/state/rules/layout-column-refs.js.map +1 -0
- package/dist/core/state/rules/layout-current-exists.js +27 -0
- package/dist/core/state/rules/layout-current-exists.js.map +1 -0
- package/dist/core/state/rules/layout-non-empty.js +32 -0
- package/dist/core/state/rules/layout-non-empty.js.map +1 -0
- package/dist/core/state/rules/rule.js +2 -0
- package/dist/core/state/rules/rule.js.map +1 -0
- package/dist/core/state/rules/scope-column-refs.js +32 -0
- package/dist/core/state/rules/scope-column-refs.js.map +1 -0
- package/dist/core/state/rules/scope-shape.js +61 -0
- package/dist/core/state/rules/scope-shape.js.map +1 -0
- package/dist/core/state/rules/state-unique-name.js +40 -0
- package/dist/core/state/rules/state-unique-name.js.map +1 -0
- package/dist/core/state/rules/state-unknown-section.js +30 -0
- package/dist/core/state/rules/state-unknown-section.js.map +1 -0
- package/dist/core/state/rules/type-discriminator.js +70 -0
- package/dist/core/state/rules/type-discriminator.js.map +1 -0
- package/dist/core/state/type-check.js +349 -83
- package/dist/core/state/type-check.js.map +1 -1
- package/dist/mcp/index.js +104 -16
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.js +110 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/skills/adaptable-debug/SKILL.md +145 -0
- package/dist/skills/adaptable-debug/VERSION.md +1 -0
- package/dist/skills/adaptable-debug/references/_shared/agents-snippet.md +3 -0
- package/dist/skills/adaptable-debug/references/_shared/capabilities.md +35 -0
- package/dist/skills/adaptable-debug/references/_shared/conversation.md +20 -0
- package/dist/skills/adaptable-debug/references/_shared/docs-protocol.md +36 -0
- package/dist/skills/adaptable-debug/references/_shared/grounding.md +54 -0
- package/dist/skills/adaptable-debug/references/_shared/guards.md +20 -0
- package/dist/skills/adaptable-debug/references/_shared/validation-loop.md +42 -0
- package/dist/skills/adaptable-debug/references/devtools-api.md +36 -0
- package/dist/skills/adaptable-debug/references/feedback-template.md +36 -0
- package/dist/skills/adaptable-debug/references/symptoms.md +37 -0
- package/dist/skills/adaptable-debug/references/ticket-template.md +50 -0
- package/dist/skills/adaptable-dev/SKILL.md +97 -0
- package/dist/skills/adaptable-dev/VERSION.md +1 -0
- package/dist/skills/adaptable-dev/references/_shared/agents-snippet.md +3 -0
- package/dist/skills/adaptable-dev/references/_shared/capabilities.md +35 -0
- package/dist/skills/adaptable-dev/references/_shared/conversation.md +20 -0
- package/dist/skills/adaptable-dev/references/_shared/docs-protocol.md +36 -0
- package/dist/skills/adaptable-dev/references/_shared/grounding.md +54 -0
- package/dist/skills/adaptable-dev/references/_shared/guards.md +20 -0
- package/dist/skills/adaptable-dev/references/_shared/validation-loop.md +42 -0
- package/dist/skills/adaptable-dev/references/recommendations.md +93 -0
- package/dist/skills/adaptable-setup/SKILL.md +158 -0
- package/dist/skills/adaptable-setup/VERSION.md +1 -0
- package/dist/skills/adaptable-setup/references/_shared/agents-snippet.md +3 -0
- package/dist/skills/adaptable-setup/references/_shared/capabilities.md +35 -0
- package/dist/skills/adaptable-setup/references/_shared/conversation.md +20 -0
- package/dist/skills/adaptable-setup/references/_shared/docs-protocol.md +36 -0
- package/dist/skills/adaptable-setup/references/_shared/grounding.md +54 -0
- package/dist/skills/adaptable-setup/references/_shared/guards.md +20 -0
- package/dist/skills/adaptable-setup/references/_shared/validation-loop.md +42 -0
- package/dist/skills/adaptable-setup/references/paths.md +45 -0
- package/dist/skills/adaptable-upgrade/SKILL.md +269 -0
- package/dist/skills/adaptable-upgrade/VERSION.md +1 -0
- package/dist/skills/adaptable-upgrade/references/_shared/agents-snippet.md +3 -0
- package/dist/skills/adaptable-upgrade/references/_shared/capabilities.md +35 -0
- package/dist/skills/adaptable-upgrade/references/_shared/conversation.md +20 -0
- package/dist/skills/adaptable-upgrade/references/_shared/docs-protocol.md +36 -0
- package/dist/skills/adaptable-upgrade/references/_shared/grounding.md +54 -0
- package/dist/skills/adaptable-upgrade/references/_shared/guards.md +20 -0
- package/dist/skills/adaptable-upgrade/references/_shared/validation-loop.md +42 -0
- package/dist/skills/adaptable-upgrade/references/apply-order.md +171 -0
- package/dist/skills/adaptable-upgrade/references/plan-preamble.md +151 -0
- package/dist/skills/adaptable-upgrade/scripts/adaptable.mjs +24 -0
- package/package.json +11 -5
- package/dist/core/state/rules.js +0 -417
- package/dist/core/state/rules.js.map +0 -1
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
const SAFE_ID = /^[A-Za-z_$][\w$]*$/;
|
|
2
|
+
/** A string literal for generated code (single quotes) */
|
|
3
|
+
export function str(value) {
|
|
4
|
+
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\n/g, '\\n')}'`;
|
|
5
|
+
}
|
|
6
|
+
/** A property key for an interface or object literal: bare when it is an identifier */
|
|
7
|
+
export function key(name) {
|
|
8
|
+
return SAFE_ID.test(name) ? name : str(name);
|
|
9
|
+
}
|
|
10
|
+
/** `trades.csv` → `TradesRow`; `my data.xlsx` → `MyDataRow`; nothing usable → `Row` */
|
|
11
|
+
export function rowTypeName(stem) {
|
|
12
|
+
const words = (stem ?? '').split(/[^A-Za-z0-9]+/).filter((w) => w.length > 0);
|
|
13
|
+
const pascal = words.map((w) => w[0].toUpperCase() + w.slice(1)).join('');
|
|
14
|
+
const base = /^[A-Za-z]/.test(pascal) ? pascal : '';
|
|
15
|
+
return `${base}Row`;
|
|
16
|
+
}
|
|
17
|
+
/** AG Grid `cellDataType` for a column (dates are parsed to `Date` in `rowData.ts`) */
|
|
18
|
+
export function cellDataTypeOf(column) {
|
|
19
|
+
return column.cellDataType;
|
|
20
|
+
}
|
|
21
|
+
function tsTypeOf(column) {
|
|
22
|
+
const base = { text: 'string', number: 'number', boolean: 'boolean', date: 'Date', object: 'unknown' }[column.cellDataType];
|
|
23
|
+
return column.nullable && base !== 'unknown' ? `${base} | null` : base;
|
|
24
|
+
}
|
|
25
|
+
export function generateColumnDefs(input) {
|
|
26
|
+
const lines = [
|
|
27
|
+
`import { ColDef } from 'ag-grid-enterprise';`,
|
|
28
|
+
`import { ${input.rowType} } from './rowData';`,
|
|
29
|
+
'',
|
|
30
|
+
`export const columnDefs: ColDef<${input.rowType}>[] = [`,
|
|
31
|
+
];
|
|
32
|
+
for (const column of input.schema.columns) {
|
|
33
|
+
lines.push(' {', ` colId: ${str(column.colId)},`, ` field: ${str(column.field)},`, ` headerName: ${str(column.headerName)},`, ` cellDataType: ${str(cellDataTypeOf(column))},`);
|
|
34
|
+
if (column.enumLike && column.cellDataType === 'text') {
|
|
35
|
+
lines.push(' enableRowGroup: true,', ' enablePivot: true,');
|
|
36
|
+
}
|
|
37
|
+
if (column.cellDataType === 'number') {
|
|
38
|
+
lines.push(' enableValue: true,');
|
|
39
|
+
}
|
|
40
|
+
if (column.field === input.primaryKey) {
|
|
41
|
+
lines.push(' editable: false,');
|
|
42
|
+
}
|
|
43
|
+
lines.push(' },');
|
|
44
|
+
}
|
|
45
|
+
lines.push('];', '');
|
|
46
|
+
return lines.join('\n');
|
|
47
|
+
}
|
|
48
|
+
function dateColumns(schema) {
|
|
49
|
+
return schema.columns.filter((c) => c.cellDataType === 'date');
|
|
50
|
+
}
|
|
51
|
+
const PARSE_DATE = `/** Parses a cell to a Date by the format the scaffold detected; unparseable or empty → null */
|
|
52
|
+
function parseDate(value: unknown, format: string): Date | null {
|
|
53
|
+
if (value === null || value === undefined || value === '') {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
if (value instanceof Date) {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
const text = String(value).trim();
|
|
60
|
+
const numeric = text.match(/^(\\d{1,4})[-/.](\\d{1,2})[-/.](\\d{1,4})$/);
|
|
61
|
+
if (numeric) {
|
|
62
|
+
const [a, b, c] = [Number(numeric[1]), Number(numeric[2]), Number(numeric[3])];
|
|
63
|
+
if (format.startsWith('DD')) {
|
|
64
|
+
return new Date(c, b - 1, a);
|
|
65
|
+
}
|
|
66
|
+
if (format.startsWith('MM')) {
|
|
67
|
+
return new Date(c, a - 1, b);
|
|
68
|
+
}
|
|
69
|
+
return new Date(a, b - 1, c);
|
|
70
|
+
}
|
|
71
|
+
const parsed = new Date(text);
|
|
72
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
73
|
+
}`;
|
|
74
|
+
export function generateRowData(input) {
|
|
75
|
+
const { rowType, schema } = input;
|
|
76
|
+
const dates = dateColumns(schema);
|
|
77
|
+
const lines = [];
|
|
78
|
+
lines.push(`export interface ${rowType} {`);
|
|
79
|
+
for (const column of schema.columns) {
|
|
80
|
+
lines.push(` ${key(column.field)}: ${tsTypeOf(column)};`);
|
|
81
|
+
}
|
|
82
|
+
lines.push('}', '');
|
|
83
|
+
const needsParse = dates.length > 0;
|
|
84
|
+
if (needsParse) {
|
|
85
|
+
lines.push(PARSE_DATE, '');
|
|
86
|
+
lines.push(`const DATE_FORMATS: Record<string, string> = {`);
|
|
87
|
+
for (const column of dates) {
|
|
88
|
+
lines.push(` ${key(column.field)}: ${str(column.dateFormat ?? 'ISO 8601')},`);
|
|
89
|
+
}
|
|
90
|
+
lines.push('};', '');
|
|
91
|
+
}
|
|
92
|
+
lines.push(`/** Converts a raw record (strings and JSON values) to a typed row */`);
|
|
93
|
+
lines.push(`export function toRow(raw: Record<string, unknown>): ${rowType} {`);
|
|
94
|
+
if (needsParse) {
|
|
95
|
+
lines.push(' const row: Record<string, unknown> = { ...raw };');
|
|
96
|
+
lines.push(' for (const [field, format] of Object.entries(DATE_FORMATS)) {');
|
|
97
|
+
lines.push(' row[field] = parseDate(raw[field], format);');
|
|
98
|
+
lines.push(' }');
|
|
99
|
+
lines.push(` return row as unknown as ${rowType};`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
lines.push(` return raw as unknown as ${rowType};`);
|
|
103
|
+
}
|
|
104
|
+
lines.push('}', '');
|
|
105
|
+
if (input.sourceUrl) {
|
|
106
|
+
lines.push(`export const SOURCE_URL = ${str(input.sourceUrl)};`, '');
|
|
107
|
+
lines.push(`/** Rows arrive from SOURCE_URL after the grid is ready (see onAdaptableReady.ts) */`);
|
|
108
|
+
lines.push(`export const rowData: ${rowType}[] = [];`, '');
|
|
109
|
+
lines.push(`/** Fetches SOURCE_URL and converts the payload to rows${input.sourceArrayPath ? ` (the array is under "${input.sourceArrayPath}", as in the sample)` : ''} */`);
|
|
110
|
+
lines.push(`export async function fetchRowData(): Promise<${rowType}[]> {`);
|
|
111
|
+
lines.push(' const response = await fetch(SOURCE_URL);');
|
|
112
|
+
lines.push(' if (!response.ok) {');
|
|
113
|
+
lines.push(' throw new Error(`${SOURCE_URL} returned ${response.status}`);');
|
|
114
|
+
lines.push(' }');
|
|
115
|
+
lines.push(' const payload: unknown = await response.json();');
|
|
116
|
+
if (input.sourceArrayPath) {
|
|
117
|
+
lines.push(` const records = (payload as Record<string, unknown>)[${str(input.sourceArrayPath)}];`);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
lines.push(' const records = payload;');
|
|
121
|
+
}
|
|
122
|
+
lines.push(' if (!Array.isArray(records)) {');
|
|
123
|
+
lines.push(` throw new Error(\`\${SOURCE_URL} did not return an array of rows\`);`);
|
|
124
|
+
lines.push(' }');
|
|
125
|
+
lines.push(' return (records as Record<string, unknown>[]).map(toRow);');
|
|
126
|
+
lines.push('}', '');
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
lines.push(`const raw: Record<string, unknown>[] = ${JSON.stringify(input.rows, null, 2)};`, '');
|
|
130
|
+
lines.push(`export const rowData: ${rowType}[] = raw.map(toRow);`, '');
|
|
131
|
+
}
|
|
132
|
+
return lines.join('\n');
|
|
133
|
+
}
|
|
134
|
+
/** The Initial State (plan §8.11): one Layout with every column, Dashboard with Layout and Export */
|
|
135
|
+
export function buildInitialState(schema) {
|
|
136
|
+
return {
|
|
137
|
+
Dashboard: {
|
|
138
|
+
Tabs: [{ Name: 'Grid', Toolbars: ['Layout', 'Export'] }],
|
|
139
|
+
},
|
|
140
|
+
Layout: {
|
|
141
|
+
CurrentLayout: 'Default Layout',
|
|
142
|
+
Layouts: [{ Name: 'Default Layout', TableColumns: schema.columns.map((c) => c.colId) }],
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** Renders a JSON value as a TypeScript literal with bare identifier keys and single-quoted strings */
|
|
147
|
+
export function tsLiteral(value, indent = 2, level = 1) {
|
|
148
|
+
const pad = ' '.repeat(indent * level);
|
|
149
|
+
const padEnd = ' '.repeat(indent * (level - 1));
|
|
150
|
+
if (Array.isArray(value)) {
|
|
151
|
+
if (value.length === 0) {
|
|
152
|
+
return '[]';
|
|
153
|
+
}
|
|
154
|
+
return `[\n${value.map((item) => `${pad}${tsLiteral(item, indent, level + 1)},`).join('\n')}\n${padEnd}]`;
|
|
155
|
+
}
|
|
156
|
+
if (value && typeof value === 'object') {
|
|
157
|
+
const entries = Object.entries(value);
|
|
158
|
+
if (entries.length === 0) {
|
|
159
|
+
return '{}';
|
|
160
|
+
}
|
|
161
|
+
return `{\n${entries.map(([k, v]) => `${pad}${key(k)}: ${tsLiteral(v, indent, level + 1)},`).join('\n')}\n${padEnd}}`;
|
|
162
|
+
}
|
|
163
|
+
if (typeof value === 'string') {
|
|
164
|
+
return str(value);
|
|
165
|
+
}
|
|
166
|
+
return String(value);
|
|
167
|
+
}
|
|
168
|
+
export function generateAdaptableOptions(input) {
|
|
169
|
+
const state = buildInitialState(input.schema);
|
|
170
|
+
return [
|
|
171
|
+
`import { AdaptableOptions } from '@adaptabletools/adaptable';`,
|
|
172
|
+
`import { ADAPTABLE_LICENSE_KEY } from './licenses';`,
|
|
173
|
+
`import { ${input.rowType} } from './rowData';`,
|
|
174
|
+
'',
|
|
175
|
+
`export const adaptableOptions: AdaptableOptions<${input.rowType}> = {`,
|
|
176
|
+
` primaryKey: ${str(input.primaryKey)},`,
|
|
177
|
+
` adaptableId: ${str(input.adaptableId)},`,
|
|
178
|
+
` licenseKey: ADAPTABLE_LICENSE_KEY,`,
|
|
179
|
+
` initialState: ${tsLiteral(state, 2, 2)},`,
|
|
180
|
+
'};',
|
|
181
|
+
'',
|
|
182
|
+
].join('\n');
|
|
183
|
+
}
|
|
184
|
+
export function generateGridOptions(input) {
|
|
185
|
+
const lines = [
|
|
186
|
+
`import { GridOptions, themeBalham } from 'ag-grid-enterprise';`,
|
|
187
|
+
'',
|
|
188
|
+
`import { rowData, ${input.rowType} } from './rowData';`,
|
|
189
|
+
`import { columnDefs } from './columnDefs';`,
|
|
190
|
+
'',
|
|
191
|
+
`export const gridOptions: GridOptions<${input.rowType}> = {`,
|
|
192
|
+
' theme: themeBalham,',
|
|
193
|
+
' defaultColDef: {',
|
|
194
|
+
' resizable: true,',
|
|
195
|
+
' sortable: true,',
|
|
196
|
+
' editable: true,',
|
|
197
|
+
' filter: true,',
|
|
198
|
+
' floatingFilter: true,',
|
|
199
|
+
' },',
|
|
200
|
+
' columnDefs: columnDefs,',
|
|
201
|
+
];
|
|
202
|
+
if (input.rowModel === 'server') {
|
|
203
|
+
lines.push(` rowModelType: 'serverSide',`, ' // A datasource that serves the embedded rows; replace it with your server call. AdapTable sends its', ' // filters, sorts and groups in the request: see the Server-Side Row Model guide in the docs.', ' serverSideDatasource: {', ' getRows: (params) => {', ' const start = params.request.startRow ?? 0;', ' const end = params.request.endRow ?? rowData.length;', ' params.success({ rowData: rowData.slice(start, end), rowCount: rowData.length });', ' },', ' },');
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
lines.push(' rowData: rowData,');
|
|
207
|
+
}
|
|
208
|
+
if (input.schema.dottedFields.length > 0) {
|
|
209
|
+
lines.push(' // field names contain dots; read them as plain keys', ' suppressFieldDotNotation: true,');
|
|
210
|
+
}
|
|
211
|
+
lines.push(' sideBar: true,', ' suppressMenuHide: true,', ` columnMenu: 'new',`, ' cellSelection: true,', ' statusBar: {', ' statusPanels: [', ` { statusPanel: 'agTotalRowCountComponent', align: 'left' },`, ` { statusPanel: 'agFilteredRowCountComponent' },`, ` { key: 'Center Panel', statusPanel: 'AdaptableStatusPanel', align: 'center' },`, ' ],', ' },', '};', '');
|
|
212
|
+
return lines.join('\n');
|
|
213
|
+
}
|
|
214
|
+
export function generateAgGridModules() {
|
|
215
|
+
return [
|
|
216
|
+
`import { AllEnterpriseModule, LicenseManager, Module, ValidationModule } from 'ag-grid-enterprise';`,
|
|
217
|
+
`import { AG_GRID_LICENSE_KEY } from './licenses';`,
|
|
218
|
+
'',
|
|
219
|
+
'if (AG_GRID_LICENSE_KEY) {',
|
|
220
|
+
' LicenseManager.setLicenseKey(AG_GRID_LICENSE_KEY);',
|
|
221
|
+
'}',
|
|
222
|
+
'',
|
|
223
|
+
'export const agGridModules: Module[] = [AllEnterpriseModule, ValidationModule];',
|
|
224
|
+
'',
|
|
225
|
+
].join('\n');
|
|
226
|
+
}
|
|
227
|
+
/** Licence placeholders (plan §8.11): environment reads for Vite frameworks, `undefined` to fill for Angular; never a literal */
|
|
228
|
+
export function generateLicenses(framework) {
|
|
229
|
+
const header = [
|
|
230
|
+
'// Licence keys for AdapTable and AG Grid Enterprise. Keep them out of source control: read them',
|
|
231
|
+
'// from the build environment or your secret store. Without a key both run in evaluation mode.',
|
|
232
|
+
'',
|
|
233
|
+
];
|
|
234
|
+
if (framework === 'angular') {
|
|
235
|
+
return [
|
|
236
|
+
...header,
|
|
237
|
+
'// Angular: expose the keys through src/environments/environment.ts (`ng generate environments`)',
|
|
238
|
+
'// and import them here, e.g. `import { environment } from "../environments/environment";`.',
|
|
239
|
+
'export const ADAPTABLE_LICENSE_KEY: string | undefined = undefined;',
|
|
240
|
+
'export const AG_GRID_LICENSE_KEY: string | undefined = undefined;',
|
|
241
|
+
'',
|
|
242
|
+
].join('\n');
|
|
243
|
+
}
|
|
244
|
+
return [
|
|
245
|
+
...header,
|
|
246
|
+
'// Vite: define VITE_ADAPTABLE_LICENSE_KEY and VITE_AG_GRID_LICENSE_KEY in a .env.local file (git-ignored).',
|
|
247
|
+
'export const ADAPTABLE_LICENSE_KEY: string | undefined = import.meta.env.VITE_ADAPTABLE_LICENSE_KEY;',
|
|
248
|
+
'export const AG_GRID_LICENSE_KEY: string | undefined = import.meta.env.VITE_AG_GRID_LICENSE_KEY;',
|
|
249
|
+
'',
|
|
250
|
+
].join('\n');
|
|
251
|
+
}
|
|
252
|
+
export function generateOnAdaptableReady(input) {
|
|
253
|
+
if (!input.sourceUrl) {
|
|
254
|
+
return [
|
|
255
|
+
`import { AdaptableReadyInfo } from '@adaptabletools/adaptable';`,
|
|
256
|
+
'',
|
|
257
|
+
'export const onAdaptableReady = ({ adaptableApi }: AdaptableReadyInfo) => {',
|
|
258
|
+
' const optionsApi = adaptableApi.optionsApi;',
|
|
259
|
+
` console.log(optionsApi.getAdaptableId(), 'is ready');`,
|
|
260
|
+
'};',
|
|
261
|
+
'',
|
|
262
|
+
].join('\n');
|
|
263
|
+
}
|
|
264
|
+
return [
|
|
265
|
+
`import { AdaptableReadyInfo } from '@adaptabletools/adaptable';`,
|
|
266
|
+
`import { fetchRowData, SOURCE_URL } from './rowData';`,
|
|
267
|
+
'',
|
|
268
|
+
'export const onAdaptableReady = ({ adaptableApi }: AdaptableReadyInfo) => {',
|
|
269
|
+
' fetchRowData()',
|
|
270
|
+
' .then((rows) => adaptableApi.gridApi.loadGridData(rows))',
|
|
271
|
+
' .catch((error: unknown) => {',
|
|
272
|
+
` console.error('Could not load rows from', SOURCE_URL, error);`,
|
|
273
|
+
' });',
|
|
274
|
+
'};',
|
|
275
|
+
'',
|
|
276
|
+
].join('\n');
|
|
277
|
+
}
|
|
278
|
+
/** The demo templates disable State persistence; a scaffolded app should persist (AdapTable's default is localStorage) */
|
|
279
|
+
const STATE_OPTIONS_BLOCK = /\n\s*stateOptions:\s*\{\s*\n\s*loadState: \(\) => Promise\.resolve\(\{\}\),\s*\n\s*persistState: \(\) => Promise\.resolve\(\),\s*\n\s*\.\.\.\(adaptableOptions\?\.stateOptions \?\? \{\}\),\s*\n\s*\},/;
|
|
280
|
+
/** Adapts a docs wiring file: row type name, and the no-persistence block removed */
|
|
281
|
+
export function adaptWiring(template, rowType) {
|
|
282
|
+
const renamed = template.replace(/\bWebFramework\b/g, rowType);
|
|
283
|
+
const persistenceRestored = STATE_OPTIONS_BLOCK.test(renamed);
|
|
284
|
+
return { content: renamed.replace(STATE_OPTIONS_BLOCK, ''), persistenceRestored };
|
|
285
|
+
}
|
|
286
|
+
/** React: Vite's react-ts tsconfig has `noUnusedLocals`; the demo's unused state setters would fail the build */
|
|
287
|
+
export function reactApp(template, rowType) {
|
|
288
|
+
const wiring = adaptWiring(template, rowType);
|
|
289
|
+
return {
|
|
290
|
+
...wiring,
|
|
291
|
+
content: wiring.content.replace(/const \[(\w+), set\w+\] = useState</g, 'const [$1] = useState<'),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/** Vite's `index.html` has `#app`; AdapTable's containers default to `#adaptable` and `#grid` */
|
|
295
|
+
export function vanillaMain(template, rowType) {
|
|
296
|
+
const wiring = adaptWiring(template, rowType);
|
|
297
|
+
const prelude = [
|
|
298
|
+
`// Vite's index.html provides #app; AdapTable mounts into #adaptable and the grid into #grid`,
|
|
299
|
+
`// (adaptableOptions.containerOptions can rename them).`,
|
|
300
|
+
`const app = document.querySelector<HTMLDivElement>('#app') ?? document.body;`,
|
|
301
|
+
`app.style.cssText = 'display: flex; flex-direction: column; height: 100vh;';`,
|
|
302
|
+
`app.innerHTML = '<div id="adaptable"></div><div id="grid" style="flex: 1"></div>';`,
|
|
303
|
+
'',
|
|
304
|
+
].join('\n');
|
|
305
|
+
// after the imports, before the first statement
|
|
306
|
+
const lastImport = wiring.content.lastIndexOf('\nimport ');
|
|
307
|
+
const importsEnd = lastImport >= 0 ? wiring.content.indexOf('\n', wiring.content.indexOf(';', lastImport)) + 1 : 0;
|
|
308
|
+
return { ...wiring, content: `${wiring.content.slice(0, importsEnd)}\n${prelude}${wiring.content.slice(importsEnd)}` };
|
|
309
|
+
}
|
|
310
|
+
/** Vue: the creator's `main.ts` is left alone, so the CSS imports move into `App.vue` */
|
|
311
|
+
export function vueApp(template, rowType, adaptablePackage) {
|
|
312
|
+
const wiring = adaptWiring(template, rowType);
|
|
313
|
+
const marker = '<script setup lang="ts">\n';
|
|
314
|
+
const at = wiring.content.indexOf(marker);
|
|
315
|
+
const imports = `import '${adaptablePackage}/index.css';\nimport './styles.css';\n`;
|
|
316
|
+
if (at < 0) {
|
|
317
|
+
return { ...wiring, content: `<script setup lang="ts">\n${imports}</script>\n${wiring.content}` };
|
|
318
|
+
}
|
|
319
|
+
const cut = at + marker.length;
|
|
320
|
+
return { ...wiring, content: `${wiring.content.slice(0, cut)}${imports}${wiring.content.slice(cut)}` };
|
|
321
|
+
}
|
|
322
|
+
/** Angular: a standalone root component (the docs template is NgModule-based; `ng new` has been standalone since 17) */
|
|
323
|
+
export function angularComponent(input, target) {
|
|
324
|
+
return [
|
|
325
|
+
`import { Component } from '@angular/core';`,
|
|
326
|
+
`import { AgGridModule } from 'ag-grid-angular';`,
|
|
327
|
+
`import { AdaptableAngularAgGridModule, AdaptableOptions, AdaptableReadyInfo } from '${input.adaptablePackage}';`,
|
|
328
|
+
`import { GridOptions } from 'ag-grid-enterprise';`,
|
|
329
|
+
'',
|
|
330
|
+
`import { adaptableOptions } from './adaptableOptions';`,
|
|
331
|
+
`import { gridOptions } from './gridOptions';`,
|
|
332
|
+
`import { agGridModules } from './agGridModules';`,
|
|
333
|
+
`import { onAdaptableReady } from './onAdaptableReady';`,
|
|
334
|
+
`import { ${input.rowType} } from './rowData';`,
|
|
335
|
+
'',
|
|
336
|
+
'@Component({',
|
|
337
|
+
` selector: 'app-root',`,
|
|
338
|
+
' standalone: true,',
|
|
339
|
+
' imports: [AgGridModule, AdaptableAngularAgGridModule],',
|
|
340
|
+
' // AdapTable styles are global: src/styles.css imports them (angular.json "styles")',
|
|
341
|
+
' template: `',
|
|
342
|
+
' <adaptable-provider',
|
|
343
|
+
' [adaptableOptions]="adaptableOptions"',
|
|
344
|
+
' [gridOptions]="gridOptions"',
|
|
345
|
+
' [modules]="modules"',
|
|
346
|
+
' (adaptableReady)="adaptableReady($event)"',
|
|
347
|
+
' style="height: 100vh; width: 100vw; display: flex; flex-flow: column;">',
|
|
348
|
+
' <adaptable-ui style="flex: none"></adaptable-ui>',
|
|
349
|
+
' <ag-grid-angular',
|
|
350
|
+
' *adaptable="let adaptable"',
|
|
351
|
+
' [gridOptions]="adaptable.gridOptions"',
|
|
352
|
+
' [modules]="adaptable.modules"',
|
|
353
|
+
' style="flex: 1">',
|
|
354
|
+
' </ag-grid-angular>',
|
|
355
|
+
' </adaptable-provider>',
|
|
356
|
+
' `,',
|
|
357
|
+
'})',
|
|
358
|
+
`export class ${target.className} {`,
|
|
359
|
+
` adaptableOptions: AdaptableOptions<${input.rowType}> = adaptableOptions;`,
|
|
360
|
+
` gridOptions: GridOptions<${input.rowType}> = gridOptions;`,
|
|
361
|
+
' modules = agGridModules;',
|
|
362
|
+
'',
|
|
363
|
+
' adaptableReady(event: AdaptableReadyInfo) {',
|
|
364
|
+
' onAdaptableReady(event);',
|
|
365
|
+
' }',
|
|
366
|
+
'}',
|
|
367
|
+
'',
|
|
368
|
+
].join('\n');
|
|
369
|
+
}
|
|
370
|
+
/** Angular loads styles globally through `src/styles.css` (angular.json "styles"); it imports AdapTable's stylesheet first */
|
|
371
|
+
export function angularStyles(template, adaptablePackage) {
|
|
372
|
+
return `/* Global styles: angular.json lists this file under "styles". AdapTable's stylesheet first, then the demo template's. */\n@import '${adaptablePackage}/index.css';\n\n${template}`;
|
|
373
|
+
}
|
|
374
|
+
/** Vite's creator stylesheets centre and pad `#root` / `#app`; the grid wants the viewport */
|
|
375
|
+
export function viteStyles(template) {
|
|
376
|
+
return `${template.trimEnd()}\n\n/* The creator's index.css / style.css centre and pad the root element; the grid needs the full viewport. */\n#root,\n#app {\n width: 100%;\n max-width: none;\n margin: 0;\n padding: 0;\n text-align: initial;\n}\n`;
|
|
377
|
+
}
|
|
378
|
+
/** Names the templates and generated files import that are types (the creators' tsconfigs set `verbatimModuleSyntax`) */
|
|
379
|
+
export const TYPE_IMPORTS = new Set(['AdaptableApi', 'AdaptableOptions', 'AdaptableReadyInfo', 'GridOptions', 'AgGridConfig', 'ColDef', 'ColGroupDef', 'Module']);
|
|
380
|
+
/**
|
|
381
|
+
* Marks type imports as type-only: `import { Adaptable, type AdaptableApi }`, or
|
|
382
|
+
* `import type { ColDef }` when every specifier is a type. Vite's `react-ts` / `vue-ts`
|
|
383
|
+
* tsconfigs enable `verbatimModuleSyntax`, under which a type imported as a value is a
|
|
384
|
+
* compile error; the form is valid everywhere else too.
|
|
385
|
+
*/
|
|
386
|
+
export function typeOnlyImports(code, extraTypes = []) {
|
|
387
|
+
const types = new Set([...TYPE_IMPORTS, ...extraTypes]);
|
|
388
|
+
return code.replace(/import\s*\{([^}]*)\}\s*from\s*(['"][^'"]+['"]);?/g, (whole, specs, from) => {
|
|
389
|
+
const parts = specs
|
|
390
|
+
.split(',')
|
|
391
|
+
.map((part) => part.trim())
|
|
392
|
+
.filter((part) => part.length > 0);
|
|
393
|
+
if (parts.length === 0) {
|
|
394
|
+
return whole;
|
|
395
|
+
}
|
|
396
|
+
const nameOf = (part) => part.replace(/^type\s+/, '').split(/\s+as\s+/)[0].trim();
|
|
397
|
+
const marked = parts.map((part) => (types.has(nameOf(part)) && !part.startsWith('type ') ? `type ${part}` : part));
|
|
398
|
+
if (marked.every((part, index) => part === parts[index])) {
|
|
399
|
+
return whole;
|
|
400
|
+
}
|
|
401
|
+
const allTypes = marked.every((part) => part.startsWith('type '));
|
|
402
|
+
const list = allTypes ? marked.map((part) => part.replace(/^type\s+/, '')) : marked;
|
|
403
|
+
const multiline = specs.includes('\n');
|
|
404
|
+
const spaced = /^\s/.test(specs) && !multiline;
|
|
405
|
+
const body = multiline ? `\n ${list.join(',\n ')},\n` : spaced ? ` ${list.join(', ')} ` : list.join(', ');
|
|
406
|
+
return `import ${allTypes ? 'type ' : ''}{${body}} from ${from};`;
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/core/scaffold/generate.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAO,GAAG,oBAAoB,CAAC;AAErC,0DAA0D;AAC1D,MAAM,UAAU,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;AACxF,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,IAAwB;IAClD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,GAAG,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,MAAoB;IACpC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5H,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,KAAK,GAAG;QACZ,8CAA8C;QAC9C,YAAY,KAAK,CAAC,OAAO,sBAAsB;QAC/C,EAAE;QACF,mCAAmC,KAAK,CAAC,OAAO,SAAS;KAC1D,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,qBAAqB,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7L,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,2BAA2B,EAAE,wBAAwB,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAsB;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;EAsBjB,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEpB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,wDAAwD,OAAO,IAAI,CAAC,CAAC;IAChF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEpB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;QACnG,KAAK,CAAC,IAAI,CAAC,yBAAyB,OAAO,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,0DAA0D,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,eAAe,sBAAsB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7K,KAAK,CAAC,IAAI,CAAC,iDAAiD,OAAO,OAAO,CAAC,CAAC;QAC5E,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,0DAA0D,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjG,KAAK,CAAC,IAAI,CAAC,yBAAyB,OAAO,sBAAsB,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;SACzD;QACD,MAAM,EAAE;YACN,aAAa,EAAE,gBAAgB;YAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;SACxF;KACF,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC;IAC5G,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC;IACxH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAoB;IAC3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO;QACL,+DAA+D;QAC/D,qDAAqD;QACrD,YAAY,KAAK,CAAC,OAAO,sBAAsB;QAC/C,EAAE;QACF,mDAAmD,KAAK,CAAC,OAAO,OAAO;QACvE,iBAAiB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;QACzC,kBAAkB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG;QAC3C,sCAAsC;QACtC,mBAAmB,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;QAC5C,IAAI;QACJ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,MAAM,KAAK,GAAG;QACZ,gEAAgE;QAChE,EAAE;QACF,qBAAqB,KAAK,CAAC,OAAO,sBAAsB;QACxD,4CAA4C;QAC5C,EAAE;QACF,yCAAyC,KAAK,CAAC,OAAO,OAAO;QAC7D,uBAAuB;QACvB,oBAAoB;QACpB,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,mBAAmB;QACnB,2BAA2B;QAC3B,MAAM;QACN,2BAA2B;KAC5B,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,+BAA+B,EAC/B,wGAAwG,EACxG,iGAAiG,EACjG,2BAA2B,EAC3B,4BAA4B,EAC5B,mDAAmD,EACnD,4DAA4D,EAC5D,yFAAyF,EACzF,QAAQ,EACR,MAAM,CACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,wDAAwD,EAAE,mCAAmC,CAAC,CAAC;IAC5G,CAAC;IACD,KAAK,CAAC,IAAI,CACR,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,mEAAmE,EACnE,uDAAuD,EACvD,sFAAsF,EACtF,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,EAAE,CACH,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,qGAAqG;QACrG,mDAAmD;QACnD,EAAE;QACF,4BAA4B;QAC5B,sDAAsD;QACtD,GAAG;QACH,EAAE;QACF,iFAAiF;QACjF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,iIAAiI;AACjI,MAAM,UAAU,gBAAgB,CAAC,SAA4B;IAC3D,MAAM,MAAM,GAAG;QACb,kGAAkG;QAClG,gGAAgG;QAChG,EAAE;KACH,CAAC;IACF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;YACL,GAAG,MAAM;YACT,kGAAkG;YAClG,6FAA6F;YAC7F,qEAAqE;YACrE,mEAAmE;YACnE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,GAAG,MAAM;QACT,6GAA6G;QAC7G,sGAAsG;QACtG,kGAAkG;QAClG,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAoB;IAC3D,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO;YACL,iEAAiE;YACjE,EAAE;YACF,6EAA6E;YAC7E,+CAA+C;YAC/C,yDAAyD;YACzD,IAAI;YACJ,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,iEAAiE;QACjE,uDAAuD;QACvD,EAAE;QACF,6EAA6E;QAC7E,kBAAkB;QAClB,8DAA8D;QAC9D,kCAAkC;QAClC,qEAAqE;QACrE,SAAS;QACT,IAAI;QACJ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,0HAA0H;AAC1H,MAAM,mBAAmB,GAAG,wMAAwM,CAAC;AAQrO,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACpF,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,OAAe;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,sCAAsC,EAAE,wBAAwB,CAAC;KAClG,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG;QACd,8FAA8F;QAC9F,yDAAyD;QACzD,8EAA8E;QAC9E,8EAA8E;QAC9E,oFAAoF;QACpF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,gDAAgD;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;AACzH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,MAAM,CAAC,QAAgB,EAAE,OAAe,EAAE,gBAAwB;IAChF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,gBAAgB,wCAAwC,CAAC;IACpF,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,6BAA6B,OAAO,cAAc,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IACpG,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;AACzG,CAAC;AAQD,wHAAwH;AACxH,MAAM,UAAU,gBAAgB,CAAC,KAAoB,EAAE,MAAqB;IAC1E,OAAO;QACL,4CAA4C;QAC5C,iDAAiD;QACjD,uFAAuF,KAAK,CAAC,gBAAgB,IAAI;QACjH,mDAAmD;QACnD,EAAE;QACF,wDAAwD;QACxD,8CAA8C;QAC9C,kDAAkD;QAClD,wDAAwD;QACxD,YAAY,KAAK,CAAC,OAAO,sBAAsB;QAC/C,EAAE;QACF,cAAc;QACd,yBAAyB;QACzB,qBAAqB;QACrB,0DAA0D;QAC1D,uFAAuF;QACvF,eAAe;QACf,yBAAyB;QACzB,6CAA6C;QAC7C,mCAAmC;QACnC,2BAA2B;QAC3B,iDAAiD;QACjD,+EAA+E;QAC/E,wDAAwD;QACxD,wBAAwB;QACxB,oCAAoC;QACpC,+CAA+C;QAC/C,uCAAuC;QACvC,0BAA0B;QAC1B,0BAA0B;QAC1B,2BAA2B;QAC3B,MAAM;QACN,IAAI;QACJ,gBAAgB,MAAM,CAAC,SAAS,IAAI;QACpC,wCAAwC,KAAK,CAAC,OAAO,uBAAuB;QAC5E,8BAA8B,KAAK,CAAC,OAAO,kBAAkB;QAC7D,4BAA4B;QAC5B,EAAE;QACF,+CAA+C;QAC/C,8BAA8B;QAC9B,KAAK;QACL,GAAG;QACH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,8HAA8H;AAC9H,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,gBAAwB;IACtE,OAAO,uIAAuI,gBAAgB,mBAAmB,QAAQ,EAAE,CAAC;AAC9L,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,gOAAgO,CAAC;AAC/P,CAAC;AAED,yHAAyH;AACzH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElK;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,aAAgC,EAAE;IAC9E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,OAAO,CAAC,mDAAmD,EAAE,CAAC,KAAK,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE;QAC9G,MAAM,KAAK,GAAG,KAAK;aAChB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1F,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnH,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5G,OAAO,UAAU,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,UAAU,IAAI,GAAG,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC"}
|