@fieldia/core 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/package.json +1 -1
  2. package/schema/page.schema.json +55 -5
  3. package/src/index.d.mts +5 -14
  4. package/src/index.d.ts +5 -14
  5. package/src/index.js +4 -29
  6. package/src/index.js.map +1 -1
  7. package/src/index.mjs +4 -11
  8. package/src/index.mjs.map +1 -1
  9. package/src/lib/format/check-page.d.mts +9 -0
  10. package/src/lib/format/check-page.d.ts +9 -0
  11. package/src/lib/format/check-page.js +54 -0
  12. package/src/lib/format/check-page.js.map +1 -0
  13. package/src/lib/format/check-page.mjs +51 -0
  14. package/src/lib/format/check-page.mjs.map +1 -0
  15. package/src/lib/format/columns.d.mts +3 -0
  16. package/src/lib/format/columns.d.ts +3 -0
  17. package/src/lib/format/columns.js +8 -0
  18. package/src/lib/format/columns.js.map +1 -0
  19. package/src/lib/format/columns.mjs +5 -0
  20. package/src/lib/format/columns.mjs.map +1 -0
  21. package/src/lib/format/field.d.mts +163 -35
  22. package/src/lib/format/field.d.ts +163 -35
  23. package/src/lib/format/field.js +36 -38
  24. package/src/lib/format/field.js.map +1 -1
  25. package/src/lib/format/field.mjs +25 -29
  26. package/src/lib/format/field.mjs.map +1 -1
  27. package/src/lib/format/layout.d.mts +1 -2
  28. package/src/lib/format/layout.d.ts +1 -2
  29. package/src/lib/format/layout.js +3 -6
  30. package/src/lib/format/layout.js.map +1 -1
  31. package/src/lib/format/layout.mjs +1 -4
  32. package/src/lib/format/layout.mjs.map +1 -1
  33. package/src/lib/format/names.d.mts +5 -0
  34. package/src/lib/format/names.d.ts +5 -0
  35. package/src/lib/format/names.js +27 -0
  36. package/src/lib/format/names.js.map +1 -0
  37. package/src/lib/format/names.mjs +24 -0
  38. package/src/lib/format/names.mjs.map +1 -0
  39. package/src/lib/format/page.d.mts +46 -10
  40. package/src/lib/format/page.d.ts +46 -10
  41. package/src/lib/format/page.js +4 -3
  42. package/src/lib/format/page.js.map +1 -1
  43. package/src/lib/format/page.mjs +2 -2
  44. package/src/lib/format/page.mjs.map +1 -1
  45. package/src/lib/format/references.d.mts +35 -0
  46. package/src/lib/format/references.d.ts +35 -0
  47. package/src/lib/format/references.js +278 -0
  48. package/src/lib/format/references.js.map +1 -0
  49. package/src/lib/format/references.mjs +274 -0
  50. package/src/lib/format/references.mjs.map +1 -0
  51. package/src/lib/format/translate.d.mts +8 -0
  52. package/src/lib/format/translate.d.ts +8 -0
  53. package/src/lib/format/translate.js +36 -0
  54. package/src/lib/format/translate.js.map +1 -0
  55. package/src/lib/format/translate.mjs +33 -0
  56. package/src/lib/format/translate.mjs.map +1 -0
  57. package/src/lib/format/validate.d.mts +2 -13
  58. package/src/lib/format/validate.d.ts +2 -13
  59. package/src/lib/format/validate.js +2 -265
  60. package/src/lib/format/validate.js.map +1 -1
  61. package/src/lib/format/validate.mjs +1 -264
  62. package/src/lib/format/validate.mjs.map +1 -1
  63. package/src/lib/format/version.d.mts +2 -0
  64. package/src/lib/format/version.d.ts +2 -0
  65. package/src/lib/format/version.js +6 -0
  66. package/src/lib/format/version.js.map +1 -0
  67. package/src/lib/format/version.mjs +3 -0
  68. package/src/lib/format/version.mjs.map +1 -0
  69. package/src/lib/record/data-source.d.mts +27 -1
  70. package/src/lib/record/data-source.d.ts +27 -1
  71. package/src/lib/record/data-source.js +16 -0
  72. package/src/lib/record/data-source.js.map +1 -1
  73. package/src/lib/record/data-source.mjs +14 -1
  74. package/src/lib/record/data-source.mjs.map +1 -1
  75. package/src/lib/record/filter.d.mts +8 -0
  76. package/src/lib/record/filter.d.ts +8 -0
  77. package/src/lib/record/filter.js +66 -0
  78. package/src/lib/record/filter.js.map +1 -0
  79. package/src/lib/record/filter.mjs +63 -0
  80. package/src/lib/record/filter.mjs.map +1 -0
  81. package/src/lib/record/form.d.mts +5 -1
  82. package/src/lib/record/form.d.ts +5 -1
  83. package/src/lib/record/form.js +33 -10
  84. package/src/lib/record/form.js.map +1 -1
  85. package/src/lib/record/form.mjs +33 -10
  86. package/src/lib/record/form.mjs.map +1 -1
  87. package/src/lib/record/memory-data-source.js +2 -28
  88. package/src/lib/record/memory-data-source.js.map +1 -1
  89. package/src/lib/record/memory-data-source.mjs +2 -28
  90. package/src/lib/record/memory-data-source.mjs.map +1 -1
  91. package/src/runtime.d.mts +26 -0
  92. package/src/runtime.d.ts +26 -0
  93. package/src/runtime.js +44 -0
  94. package/src/runtime.js.map +1 -0
  95. package/src/runtime.mjs +16 -0
  96. package/src/runtime.mjs.map +1 -0
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validatePage = validatePage;
4
4
  const page_1 = require("./page");
5
- const modifier_1 = require("../expression/modifier");
5
+ const references_1 = require("./references");
6
6
  /**
7
7
  * Check a page in two passes: its shape against the format, then every
8
8
  * reference inside it — ids unique, every field a layout, title, statusbar,
@@ -18,7 +18,7 @@ function validatePage(input) {
18
18
  return { ok: false, issues: parsed.error.issues.map((issue) => ({ path: formatPath(issue.path), message: describe(issue) })) };
19
19
  }
20
20
  const page = parsed.data;
21
- const issues = new ReferenceCheck(page).run();
21
+ const issues = new references_1.ReferenceCheck(page).run();
22
22
  return issues.length ? { ok: false, issues } : { ok: true, page };
23
23
  }
24
24
  function formatPath(path) {
@@ -34,267 +34,4 @@ function describe(issue) {
34
34
  }
35
35
  return issue.message;
36
36
  }
37
- const has = (record, key) => Object.prototype.hasOwnProperty.call(record, key);
38
- class ReferenceCheck {
39
- page;
40
- issues = [];
41
- ids = new Map();
42
- constructor(page) {
43
- this.page = page;
44
- }
45
- run() {
46
- this.checkFields(this.page.fields, 'fields');
47
- this.walkRoot(this.page.layout, 'layout');
48
- return this.issues;
49
- }
50
- report(path, message) {
51
- this.issues.push({ path, message });
52
- }
53
- claim(id, path) {
54
- const first = this.ids.get(id);
55
- if (first !== undefined)
56
- this.report(path, `duplicate id "${id}", also used at ${first}`);
57
- else
58
- this.ids.set(id, path);
59
- }
60
- /** The field a reference names, or a reported issue and undefined. */
61
- need(name, path, scope = this.page.fields) {
62
- if (has(scope, name))
63
- return scope[name];
64
- this.report(path, `no field "${name}"`);
65
- return undefined;
66
- }
67
- /** Every modifier on `owner` must read, and read only fields of this page. */
68
- checkModifiers(owner, path, keys = ['invisible']) {
69
- for (const key of keys) {
70
- const value = owner[key];
71
- if (typeof value !== 'string')
72
- continue;
73
- let fields;
74
- try {
75
- fields = (0, modifier_1.compileModifier)(value).fields;
76
- }
77
- catch (error) {
78
- this.report(`${path}.${key}`, `cannot read "${value}": ${error.message}`);
79
- continue;
80
- }
81
- for (const name of fields) {
82
- if (!has(this.page.fields, name)) {
83
- this.report(`${path}.${key}`, `"${value}" reads "${name}", which is not a field of this page`);
84
- }
85
- }
86
- }
87
- }
88
- checkFields(fields, base) {
89
- for (const [name, def] of Object.entries(fields)) {
90
- const path = `${base}.${name}`;
91
- if (def.type === 'monetary' && def.currencyField !== undefined) {
92
- const currency = this.need(def.currencyField, `${path}.currencyField`, fields);
93
- if (currency && !['many2one', 'selection', 'char'].includes(currency.type)) {
94
- this.report(`${path}.currencyField`, `"${def.currencyField}" is a ${currency.type}; a currency field must be a many2one, selection or char`);
95
- }
96
- }
97
- if ((def.type === 'many2one' || def.type === 'many2many') && def.filter) {
98
- def.filter.forEach((condition, i) => {
99
- if (condition.valueFrom !== undefined)
100
- this.need(condition.valueFrom, `${path}.filter[${i}].valueFrom`, fields);
101
- });
102
- }
103
- if (def.type === 'properties' && def.definitions) {
104
- const seen = new Set();
105
- def.definitions.forEach((property, i) => {
106
- if (property.type === 'selection' && !property.options) {
107
- this.report(`${path}.definitions[${i}].options`, 'a choice property needs its choices');
108
- }
109
- if (seen.has(property.name))
110
- this.report(`${path}.definitions[${i}].name`, `"${property.name}" is named twice`);
111
- seen.add(property.name);
112
- });
113
- }
114
- if (def.type === 'one2many') {
115
- this.checkFields(def.fields, `${path}.fields`);
116
- if (def.lineKinds)
117
- this.checkLineKinds(name, def.lineKinds, def.fields, `${path}.lineKinds`);
118
- if (def.sequenceField !== undefined) {
119
- const sequence = def.fields[def.sequenceField];
120
- if (!sequence)
121
- this.report(`${path}.sequenceField`, `"${def.sequenceField}" is not a field of the lines of "${name}"`);
122
- else if (sequence.type !== 'integer') {
123
- this.report(`${path}.sequenceField`, `"${def.sequenceField}" is a ${sequence.type}; the field that keeps the order of lines must be an integer`);
124
- }
125
- }
126
- }
127
- }
128
- }
129
- checkLineKinds(field, kinds, lineFields, path) {
130
- const kindField = lineFields[kinds.field];
131
- if (!kindField)
132
- this.report(`${path}.field`, `"${kinds.field}" is not a field of the lines of "${field}"`);
133
- else if (kindField.type !== 'selection' && kindField.type !== 'char') {
134
- this.report(`${path}.field`, `"${kinds.field}" is a ${kindField.type}; the field that says what a line is must be a selection or char`);
135
- }
136
- else if (kindField.type === 'selection') {
137
- for (const which of ['section', 'note']) {
138
- const value = kinds[which] ?? which;
139
- if (!kindField.options.some((o) => o.value === value))
140
- this.report(`${path}.${which}`, `"${kinds.field}" has no option "${value}"`);
141
- }
142
- }
143
- const text = lineFields[kinds.text];
144
- if (!text)
145
- this.report(`${path}.text`, `"${kinds.text}" is not a field of the lines of "${field}"`);
146
- else if (text.type !== 'char' && text.type !== 'text') {
147
- this.report(`${path}.text`, `"${kinds.text}" is a ${text.type}; a section's or note's text must be a char or text field`);
148
- }
149
- }
150
- walkRoot(root, path) {
151
- if (root.type === 'tabs')
152
- return this.walkNode(root, path);
153
- this.claim(root.id, path);
154
- if (root.type === 'sheet')
155
- return this.walkSheet(root, path);
156
- if (root.type === 'sections')
157
- return this.walkChildren(root.children, path);
158
- root.children.forEach((step, i) => {
159
- const stepPath = `${path}.children[${i}]`;
160
- this.claim(step.id, stepPath);
161
- this.checkModifiers(step, stepPath);
162
- this.walkChildren(step.children, stepPath);
163
- });
164
- }
165
- walkChildren(children, path) {
166
- children.forEach((child, i) => this.walkNode(child, `${path}.children[${i}]`));
167
- }
168
- walkNode(node, path) {
169
- this.claim(node.id, path);
170
- this.checkModifiers(node, path, node.type === 'field' ? ['invisible', 'readonly', 'required'] : node.type === 'section' ? ['invisible', 'readonly'] : ['invisible']);
171
- switch (node.type) {
172
- case 'field':
173
- return this.checkFieldNode(node, path);
174
- case 'section':
175
- if (node.collapsible && !node.title)
176
- this.report(path, 'a collapsible section needs a title to fold it by');
177
- if (node.collapsed && !node.collapsible)
178
- this.report(path, 'collapsed needs collapsible: true');
179
- return this.walkChildren(node.children, path);
180
- case 'tabs':
181
- return this.walkTabs(node, path);
182
- default:
183
- return;
184
- }
185
- }
186
- walkTabs(node, path) {
187
- node.children.forEach((tab, i) => {
188
- const tabPath = `${path}.children[${i}]`;
189
- this.claim(tab.id, tabPath);
190
- this.checkModifiers(tab, tabPath);
191
- this.walkChildren(tab.children, tabPath);
192
- });
193
- }
194
- walkSheet(sheet, path) {
195
- if (sheet.title) {
196
- this.need(sheet.title.field, `${path}.title.field`);
197
- if (sheet.title.subtitleField !== undefined)
198
- this.need(sheet.title.subtitleField, `${path}.title.subtitleField`);
199
- if (sheet.title.avatarField !== undefined)
200
- this.need(sheet.title.avatarField, `${path}.title.avatarField`);
201
- }
202
- if (sheet.statusbar) {
203
- const { field, visibleStates } = sheet.statusbar;
204
- const def = this.need(field, `${path}.statusbar.field`);
205
- if (def && def.type !== 'selection' && def.type !== 'many2one') {
206
- this.report(`${path}.statusbar.field`, `"${field}" is a ${def.type}; a statusbar needs a selection or many2one`);
207
- }
208
- if (def?.type === 'selection' && visibleStates) {
209
- const values = new Set(def.options.map((o) => o.value));
210
- visibleStates.forEach((state, i) => {
211
- if (!values.has(state)) {
212
- this.report(`${path}.statusbar.visibleStates[${i}]`, `"${state}" is not an option of "${field}"`);
213
- }
214
- });
215
- }
216
- }
217
- sheet.buttons?.forEach((button, i) => {
218
- this.claim(button.id, `${path}.buttons[${i}]`);
219
- this.checkModifiers(button, `${path}.buttons[${i}]`);
220
- });
221
- sheet.statButtons?.forEach((stat, i) => {
222
- this.claim(stat.id, `${path}.statButtons[${i}]`);
223
- this.checkModifiers(stat, `${path}.statButtons[${i}]`);
224
- if (stat.field !== undefined)
225
- this.need(stat.field, `${path}.statButtons[${i}].field`);
226
- });
227
- if (sheet.ribbon) {
228
- this.claim(sheet.ribbon.id, `${path}.ribbon`);
229
- this.checkModifiers(sheet.ribbon, `${path}.ribbon`);
230
- }
231
- sheet.badges?.forEach((badge, i) => {
232
- this.claim(badge.id, `${path}.badges[${i}]`);
233
- this.checkModifiers(badge, `${path}.badges[${i}]`);
234
- });
235
- for (const place of ['above', 'below']) {
236
- sheet.title?.[place]?.forEach((node, i) => this.walkNode(node, `${path}.title.${place}[${i}]`));
237
- }
238
- sheet.alerts?.forEach((alert, i) => {
239
- this.claim(alert.id, `${path}.alerts[${i}]`);
240
- this.checkModifiers(alert, `${path}.alerts[${i}]`);
241
- });
242
- this.walkChildren(sheet.children, path);
243
- if (sheet.sidePanel) {
244
- this.claim(sheet.sidePanel.id, `${path}.sidePanel`);
245
- this.checkModifiers(sheet.sidePanel, `${path}.sidePanel`);
246
- }
247
- }
248
- checkFieldNode(node, path) {
249
- const def = this.need(node.field, `${path}.field`);
250
- if (def && node.totals) {
251
- if (def.type !== 'one2many') {
252
- this.report(`${path}.totals`, `totals only apply to one2many fields; "${node.field}" is a ${def.type}`);
253
- }
254
- else {
255
- node.totals.forEach((column, i) => {
256
- const sub = has(def.fields, column) ? def.fields[column] : undefined;
257
- if (!sub)
258
- this.report(`${path}.totals[${i}]`, `"${column}" is not a field of the lines of "${node.field}"`);
259
- else if (!['integer', 'float', 'monetary'].includes(sub.type)) {
260
- this.report(`${path}.totals[${i}]`, `"${column}" is a ${sub.type}; only integer, float and monetary columns add up`);
261
- }
262
- });
263
- }
264
- }
265
- // Options that point at another field: by convention their names end in "Field".
266
- for (const [key, value] of Object.entries(node.options ?? {})) {
267
- if (key.endsWith('Field') && typeof value === 'string')
268
- this.need(value, `${path}.options.${key}`);
269
- }
270
- if (def && node.editMode && def.type !== 'one2many') {
271
- this.report(`${path}.editMode`, `editMode only applies to one2many fields; "${node.field}" is a ${def.type}`);
272
- }
273
- if (def && node.optionalColumns) {
274
- if (def.type !== 'one2many') {
275
- this.report(`${path}.optionalColumns`, `optional columns only apply to one2many fields; "${node.field}" is a ${def.type}`);
276
- }
277
- else {
278
- // The columns the table shows: those named, or every line field but the structural ones.
279
- const shown = node.columns ?? Object.keys(def.fields).filter((c) => c !== def.lineKinds?.field && c !== def.sequenceField);
280
- for (const column of Object.keys(node.optionalColumns)) {
281
- if (!shown.includes(column))
282
- this.report(`${path}.optionalColumns.${column}`, `"${column}" is not a column of "${node.field}"`);
283
- }
284
- }
285
- }
286
- if (!def || !node.columns)
287
- return;
288
- if (def.type === 'one2many') {
289
- node.columns.forEach((column, i) => {
290
- if (!has(def.fields, column)) {
291
- this.report(`${path}.columns[${i}]`, `"${column}" is not a field of the lines of "${node.field}"`);
292
- }
293
- });
294
- }
295
- else if (def.type !== 'many2many') {
296
- this.report(`${path}.columns`, `columns only apply to one2many and many2many fields; "${node.field}" is a ${def.type}`);
297
- }
298
- }
299
- }
300
37
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/validate.ts"],"names":[],"mappings":";;AAuBA,oCAQC;AA5BD,iCAA+C;AAC/C,qDAAyD;AAUzD;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,iBAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACjI,CAAC;IACD,MAAM,IAAI,GAAS,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,eAAe,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtF,OAAO,IAAI,KAAK,CAAC,aAAa,wCAAwC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/F,MAAM,cAAc;IAIW;IAHZ,MAAM,GAAgB,EAAE,CAAC;IACzB,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,GAAG;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,IAAY,EAAE,OAAe;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,EAAU,EAAE,IAAY;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,KAAK,EAAE,CAAC,CAAC;;YACrF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,sEAAsE;IAC9D,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,QAA2C,IAAI,CAAC,IAAI,CAAC,MAAM;QAClG,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8EAA8E;IACtE,cAAc,CAAC,KAAa,EAAE,IAAY,EAAE,OAA0B,CAAC,WAAW,CAAC;QACzF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACxC,IAAI,MAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAA,0BAAe,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,gBAAgB,KAAK,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrF,SAAS;YACX,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,KAAK,YAAY,IAAI,sCAAsC,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAA0C,EAAE,IAAY;QAC1E,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAC/E,IAAI,QAAQ,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,IAAI,CAAC,MAAM,CACT,GAAG,IAAI,gBAAgB,EACvB,IAAI,GAAG,CAAC,aAAa,UAAU,QAAQ,CAAC,IAAI,0DAA0D,CACvG,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;oBAClC,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS;wBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;gBAClH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/B,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACvD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;oBAC1F,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC;oBAChH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,SAAS;oBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;gBAC7F,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAI,CAAC,QAAQ;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE,IAAI,GAAG,CAAC,aAAa,qCAAqC,IAAI,GAAG,CAAC,CAAC;yBAClH,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACrC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE,IAAI,GAAG,CAAC,aAAa,UAAU,QAAQ,CAAC,IAAI,8DAA8D,CAAC,CAAC;oBACnJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,KAAgB,EAAE,UAAqC,EAAE,IAAY;QACzG,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,qCAAqC,KAAK,GAAG,CAAC,CAAC;aACtG,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,UAAU,SAAS,CAAC,IAAI,kEAAkE,CAAC,CAAC;QAC1I,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,CAAU,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,IAAI,KAAK,CAAC,KAAK,oBAAoB,KAAK,GAAG,CAAC,CAAC;YACtI,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,qCAAqC,KAAK,GAAG,CAAC,CAAC;aAC/F,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAgB,EAAE,IAAY;QAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,QAAsB,EAAE,IAAY;QACvD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC;IAEO,QAAQ,CAAC,IAAgB,EAAE,IAAY;QAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACrK,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mDAAmD,CAAC,CAAC;gBAC5G,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;gBAChG,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAc,EAAE,IAAY;QAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,KAAgB,EAAE,IAAY;QAC9C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACjH,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,oBAAoB,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,kBAAkB,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,kBAAkB,EAAE,IAAI,KAAK,UAAU,GAAG,CAAC,IAAI,6CAA6C,CAAC,CAAC;YACnH,CAAC;YACD,IAAI,GAAG,EAAE,IAAI,KAAK,WAAW,IAAI,aAAa,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,4BAA4B,CAAC,GAAG,EAAE,IAAI,KAAK,0BAA0B,KAAK,GAAG,CAAC,CAAC;oBACpG,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;YAChD,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAe,EAAE,IAAY;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;QACnD,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,0CAA0C,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACrE,IAAI,CAAC,GAAG;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,MAAM,qCAAqC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;yBACvG,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,MAAM,UAAU,GAAG,CAAC,IAAI,mDAAmD,CAAC,CAAC;oBACvH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,iFAAiF;QACjF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,8CAA8C,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,kBAAkB,EAAE,oDAAoD,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7H,CAAC;iBAAM,CAAC;gBACN,yFAAyF;gBACzF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC3H,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,oBAAoB,MAAM,EAAE,EAAE,IAAI,MAAM,yBAAyB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBAClI,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,MAAM,qCAAqC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,yDAAyD,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/validate.ts"],"names":[],"mappings":";;AAeA,oCAQC;AAtBD,iCAA+C;AAC/C,6CAAmE;AAInE;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,iBAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACjI,CAAC;IACD,MAAM,IAAI,GAAS,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,2BAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,eAAe,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtF,OAAO,IAAI,KAAK,CAAC,aAAa,wCAAwC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { PageSchema } from './page.mjs';
2
- import { compileModifier } from '../expression/modifier.mjs';
2
+ import { ReferenceCheck } from './references.mjs';
3
3
  /**
4
4
  * Check a page in two passes: its shape against the format, then every
5
5
  * reference inside it — ids unique, every field a layout, title, statusbar,
@@ -31,267 +31,4 @@ function describe(issue) {
31
31
  }
32
32
  return issue.message;
33
33
  }
34
- const has = (record, key) => Object.prototype.hasOwnProperty.call(record, key);
35
- class ReferenceCheck {
36
- page;
37
- issues = [];
38
- ids = new Map();
39
- constructor(page) {
40
- this.page = page;
41
- }
42
- run() {
43
- this.checkFields(this.page.fields, 'fields');
44
- this.walkRoot(this.page.layout, 'layout');
45
- return this.issues;
46
- }
47
- report(path, message) {
48
- this.issues.push({ path, message });
49
- }
50
- claim(id, path) {
51
- const first = this.ids.get(id);
52
- if (first !== undefined)
53
- this.report(path, `duplicate id "${id}", also used at ${first}`);
54
- else
55
- this.ids.set(id, path);
56
- }
57
- /** The field a reference names, or a reported issue and undefined. */
58
- need(name, path, scope = this.page.fields) {
59
- if (has(scope, name))
60
- return scope[name];
61
- this.report(path, `no field "${name}"`);
62
- return undefined;
63
- }
64
- /** Every modifier on `owner` must read, and read only fields of this page. */
65
- checkModifiers(owner, path, keys = ['invisible']) {
66
- for (const key of keys) {
67
- const value = owner[key];
68
- if (typeof value !== 'string')
69
- continue;
70
- let fields;
71
- try {
72
- fields = compileModifier(value).fields;
73
- }
74
- catch (error) {
75
- this.report(`${path}.${key}`, `cannot read "${value}": ${error.message}`);
76
- continue;
77
- }
78
- for (const name of fields) {
79
- if (!has(this.page.fields, name)) {
80
- this.report(`${path}.${key}`, `"${value}" reads "${name}", which is not a field of this page`);
81
- }
82
- }
83
- }
84
- }
85
- checkFields(fields, base) {
86
- for (const [name, def] of Object.entries(fields)) {
87
- const path = `${base}.${name}`;
88
- if (def.type === 'monetary' && def.currencyField !== undefined) {
89
- const currency = this.need(def.currencyField, `${path}.currencyField`, fields);
90
- if (currency && !['many2one', 'selection', 'char'].includes(currency.type)) {
91
- this.report(`${path}.currencyField`, `"${def.currencyField}" is a ${currency.type}; a currency field must be a many2one, selection or char`);
92
- }
93
- }
94
- if ((def.type === 'many2one' || def.type === 'many2many') && def.filter) {
95
- def.filter.forEach((condition, i) => {
96
- if (condition.valueFrom !== undefined)
97
- this.need(condition.valueFrom, `${path}.filter[${i}].valueFrom`, fields);
98
- });
99
- }
100
- if (def.type === 'properties' && def.definitions) {
101
- const seen = new Set();
102
- def.definitions.forEach((property, i) => {
103
- if (property.type === 'selection' && !property.options) {
104
- this.report(`${path}.definitions[${i}].options`, 'a choice property needs its choices');
105
- }
106
- if (seen.has(property.name))
107
- this.report(`${path}.definitions[${i}].name`, `"${property.name}" is named twice`);
108
- seen.add(property.name);
109
- });
110
- }
111
- if (def.type === 'one2many') {
112
- this.checkFields(def.fields, `${path}.fields`);
113
- if (def.lineKinds)
114
- this.checkLineKinds(name, def.lineKinds, def.fields, `${path}.lineKinds`);
115
- if (def.sequenceField !== undefined) {
116
- const sequence = def.fields[def.sequenceField];
117
- if (!sequence)
118
- this.report(`${path}.sequenceField`, `"${def.sequenceField}" is not a field of the lines of "${name}"`);
119
- else if (sequence.type !== 'integer') {
120
- this.report(`${path}.sequenceField`, `"${def.sequenceField}" is a ${sequence.type}; the field that keeps the order of lines must be an integer`);
121
- }
122
- }
123
- }
124
- }
125
- }
126
- checkLineKinds(field, kinds, lineFields, path) {
127
- const kindField = lineFields[kinds.field];
128
- if (!kindField)
129
- this.report(`${path}.field`, `"${kinds.field}" is not a field of the lines of "${field}"`);
130
- else if (kindField.type !== 'selection' && kindField.type !== 'char') {
131
- this.report(`${path}.field`, `"${kinds.field}" is a ${kindField.type}; the field that says what a line is must be a selection or char`);
132
- }
133
- else if (kindField.type === 'selection') {
134
- for (const which of ['section', 'note']) {
135
- const value = kinds[which] ?? which;
136
- if (!kindField.options.some((o) => o.value === value))
137
- this.report(`${path}.${which}`, `"${kinds.field}" has no option "${value}"`);
138
- }
139
- }
140
- const text = lineFields[kinds.text];
141
- if (!text)
142
- this.report(`${path}.text`, `"${kinds.text}" is not a field of the lines of "${field}"`);
143
- else if (text.type !== 'char' && text.type !== 'text') {
144
- this.report(`${path}.text`, `"${kinds.text}" is a ${text.type}; a section's or note's text must be a char or text field`);
145
- }
146
- }
147
- walkRoot(root, path) {
148
- if (root.type === 'tabs')
149
- return this.walkNode(root, path);
150
- this.claim(root.id, path);
151
- if (root.type === 'sheet')
152
- return this.walkSheet(root, path);
153
- if (root.type === 'sections')
154
- return this.walkChildren(root.children, path);
155
- root.children.forEach((step, i) => {
156
- const stepPath = `${path}.children[${i}]`;
157
- this.claim(step.id, stepPath);
158
- this.checkModifiers(step, stepPath);
159
- this.walkChildren(step.children, stepPath);
160
- });
161
- }
162
- walkChildren(children, path) {
163
- children.forEach((child, i) => this.walkNode(child, `${path}.children[${i}]`));
164
- }
165
- walkNode(node, path) {
166
- this.claim(node.id, path);
167
- this.checkModifiers(node, path, node.type === 'field' ? ['invisible', 'readonly', 'required'] : node.type === 'section' ? ['invisible', 'readonly'] : ['invisible']);
168
- switch (node.type) {
169
- case 'field':
170
- return this.checkFieldNode(node, path);
171
- case 'section':
172
- if (node.collapsible && !node.title)
173
- this.report(path, 'a collapsible section needs a title to fold it by');
174
- if (node.collapsed && !node.collapsible)
175
- this.report(path, 'collapsed needs collapsible: true');
176
- return this.walkChildren(node.children, path);
177
- case 'tabs':
178
- return this.walkTabs(node, path);
179
- default:
180
- return;
181
- }
182
- }
183
- walkTabs(node, path) {
184
- node.children.forEach((tab, i) => {
185
- const tabPath = `${path}.children[${i}]`;
186
- this.claim(tab.id, tabPath);
187
- this.checkModifiers(tab, tabPath);
188
- this.walkChildren(tab.children, tabPath);
189
- });
190
- }
191
- walkSheet(sheet, path) {
192
- if (sheet.title) {
193
- this.need(sheet.title.field, `${path}.title.field`);
194
- if (sheet.title.subtitleField !== undefined)
195
- this.need(sheet.title.subtitleField, `${path}.title.subtitleField`);
196
- if (sheet.title.avatarField !== undefined)
197
- this.need(sheet.title.avatarField, `${path}.title.avatarField`);
198
- }
199
- if (sheet.statusbar) {
200
- const { field, visibleStates } = sheet.statusbar;
201
- const def = this.need(field, `${path}.statusbar.field`);
202
- if (def && def.type !== 'selection' && def.type !== 'many2one') {
203
- this.report(`${path}.statusbar.field`, `"${field}" is a ${def.type}; a statusbar needs a selection or many2one`);
204
- }
205
- if (def?.type === 'selection' && visibleStates) {
206
- const values = new Set(def.options.map((o) => o.value));
207
- visibleStates.forEach((state, i) => {
208
- if (!values.has(state)) {
209
- this.report(`${path}.statusbar.visibleStates[${i}]`, `"${state}" is not an option of "${field}"`);
210
- }
211
- });
212
- }
213
- }
214
- sheet.buttons?.forEach((button, i) => {
215
- this.claim(button.id, `${path}.buttons[${i}]`);
216
- this.checkModifiers(button, `${path}.buttons[${i}]`);
217
- });
218
- sheet.statButtons?.forEach((stat, i) => {
219
- this.claim(stat.id, `${path}.statButtons[${i}]`);
220
- this.checkModifiers(stat, `${path}.statButtons[${i}]`);
221
- if (stat.field !== undefined)
222
- this.need(stat.field, `${path}.statButtons[${i}].field`);
223
- });
224
- if (sheet.ribbon) {
225
- this.claim(sheet.ribbon.id, `${path}.ribbon`);
226
- this.checkModifiers(sheet.ribbon, `${path}.ribbon`);
227
- }
228
- sheet.badges?.forEach((badge, i) => {
229
- this.claim(badge.id, `${path}.badges[${i}]`);
230
- this.checkModifiers(badge, `${path}.badges[${i}]`);
231
- });
232
- for (const place of ['above', 'below']) {
233
- sheet.title?.[place]?.forEach((node, i) => this.walkNode(node, `${path}.title.${place}[${i}]`));
234
- }
235
- sheet.alerts?.forEach((alert, i) => {
236
- this.claim(alert.id, `${path}.alerts[${i}]`);
237
- this.checkModifiers(alert, `${path}.alerts[${i}]`);
238
- });
239
- this.walkChildren(sheet.children, path);
240
- if (sheet.sidePanel) {
241
- this.claim(sheet.sidePanel.id, `${path}.sidePanel`);
242
- this.checkModifiers(sheet.sidePanel, `${path}.sidePanel`);
243
- }
244
- }
245
- checkFieldNode(node, path) {
246
- const def = this.need(node.field, `${path}.field`);
247
- if (def && node.totals) {
248
- if (def.type !== 'one2many') {
249
- this.report(`${path}.totals`, `totals only apply to one2many fields; "${node.field}" is a ${def.type}`);
250
- }
251
- else {
252
- node.totals.forEach((column, i) => {
253
- const sub = has(def.fields, column) ? def.fields[column] : undefined;
254
- if (!sub)
255
- this.report(`${path}.totals[${i}]`, `"${column}" is not a field of the lines of "${node.field}"`);
256
- else if (!['integer', 'float', 'monetary'].includes(sub.type)) {
257
- this.report(`${path}.totals[${i}]`, `"${column}" is a ${sub.type}; only integer, float and monetary columns add up`);
258
- }
259
- });
260
- }
261
- }
262
- // Options that point at another field: by convention their names end in "Field".
263
- for (const [key, value] of Object.entries(node.options ?? {})) {
264
- if (key.endsWith('Field') && typeof value === 'string')
265
- this.need(value, `${path}.options.${key}`);
266
- }
267
- if (def && node.editMode && def.type !== 'one2many') {
268
- this.report(`${path}.editMode`, `editMode only applies to one2many fields; "${node.field}" is a ${def.type}`);
269
- }
270
- if (def && node.optionalColumns) {
271
- if (def.type !== 'one2many') {
272
- this.report(`${path}.optionalColumns`, `optional columns only apply to one2many fields; "${node.field}" is a ${def.type}`);
273
- }
274
- else {
275
- // The columns the table shows: those named, or every line field but the structural ones.
276
- const shown = node.columns ?? Object.keys(def.fields).filter((c) => c !== def.lineKinds?.field && c !== def.sequenceField);
277
- for (const column of Object.keys(node.optionalColumns)) {
278
- if (!shown.includes(column))
279
- this.report(`${path}.optionalColumns.${column}`, `"${column}" is not a column of "${node.field}"`);
280
- }
281
- }
282
- }
283
- if (!def || !node.columns)
284
- return;
285
- if (def.type === 'one2many') {
286
- node.columns.forEach((column, i) => {
287
- if (!has(def.fields, column)) {
288
- this.report(`${path}.columns[${i}]`, `"${column}" is not a field of the lines of "${node.field}"`);
289
- }
290
- });
291
- }
292
- else if (def.type !== 'many2many') {
293
- this.report(`${path}.columns`, `columns only apply to one2many and many2many fields; "${node.field}" is a ${def.type}`);
294
- }
295
- }
296
- }
297
34
  //# sourceMappingURL=validate.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAa,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACjI,CAAC;IACD,MAAM,IAAI,GAAS,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,eAAe,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtF,OAAO,IAAI,KAAK,CAAC,aAAa,wCAAwC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/F,MAAM,cAAc;IAIW;IAHZ,MAAM,GAAgB,EAAE,CAAC;IACzB,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,GAAG;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,IAAY,EAAE,OAAe;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,EAAU,EAAE,IAAY;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,mBAAmB,KAAK,EAAE,CAAC,CAAC;;YACrF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,sEAAsE;IAC9D,IAAI,CAAC,IAAY,EAAE,IAAY,EAAE,QAA2C,IAAI,CAAC,IAAI,CAAC,MAAM;QAClG,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8EAA8E;IACtE,cAAc,CAAC,KAAa,EAAE,IAAY,EAAE,OAA0B,CAAC,WAAW,CAAC;QACzF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACxC,IAAI,MAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,gBAAgB,KAAK,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrF,SAAS;YACX,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;oBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,KAAK,YAAY,IAAI,sCAAsC,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAA0C,EAAE,IAAY;QAC1E,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAC/E,IAAI,QAAQ,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,IAAI,CAAC,MAAM,CACT,GAAG,IAAI,gBAAgB,EACvB,IAAI,GAAG,CAAC,aAAa,UAAU,QAAQ,CAAC,IAAI,0DAA0D,CACvG,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;oBAClC,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS;wBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;gBAClH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/B,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACvD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;oBAC1F,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,kBAAkB,CAAC,CAAC;oBAChH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,SAAS;oBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;gBAC7F,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAI,CAAC,QAAQ;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE,IAAI,GAAG,CAAC,aAAa,qCAAqC,IAAI,GAAG,CAAC,CAAC;yBAClH,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACrC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE,IAAI,GAAG,CAAC,aAAa,UAAU,QAAQ,CAAC,IAAI,8DAA8D,CAAC,CAAC;oBACnJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAa,EAAE,KAAgB,EAAE,UAAqC,EAAE,IAAY;QACzG,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,qCAAqC,KAAK,GAAG,CAAC,CAAC;aACtG,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,UAAU,SAAS,CAAC,IAAI,kEAAkE,CAAC,CAAC;QAC1I,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,CAAU,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,IAAI,KAAK,CAAC,KAAK,oBAAoB,KAAK,GAAG,CAAC,CAAC;YACtI,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,qCAAqC,KAAK,GAAG,CAAC,CAAC;aAC/F,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAgB,EAAE,IAAY;QAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,QAAsB,EAAE,IAAY;QACvD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,CAAC;IAEO,QAAQ,CAAC,IAAgB,EAAE,IAAY;QAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACrK,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mDAAmD,CAAC,CAAC;gBAC5G,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;gBAChG,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAChD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC;gBACE,OAAO;QACX,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAc,EAAE,IAAY;QAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,KAAgB,EAAE,IAAY;QAC9C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACjH,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,oBAAoB,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,kBAAkB,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,kBAAkB,EAAE,IAAI,KAAK,UAAU,GAAG,CAAC,IAAI,6CAA6C,CAAC,CAAC;YACnH,CAAC;YACD,IAAI,GAAG,EAAE,IAAI,KAAK,WAAW,IAAI,aAAa,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBACvB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,4BAA4B,CAAC,GAAG,EAAE,IAAI,KAAK,0BAA0B,KAAK,GAAG,CAAC,CAAC;oBACpG,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;YAChD,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAe,EAAE,IAAY;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;QACnD,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,0CAA0C,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACrE,IAAI,CAAC,GAAG;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,MAAM,qCAAqC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;yBACvG,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,MAAM,UAAU,GAAG,CAAC,IAAI,mDAAmD,CAAC,CAAC;oBACvH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,iFAAiF;QACjF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,YAAY,GAAG,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,8CAA8C,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,kBAAkB,EAAE,oDAAoD,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7H,CAAC;iBAAM,CAAC;gBACN,yFAAyF;gBACzF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC3H,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;oBACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,oBAAoB,MAAM,EAAE,EAAE,IAAI,MAAM,yBAAyB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBAClI,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,MAAM,qCAAqC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,yDAAyD,IAAI,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"validate.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAa,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAuB,MAAM,cAAc,CAAC;AAInE;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACjI,CAAC;IACD,MAAM,IAAI,GAAS,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,IAA4B;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvH,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAuB;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,eAAe,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtF,OAAO,IAAI,KAAK,CAAC,aAAa,wCAAwC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ /** The page format version this build reads and writes. */
2
+ export declare const FORMAT_VERSION: "0.1";
@@ -0,0 +1,2 @@
1
+ /** The page format version this build reads and writes. */
2
+ export declare const FORMAT_VERSION: "0.1";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FORMAT_VERSION = void 0;
4
+ /** The page format version this build reads and writes. */
5
+ exports.FORMAT_VERSION = '0.1';
6
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/version.ts"],"names":[],"mappings":";;;AAAA,2DAA2D;AAC9C,QAAA,cAAc,GAAG,KAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The page format version this build reads and writes. */
2
+ export const FORMAT_VERSION = '0.1';
3
+ //# sourceMappingURL=version.mjs.map