@kywi-software/core 0.6.2 → 0.6.3

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 (80) hide show
  1. package/README.md +23 -5
  2. package/dist/admin/layout-editor/column-overlay.d.ts +14 -1
  3. package/dist/admin/layout-editor/column-overlay.d.ts.map +1 -1
  4. package/dist/admin/layout-editor/column-overlay.js +5 -2
  5. package/dist/admin/layout-editor/column-overlay.js.map +1 -1
  6. package/dist/admin/layout-editor/editor-canvas.d.ts +34 -1
  7. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  8. package/dist/admin/layout-editor/editor-canvas.js +156 -16
  9. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  10. package/dist/admin/layout-editor/editor-state.d.ts +57 -2
  11. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  12. package/dist/admin/layout-editor/editor-state.js +125 -53
  13. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  14. package/dist/admin/layout-editor/editor.css +487 -44
  15. package/dist/admin/layout-editor/index.d.ts +1 -1
  16. package/dist/admin/layout-editor/index.d.ts.map +1 -1
  17. package/dist/admin/layout-editor/index.js.map +1 -1
  18. package/dist/admin/layout-editor/inline-text.d.ts +44 -0
  19. package/dist/admin/layout-editor/inline-text.d.ts.map +1 -0
  20. package/dist/admin/layout-editor/inline-text.js +67 -0
  21. package/dist/admin/layout-editor/inline-text.js.map +1 -0
  22. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  23. package/dist/admin/layout-editor/layout-editor.js +23 -31
  24. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  25. package/dist/admin/layout-editor/module-overlay.d.ts +32 -1
  26. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  27. package/dist/admin/layout-editor/module-overlay.js +108 -6
  28. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  29. package/dist/admin/layout-editor/node-lookup.d.ts +94 -0
  30. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -0
  31. package/dist/admin/layout-editor/node-lookup.js +142 -0
  32. package/dist/admin/layout-editor/node-lookup.js.map +1 -0
  33. package/dist/admin/layout-editor/overlay-shell.d.ts +19 -1
  34. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  35. package/dist/admin/layout-editor/overlay-shell.js +177 -69
  36. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  37. package/dist/admin/layout-editor/props-panel.d.ts +9 -2
  38. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  39. package/dist/admin/layout-editor/props-panel.js +13 -5
  40. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  41. package/dist/admin/layout-editor/region-overlay.d.ts +8 -1
  42. package/dist/admin/layout-editor/region-overlay.d.ts.map +1 -1
  43. package/dist/admin/layout-editor/region-overlay.js +4 -1
  44. package/dist/admin/layout-editor/region-overlay.js.map +1 -1
  45. package/dist/admin/layout-editor/section-insert-line.d.ts +7 -1
  46. package/dist/admin/layout-editor/section-insert-line.d.ts.map +1 -1
  47. package/dist/admin/layout-editor/section-insert-line.js +4 -1
  48. package/dist/admin/layout-editor/section-insert-line.js.map +1 -1
  49. package/dist/admin/layout-editor/section-overlay.d.ts +13 -1
  50. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  51. package/dist/admin/layout-editor/section-overlay.js +24 -12
  52. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  53. package/dist/admin/layout-editor/section-variant-container-config.d.ts +29 -0
  54. package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -0
  55. package/dist/admin/layout-editor/section-variant-container-config.js +82 -0
  56. package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -0
  57. package/dist/admin/styles/admin.css +5 -2
  58. package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -1
  59. package/dist/admin/surfaces/content/content-edit.js +8 -1
  60. package/dist/admin/surfaces/content/content-edit.js.map +1 -1
  61. package/dist/db/content-queries.d.ts +35 -0
  62. package/dist/db/content-queries.d.ts.map +1 -1
  63. package/dist/db/content-queries.js +175 -36
  64. package/dist/db/content-queries.js.map +1 -1
  65. package/dist/nav/index.d.ts +1 -1
  66. package/dist/nav/index.d.ts.map +1 -1
  67. package/dist/nav/index.js +4 -1
  68. package/dist/nav/index.js.map +1 -1
  69. package/dist/nav/url-resolver.d.ts +27 -0
  70. package/dist/nav/url-resolver.d.ts.map +1 -1
  71. package/dist/nav/url-resolver.js +36 -1
  72. package/dist/nav/url-resolver.js.map +1 -1
  73. package/dist/scope/edit-mode-hooks.d.ts.map +1 -1
  74. package/dist/scope/edit-mode-hooks.js +27 -1
  75. package/dist/scope/edit-mode-hooks.js.map +1 -1
  76. package/dist/scope/inline-editing.d.ts.map +1 -1
  77. package/dist/scope/inline-editing.js +2 -1
  78. package/dist/scope/inline-editing.js.map +1 -1
  79. package/dist/site/styles.css +147 -4
  80. package/package.json +1 -1
@@ -3,6 +3,20 @@ import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
3
3
  import type { KywiDb } from './client.js';
4
4
  import type { ContentTypeConfig } from '../config/types.js';
5
5
  import type { PaginationParams, SortParams, FilterParams } from '../api/pagination.js';
6
+ /**
7
+ * Thrown when the custom-field (side) table write of a content mutation fails.
8
+ *
9
+ * The base `kywi_content` write and the `kywi_ct_*` side-table write run inside
10
+ * one transaction (kywi-cms#95), so this error always means the WHOLE mutation
11
+ * was rolled back — there is never a half-created node left behind. The most
12
+ * common cause is a side table that does not physically exist yet because the
13
+ * content type was declared but `/content-types/apply` never ran.
14
+ */
15
+ export declare class ContentCustomFieldsError extends Error {
16
+ readonly contentTypeName: string;
17
+ readonly tableName: string;
18
+ constructor(contentTypeName: string, tableName: string, cause: unknown);
19
+ }
6
20
  /**
7
21
  * Build SQL conditions that exclude content outside its display window.
8
22
  *
@@ -60,6 +74,10 @@ export declare function getContentById(db: KywiDb, customTable: PgTableWithColum
60
74
  * `contact` can collide — pass `baseType` (e.g. 'form') to resolve the intended
61
75
  * row rather than whichever the query happens to return first (kywi-cms#39).
62
76
  *
77
+ * When `baseType` is NOT given the lookup is a public-page resolution, so a
78
+ * collision is broken in favour of the page-like row instead of being left to
79
+ * the planner (kywi-cms#100). A slug matching exactly one row is unaffected.
80
+ *
63
81
  * `options.status` restricts the lookup to rows with an exact status match (e.g.
64
82
  * 'published'). It is optional and defaults to no filter (current behavior) —
65
83
  * callers that don't pass it are unaffected. This is what lets a public,
@@ -71,6 +89,23 @@ export declare function getContentBySlug(db: KywiDb, customTable: PgTableWithCol
71
89
  baseType?: string;
72
90
  status?: string;
73
91
  }): Promise<ContentWithCustomFields | null>;
92
+ /**
93
+ * Rows on the same site that share `slug` but carry a DIFFERENT base type.
94
+ *
95
+ * `kywi_content.slug` has no cross-base-type uniqueness constraint, so a Page
96
+ * and a Form can both be authored at "contact". Public routes now resolve that
97
+ * ambiguity in the page's favour (see {@link getContentBySlug}), but the author
98
+ * still deserves to know the site has two things claiming one URL — hence this
99
+ * detector, surfaced as a non-blocking warning on create/rename (kywi-cms#100).
100
+ *
101
+ * Soft-deleted rows are excluded; they own no URL.
102
+ */
103
+ export declare function findCrossBaseTypeSlugCollisions(db: KywiDb, siteId: string, slug: string, baseType: string, excludeContentId?: string): Promise<{
104
+ id: string;
105
+ title: string;
106
+ baseType: string;
107
+ contentTypeName: string;
108
+ }[]>;
74
109
  /**
75
110
  * Create a new content node with custom fields.
76
111
  */
@@ -1 +1 @@
1
- {"version":3,"file":"content-queries.d.ts","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-queries.d.ts","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,44 @@
1
- import { eq, and, like, sql, desc, asc, count, inArray, or, lte, gt, getTableColumns } from 'drizzle-orm';
1
+ import { eq, and, like, sql, desc, asc, count, inArray, or, lte, gt, ne, getTableColumns, getTableName } from 'drizzle-orm';
2
2
  import { kywiContent } from '../schema/base.js';
3
3
  import { computePath } from '../nav/builder.js';
4
+ import { pageFirstOrdering } from '../nav/url-resolver.js';
5
+ /**
6
+ * Thrown when the custom-field (side) table write of a content mutation fails.
7
+ *
8
+ * The base `kywi_content` write and the `kywi_ct_*` side-table write run inside
9
+ * one transaction (kywi-cms#95), so this error always means the WHOLE mutation
10
+ * was rolled back — there is never a half-created node left behind. The most
11
+ * common cause is a side table that does not physically exist yet because the
12
+ * content type was declared but `/content-types/apply` never ran.
13
+ */
14
+ export class ContentCustomFieldsError extends Error {
15
+ contentTypeName;
16
+ tableName;
17
+ constructor(contentTypeName, tableName, cause) {
18
+ const detail = cause instanceof Error ? cause.message : String(cause);
19
+ super(`Failed to write custom fields for content type '${contentTypeName}' ` +
20
+ `(side table "${tableName}"): ${detail}. The write was rolled back — no partial ` +
21
+ `content row remains. The side table may not exist yet (apply pending ` +
22
+ `content-type changes) or a field value violated a constraint.`, { cause });
23
+ this.name = 'ContentCustomFieldsError';
24
+ this.contentTypeName = contentTypeName;
25
+ this.tableName = tableName;
26
+ }
27
+ }
28
+ /**
29
+ * Run `fn` inside a DB transaction when the client supports one, otherwise run
30
+ * it inline against `db`.
31
+ *
32
+ * The guard mirrors the one in `changeset-queries.ts`: unit tests hand these
33
+ * queries a minimal chainable mock with no `.transaction`, and those callers
34
+ * must keep working (they exercise statement shape, not atomicity).
35
+ */
36
+ async function runInTransaction(db, fn) {
37
+ if ('transaction' in db && typeof db.transaction === 'function') {
38
+ return db.transaction(fn);
39
+ }
40
+ return fn(db);
41
+ }
4
42
  /**
5
43
  * Build SQL conditions that exclude content outside its display window.
6
44
  *
@@ -202,6 +240,10 @@ export async function getContentById(db, customTable, id, siteId) {
202
240
  * `contact` can collide — pass `baseType` (e.g. 'form') to resolve the intended
203
241
  * row rather than whichever the query happens to return first (kywi-cms#39).
204
242
  *
243
+ * When `baseType` is NOT given the lookup is a public-page resolution, so a
244
+ * collision is broken in favour of the page-like row instead of being left to
245
+ * the planner (kywi-cms#100). A slug matching exactly one row is unaffected.
246
+ *
205
247
  * `options.status` restricts the lookup to rows with an exact status match (e.g.
206
248
  * 'published'). It is optional and defaults to no filter (current behavior) —
207
249
  * callers that don't pass it are unaffected. This is what lets a public,
@@ -224,6 +266,8 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
224
266
  conditions.push(eq(kywiContent.status, options.status));
225
267
  }
226
268
  const where = and(...conditions);
269
+ // An explicit baseType already pins the row; ordering would be dead weight.
270
+ const ordering = options?.baseType ? [] : pageFirstOrdering();
227
271
  let query;
228
272
  if (customTable) {
229
273
  query = db
@@ -231,6 +275,7 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
231
275
  .from(kywiContent)
232
276
  .leftJoin(customTable, eq(kywiContent.id, customTable.id))
233
277
  .where(where)
278
+ .orderBy(...ordering)
234
279
  .limit(1);
235
280
  }
236
281
  else {
@@ -238,6 +283,7 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
238
283
  .select()
239
284
  .from(kywiContent)
240
285
  .where(where)
286
+ .orderBy(...ordering)
241
287
  .limit(1);
242
288
  }
243
289
  const [row] = await query;
@@ -249,6 +295,70 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
249
295
  }
250
296
  return row;
251
297
  }
298
+ /**
299
+ * Rows on the same site that share `slug` but carry a DIFFERENT base type.
300
+ *
301
+ * `kywi_content.slug` has no cross-base-type uniqueness constraint, so a Page
302
+ * and a Form can both be authored at "contact". Public routes now resolve that
303
+ * ambiguity in the page's favour (see {@link getContentBySlug}), but the author
304
+ * still deserves to know the site has two things claiming one URL — hence this
305
+ * detector, surfaced as a non-blocking warning on create/rename (kywi-cms#100).
306
+ *
307
+ * Soft-deleted rows are excluded; they own no URL.
308
+ */
309
+ export async function findCrossBaseTypeSlugCollisions(db, siteId, slug, baseType, excludeContentId) {
310
+ const conditions = [
311
+ eq(kywiContent.siteId, siteId),
312
+ eq(kywiContent.slug, slug),
313
+ ne(kywiContent.baseType, baseType),
314
+ sql `${kywiContent.deletedAt} IS NULL`,
315
+ ];
316
+ if (excludeContentId !== undefined)
317
+ conditions.push(ne(kywiContent.id, excludeContentId));
318
+ return db
319
+ .select({
320
+ id: kywiContent.id,
321
+ title: kywiContent.title,
322
+ baseType: kywiContent.baseType,
323
+ contentTypeName: kywiContent.contentTypeName,
324
+ })
325
+ .from(kywiContent)
326
+ .where(and(...conditions));
327
+ }
328
+ /**
329
+ * Non-blocking authoring guard for kywi-cms#100.
330
+ *
331
+ * There is no warning channel on the content API (`jsonOk` emits a bare
332
+ * `{ data }` envelope), and hard-failing the write would break every install
333
+ * that already has a legitimate collision. So the guard logs server-side under
334
+ * the existing `[kywi:content]` prefix and lets the write stand. Living in the
335
+ * query layer means every authoring path — REST routes, `scope.content.create`,
336
+ * SDK, MCP — is covered by one wiring point.
337
+ *
338
+ * Never throws: a failed advisory lookup must not fail the mutation it advises on.
339
+ */
340
+ async function warnOnCrossBaseTypeSlugCollision(db, row) {
341
+ try {
342
+ const siteId = row.siteId;
343
+ const slug = row.slug;
344
+ const baseType = row.baseType;
345
+ const id = row.id;
346
+ if (!siteId || !slug || !baseType)
347
+ return;
348
+ const collisions = await findCrossBaseTypeSlugCollisions(db, siteId, slug, baseType, id);
349
+ if (collisions.length === 0)
350
+ return;
351
+ const others = collisions
352
+ .map(c => `${c.contentTypeName} (baseType '${c.baseType}', id ${c.id})`)
353
+ .join(', ');
354
+ console.warn(`[kywi:content] slug collision: "${slug}" is now used by ${row.contentTypeName} ` +
355
+ `(baseType '${baseType}') and ${others} on site ${siteId}. ` +
356
+ `Public routes resolve the page-like row; rename one slug to remove the ambiguity (kywi-cms#100).`);
357
+ }
358
+ catch {
359
+ // Advisory only — swallow.
360
+ }
361
+ }
252
362
  /** Slugify a title: lowercase, spaces→hyphens, strip non-url-safe chars. */
253
363
  function slugFromTitle(title) {
254
364
  return title.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
@@ -334,19 +444,34 @@ export async function createContent(db, contentType, customTable, siteId, data,
334
444
  if (status === 'published' && insertValues.publishedAt === undefined) {
335
445
  insertValues.publishedAt = new Date();
336
446
  }
337
- const [baseRow] = await db
338
- .insert(kywiContent)
339
- .values(insertValues)
340
- .returning();
341
- if (!baseRow)
342
- throw new Error('Failed to insert content');
343
- if (customTable && Object.keys(customFields).length > 0) {
344
- await db.insert(customTable).values({
345
- id: baseRow.id,
346
- siteId,
347
- ...customFields,
348
- });
349
- }
447
+ // kywi-cms#95 the base row and its side-table row are ONE unit of work. Written
448
+ // as two independent statements, a failed side-table insert (missing physical
449
+ // kywi_ct_* table, constraint violation, dropped connection) left the already
450
+ // committed base row behind: the node was permanently half-created, and an
451
+ // idempotent re-run found it by slug and skipped it. Both writes now share a
452
+ // transaction, so a side-table failure rolls the base row back too.
453
+ const baseRow = await runInTransaction(db, async (tx) => {
454
+ const [inserted] = await tx
455
+ .insert(kywiContent)
456
+ .values(insertValues)
457
+ .returning();
458
+ if (!inserted)
459
+ throw new Error('Failed to insert content');
460
+ if (customTable && Object.keys(customFields).length > 0) {
461
+ try {
462
+ await tx.insert(customTable).values({
463
+ id: inserted.id,
464
+ siteId,
465
+ ...customFields,
466
+ });
467
+ }
468
+ catch (err) {
469
+ throw new ContentCustomFieldsError(contentType.name, getTableName(customTable), err);
470
+ }
471
+ }
472
+ return inserted;
473
+ });
474
+ await warnOnCrossBaseTypeSlugCollision(db, baseRow);
350
475
  return mergeContentRow(baseRow, Object.keys(customFields).length > 0 ? { id: baseRow.id, siteId, ...customFields } : null, customTable);
351
476
  }
352
477
  /**
@@ -355,32 +480,46 @@ export async function createContent(db, contentType, customTable, siteId, data,
355
480
  export async function updateContent(db, contentType, customTable, id, data, userId) {
356
481
  const customFieldNames = contentType.fields.map(f => f.name);
357
482
  const { baseFields, customFields } = splitCustomFields(data, customFieldNames);
358
- if (Object.keys(baseFields).length > 0) {
359
- const setValues = { ...baseFields, updatedBy: userId, updatedAt: new Date() };
360
- // A status change into 'published' (e.g. via PUT/PATCH) stamps publishedAt.
361
- // COALESCE preserves any existing timestamp so the original publish date is
362
- // kept across re-publishes; skip when the caller set publishedAt explicitly.
363
- if (baseFields.status === 'published' && baseFields.publishedAt === undefined) {
364
- setValues.publishedAt = sql `COALESCE(${kywiContent.publishedAt}, now())`;
483
+ // kywi-cms#95 same unit-of-work rule as createContent: a failed side-table
484
+ // write must not leave the base row updated on its own.
485
+ await runInTransaction(db, async (tx) => {
486
+ if (Object.keys(baseFields).length > 0) {
487
+ const setValues = { ...baseFields, updatedBy: userId, updatedAt: new Date() };
488
+ // A status change into 'published' (e.g. via PUT/PATCH) stamps publishedAt.
489
+ // COALESCE preserves any existing timestamp so the original publish date is
490
+ // kept across re-publishes; skip when the caller set publishedAt explicitly.
491
+ if (baseFields.status === 'published' && baseFields.publishedAt === undefined) {
492
+ setValues.publishedAt = sql `COALESCE(${kywiContent.publishedAt}, now())`;
493
+ }
494
+ await tx
495
+ .update(kywiContent)
496
+ .set(setValues)
497
+ .where(eq(kywiContent.id, id));
365
498
  }
366
- await db
367
- .update(kywiContent)
368
- .set(setValues)
369
- .where(eq(kywiContent.id, id));
370
- }
371
- if (customTable && Object.keys(customFields).length > 0) {
372
- const result = await db
373
- .update(customTable)
374
- .set(customFields)
375
- .where(eq(customTable.id, id));
376
- if (result.rowCount === 0) {
377
- const [baseRow] = await db.select({ siteId: kywiContent.siteId }).from(kywiContent).where(eq(kywiContent.id, id));
378
- if (baseRow) {
379
- await db.insert(customTable).values({ id, siteId: baseRow.siteId, ...customFields });
499
+ if (customTable && Object.keys(customFields).length > 0) {
500
+ try {
501
+ const result = await tx
502
+ .update(customTable)
503
+ .set(customFields)
504
+ .where(eq(customTable.id, id));
505
+ if (result.rowCount === 0) {
506
+ const [baseRow] = await tx.select({ siteId: kywiContent.siteId }).from(kywiContent).where(eq(kywiContent.id, id));
507
+ if (baseRow) {
508
+ await tx.insert(customTable).values({ id, siteId: baseRow.siteId, ...customFields });
509
+ }
510
+ }
511
+ }
512
+ catch (err) {
513
+ throw new ContentCustomFieldsError(contentType.name, getTableName(customTable), err);
380
514
  }
381
515
  }
516
+ });
517
+ const updated = await getContentById(db, customTable, id);
518
+ // Only a slug change can introduce a new cross-base-type collision.
519
+ if (updated && baseFields.slug !== undefined) {
520
+ await warnOnCrossBaseTypeSlugCollision(db, updated);
382
521
  }
383
- return getContentById(db, customTable, id);
522
+ return updated;
384
523
  }
385
524
  /**
386
525
  * Soft-delete a content node (set deletedAt).
@@ -1 +1 @@
1
- {"version":3,"file":"content-queries.js","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAK/C;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAY,IAAI,IAAI,EAAE;IACjE,OAAO;QACL,gDAAgD;QAChD,EAAE;QACF,8EAA8E;QAC9E,0EAA0E;QAC1E,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,EAAE,CACA,GAAG,CAAA,GAAG,WAAW,CAAC,YAAY,UAAU,EACxC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CACnC;QACD,6CAA6C;QAC7C,EAAE,CACA,GAAG,CAAA,GAAG,WAAW,CAAC,WAAW,UAAU,EACvC,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CACjC;KACF,CAAA;AACH,CAAC;AAID;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,WAAuD;IAEvD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAyB,EAAE,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA6B,EAC7B,MAAsC,EACtC,WAA4C;IAE5C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IAC5C,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAA;IAC5D,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,EAAE,CAAA;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA8B,EAC9B,gBAA0B;IAE1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAChD,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,MAAM,YAAY,GAA4B,EAAE,CAAA;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAoC,EACpC,WAA2C;IAE3C,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAErE,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAI,WAAmB,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,MAAc,EACd,UAA4B,EAC5B,IAAgB,EAChB,OAAqB,EACrB,eAA0B;IAE1B,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC;QACjD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;QACrC,GAAG,4BAA4B,EAAE;KAClC,CAAA;IAED,4EAA4E;IAC5E,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAEhC,MAAM,UAAU,GAAI,WAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAA;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE3E,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE;SAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;SAC1B,IAAI,CAAC,WAAW,CAAC;SACjB,KAAK,CAAC,KAAK,CAAC,CAAA;IAEf,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;IAE7C,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAA;IAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;YACpE,OAAO,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;QACnF,CAAC;QACD,OAAO,GAA8B,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,WAA2C,EAC3C,EAAU,EACV,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS;QACtC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC;QACpE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC,CAAA;IACtG,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,WAAW,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,WAAW,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAA;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;QAC3E,OAAO,eAAe,CAAE,GAAW,CAAC,YAAY,EAAG,GAAW,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,GAA8B,CAAA;AACvC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,WAA2C,EAC3C,IAAY,EACZ,MAAc,EACd,OAAiE;IAEjE,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAC1B,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;KACtC,CAAA;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAEhC,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,KAAK,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAA;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;QAC3E,OAAO,eAAe,CAAE,GAAW,CAAC,YAAY,EAAG,GAAW,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,GAA8B,CAAA;AACvC,CAAC;AAED,4EAA4E;AAC5E,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;AAC5E,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,oBAAoB,CACjC,EAAU,EACV,MAAc,EACd,QAAmC,EACnC,IAAY,EACZ,UAAmC;IAEnC,MAAM,GAAG,GAA0D,EAAE,CAAA;IAErE,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpE,IAAI,UAAU,GAAG,GAAG,CAAA;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAA,CAAC,uCAAuC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;iBACtB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;iBAC5D,IAAI,CAAC,WAAW,CAAC;iBACjB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACnC,KAAK,CAAC,CAAC,CAAC,CAAA;YACX,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;gBACxB,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;YAC5B,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC3E,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG;YACZ,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;YAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;YACrC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,WAAW,CAAC,QAAQ,UAAU;SACrF,CAAA;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAQ,gBAAgB,WAAW,CAAC,SAAS,QAAQ,EAAE,CAAC;aAC9E,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACvB,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,MAAc,EACd,IAA6B,EAC7B,MAAqB;IAErB,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAE9E,6EAA6E;IAC7E,0EAA0E;IAC1E,+CAA+C;IAC/C,MAAM,YAAY,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,KAAe,CAAC,CAAA;IAE3F,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAqC,EAAE,IAAI,EAAE,UAAU,CAC/E,CAAA;IAED,MAAM,MAAM,GAAI,UAAU,CAAC,MAAiB,IAAI,OAAO,CAAA;IACvD,MAAM,YAAY,GAA4B;QAC5C,GAAG,UAAU;QACb,MAAM;QACN,IAAI;QACJ,GAAG,SAAS;QACZ,eAAe,EAAE,WAAW,CAAC,IAAI;QACjC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM;QACN,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;KAClB,CAAA;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,0CAA0C;IAC1C,IAAI,MAAM,KAAK,WAAW,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrE,YAAY,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,WAAW,CAAC;SACnB,MAAM,CAAC,YAAmB,CAAC;SAC3B,SAAS,EAAE,CAAA;IAEd,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAEzD,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YAClC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;YACN,GAAG,YAAY;SACT,CAAC,CAAA;IACX,CAAC;IAED,OAAO,eAAe,CACpB,OAAO,EACP,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EACzF,WAAW,CACZ,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,EAAU,EACV,IAA6B,EAC7B,MAAqB;IAErB,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAE9E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,GAA4B,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;QACtG,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9E,SAAS,CAAC,WAAW,GAAG,GAAG,CAAA,YAAY,WAAW,CAAC,WAAW,UAAU,CAAA;QAC1E,CAAC;QACD,MAAM,EAAE;aACL,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,SAAgB,CAAC;aACrB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,YAAmB,CAAC;aACxB,KAAK,CAAC,EAAE,CAAE,WAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAEzC,IAAK,MAAc,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YACjH,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,YAAY,EAAS,CAAC,CAAA;YAC7F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,kFAAkF;AAClF,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC,CAAA;IAClF,IAAI,MAAM,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACrC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;SACzB,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS;QAChC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,CAAA,YAAY,WAAW,CAAC,WAAW,UAAU,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACzH,KAAK,CAAC,KAAK,CAAC;SACZ,SAAS,EAAE,CAAA;IAEd,OAAO,GAAG,IAAI,IAAI,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS;QAChC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACtD,KAAK,CAAC,KAAK,CAAC;SACZ,SAAS,EAAE,CAAA;IAEd,OAAO,GAAG,IAAI,IAAI,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU;IACzD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACtD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,cAAc,CAAC,CAAC;SAC7E,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU,EAAE,EAAU,EAAE,MAAe;IAClF,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,cAAc,CAAC,CAAA;IACtF,IAAI,MAAM,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;SACzB,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC"}
1
+ {"version":3,"file":"content-queries.js","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3H,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAK1D;;;;;;;;GAQG;AACH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,eAAe,CAAQ;IACvB,SAAS,CAAQ;IAC1B,YAAY,eAAuB,EAAE,SAAiB,EAAE,KAAc;QACpE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrE,KAAK,CACH,mDAAmD,eAAe,IAAI;YACtE,gBAAgB,SAAS,OAAO,MAAM,2CAA2C;YACjF,uEAAuE;YACvE,+DAA+D,EAC/D,EAAE,KAAK,EAAE,CACV,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QACtC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAAI,EAAU,EAAE,EAA8B;IAC3E,IAAI,aAAa,IAAI,EAAE,IAAI,OAAQ,EAAU,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACzE,OAAQ,EAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAY,IAAI,IAAI,EAAE;IACjE,OAAO;QACL,gDAAgD;QAChD,EAAE;QACF,8EAA8E;QAC9E,0EAA0E;QAC1E,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,EAAE,CACA,GAAG,CAAA,GAAG,WAAW,CAAC,YAAY,UAAU,EACxC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CACnC;QACD,6CAA6C;QAC7C,EAAE,CACA,GAAG,CAAA,GAAG,WAAW,CAAC,WAAW,UAAU,EACvC,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CACjC;KACF,CAAA;AACH,CAAC;AAID;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,WAAuD;IAEvD,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAyB,EAAE,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA6B,EAC7B,MAAsC,EACtC,WAA4C;IAE5C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IAC5C,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAA;IAC5D,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,EAAE,CAAA;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA8B,EAC9B,gBAA0B;IAE1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAChD,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,MAAM,YAAY,GAA4B,EAAE,CAAA;IAEhD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAoC,EACpC,WAA2C;IAE3C,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAErE,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAI,WAAmB,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,GAAG,EAAE,CAAC;YACR,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,MAAc,EACd,UAA4B,EAC5B,IAAgB,EAChB,OAAqB,EACrB,eAA0B;IAE1B,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC;QACjD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;QACrC,GAAG,4BAA4B,EAAE;KAClC,CAAA;IAED,4EAA4E;IAC5E,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAEhC,MAAM,UAAU,GAAI,WAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,SAAS,CAAA;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE3E,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE;SAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;SAC1B,IAAI,CAAC,WAAW,CAAC;SACjB,KAAK,CAAC,KAAK,CAAC,CAAA;IAEf,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;IAE7C,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,OAAO,CAAC;aAChB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAA;IAE3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;YACpE,OAAO,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;QACnF,CAAC;QACD,OAAO,GAA8B,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,WAA2C,EAC3C,EAAU,EACV,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS;QACtC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC;QACpE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC,CAAA;IACtG,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,WAAW,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,WAAW,CAAC;aAClB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAA;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;QAC3E,OAAO,eAAe,CAAE,GAAW,CAAC,YAAY,EAAG,GAAW,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,GAA8B,CAAA;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,WAA2C,EAC3C,IAAY,EACZ,MAAc,EACd,OAAiE;IAEjE,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAC1B,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;KACtC,CAAA;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAEhC,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAA;IAE7D,IAAI,KAAK,CAAA;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAG,WAAmB,CAAC,EAAE,CAAC,CAAC;aAClE,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,GAAG,QAAQ,CAAC;aACpB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE;aACP,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,KAAK,CAAC;aACZ,OAAO,CAAC,GAAG,QAAQ,CAAC;aACpB,KAAK,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,CAAA;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAA;QAC3E,OAAO,eAAe,CAAE,GAAW,CAAC,YAAY,EAAG,GAAW,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,GAA8B,CAAA;AACvC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,EAAU,EACV,MAAc,EACd,IAAY,EACZ,QAAgB,EAChB,gBAAyB;IAEzB,MAAM,UAAU,GAAG;QACjB,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAC1B,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClC,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;KACtC,CAAA;IACD,IAAI,gBAAgB,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAEzF,OAAO,EAAE;SACN,MAAM,CAAC;QACN,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,eAAe,EAAE,WAAW,CAAC,eAAe;KAC7C,CAAC;SACD,IAAI,CAAC,WAAW,CAAC;SACjB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,gCAAgC,CAC7C,EAAU,EACV,GAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAA4B,CAAA;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,IAA0B,CAAA;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B,CAAA;QACnD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAwB,CAAA;QACvC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QAEzC,MAAM,UAAU,GAAG,MAAM,+BAA+B,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QACxF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAEnC,MAAM,MAAM,GAAG,UAAU;aACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,eAAe,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;aACvE,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,OAAO,CAAC,IAAI,CACV,mCAAmC,IAAI,oBAAoB,GAAG,CAAC,eAAe,GAAG;YACjF,cAAc,QAAQ,UAAU,MAAM,YAAY,MAAM,IAAI;YAC5D,kGAAkG,CACnG,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;AAC5E,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,oBAAoB,CACjC,EAAU,EACV,MAAc,EACd,QAAmC,EACnC,IAAY,EACZ,UAAmC;IAEnC,MAAM,GAAG,GAA0D,EAAE,CAAA;IAErE,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpE,IAAI,UAAU,GAAG,GAAG,CAAA;QACpB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAA,CAAC,uCAAuC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;iBACtB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;iBAC5D,IAAI,CAAC,WAAW,CAAC;iBACjB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;iBACnC,KAAK,CAAC,CAAC,CAAC,CAAA;YACX,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA;gBACxB,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;YAC5B,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC3E,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG;YACZ,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;YAC9B,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU;YACrC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,WAAW,CAAC,QAAQ,UAAU;SACrF,CAAA;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;aACnB,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAQ,gBAAgB,WAAW,CAAC,SAAS,QAAQ,EAAE,CAAC;aAC9E,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;QACvB,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,MAAc,EACd,IAA6B,EAC7B,MAAqB;IAErB,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAE9E,6EAA6E;IAC7E,0EAA0E;IAC1E,+CAA+C;IAC/C,MAAM,YAAY,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,KAAe,CAAC,CAAA;IAE3F,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAqC,EAAE,IAAI,EAAE,UAAU,CAC/E,CAAA;IAED,MAAM,MAAM,GAAI,UAAU,CAAC,MAAiB,IAAI,OAAO,CAAA;IACvD,MAAM,YAAY,GAA4B;QAC5C,GAAG,UAAU;QACb,MAAM;QACN,IAAI;QACJ,GAAG,SAAS;QACZ,eAAe,EAAE,WAAW,CAAC,IAAI;QACjC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM;QACN,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;KAClB,CAAA;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,0CAA0C;IAC1C,IAAI,MAAM,KAAK,WAAW,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrE,YAAY,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;IAED,kFAAkF;IAClF,8EAA8E;IAC9E,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,oEAAoE;IACpE,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;aACxB,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,YAAmB,CAAC;aAC3B,SAAS,EAAE,CAAA;QAEd,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAE1D,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;oBAClC,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,MAAM;oBACN,GAAG,YAAY;iBACT,CAAC,CAAA;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,wBAAwB,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;YACtF,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,MAAM,gCAAgC,CAAC,EAAE,EAAE,OAAkC,CAAC,CAAA;IAE9E,OAAO,eAAe,CACpB,OAAO,EACP,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EACzF,WAAW,CACZ,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,WAA8B,EAC9B,WAA2C,EAC3C,EAAU,EACV,IAA6B,EAC7B,MAAqB;IAErB,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAE9E,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,SAAS,GAA4B,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;YACtG,4EAA4E;YAC5E,4EAA4E;YAC5E,6EAA6E;YAC7E,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9E,SAAS,CAAC,WAAW,GAAG,GAAG,CAAA,YAAY,WAAW,CAAC,WAAW,UAAU,CAAA;YAC1E,CAAC;YACD,MAAM,EAAE;iBACL,MAAM,CAAC,WAAW,CAAC;iBACnB,GAAG,CAAC,SAAgB,CAAC;iBACrB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAClC,CAAC;QAED,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,EAAE;qBACpB,MAAM,CAAC,WAAW,CAAC;qBACnB,GAAG,CAAC,YAAmB,CAAC;qBACxB,KAAK,CAAC,EAAE,CAAE,WAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAEzC,IAAK,MAAc,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;oBACjH,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,YAAY,EAAS,CAAC,CAAA;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,wBAAwB,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA;YACtF,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;IAEzD,oEAAoE;IACpE,IAAI,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,gCAAgC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,kFAAkF;AAClF,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,UAAU,CAAC,CAAA;IAClF,IAAI,MAAM,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACrC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;SACzB,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS;QAChC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,CAAA,YAAY,WAAW,CAAC,WAAW,UAAU,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACzH,KAAK,CAAC,KAAK,CAAC;SACZ,SAAS,EAAE,CAAA;IAEd,OAAO,GAAG,IAAI,IAAI,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,EAAU,EACV,MAAe;IAEf,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS;QAChC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACtD,KAAK,CAAC,KAAK,CAAC;SACZ,SAAS,EAAE,CAAA;IAEd,OAAO,GAAG,IAAI,IAAI,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU;IACzD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAS,CAAC;SACtD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,cAAc,CAAC,CAAC;SAC7E,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAU,EAAE,EAAU,EAAE,MAAe;IAClF,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,WAAW,CAAC,SAAS,cAAc,CAAC,CAAA;IACtF,IAAI,MAAM,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;SACzB,SAAS,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,KAAK,SAAS,CAAA;AAC1B,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './builder.js';
3
- export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, type ResolvedContent, } from './url-resolver.js';
3
+ export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, pageFirstOrdering, PAGE_LIKE_BASE_TYPES, type ResolvedContent, } from './url-resolver.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAI5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAO5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA"}
package/dist/nav/index.js CHANGED
@@ -3,5 +3,8 @@ export * from './builder.js';
3
3
  // Public path-based content resolution (kywi-cms#30): resolve a content node by
4
4
  // its full materialized path (honouring the Site Tree hierarchy) instead of by a
5
5
  // bare last-segment slug, so `/a/b/<slug>` cannot serve a top-level `<slug>`.
6
- export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, } from './url-resolver.js';
6
+ // Slug/path is not unique across base types, so a public route can match a Page
7
+ // AND a Form; `PAGE_LIKE_BASE_TYPES`/`pageFirstOrdering` make the page win
8
+ // (kywi-cms#100).
9
+ export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, pageFirstOrdering, PAGE_LIKE_BASE_TYPES, } from './url-resolver.js';
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,GAEf,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,mBAAmB,CAAA"}
@@ -1,4 +1,27 @@
1
+ import { type SQL } from 'drizzle-orm';
1
2
  import type { KywiDb } from '../db/client.js';
3
+ /**
4
+ * Base types that can legitimately own a public page URL.
5
+ *
6
+ * Mirrors `INDEXABLE_BASE_TYPES` (src/ax/filters.ts) plus `link`, which is also
7
+ * addressable (it redirects). Everything else — `form`, `component`, `media` —
8
+ * is an embeddable, not a standalone route.
9
+ */
10
+ export declare const PAGE_LIKE_BASE_TYPES: readonly ["content", "folder", "event", "gallery", "link"];
11
+ /**
12
+ * ORDER BY fragments that rank page-like rows ahead of everything else, then
13
+ * break remaining ties deterministically by creation order.
14
+ *
15
+ * `kywi_content.slug`/`path` are not unique across base types, so a Page and a
16
+ * Form can both sit at `/contact`. Resolving whichever row the planner happened
17
+ * to return first served the form's row at the page URL and rendered an empty,
18
+ * layout-less page while the real page stayed invisible (kywi-cms#100 / UAT-009;
19
+ * kywi-cms#39 fixed the same collision on the form-*submission* side).
20
+ *
21
+ * This only breaks ties: a route that matches exactly one row resolves to that
22
+ * row exactly as before.
23
+ */
24
+ export declare function pageFirstOrdering(): SQL[];
2
25
  export interface ResolvedContent {
3
26
  id: string;
4
27
  siteId: string;
@@ -24,6 +47,10 @@ export interface ResolvedContent {
24
47
  * row for that locale matches; the caller falls back to the default locale on a
25
48
  * miss. Omit it to match any locale (structural resolution).
26
49
  *
50
+ * When more than one row shares the path (slug is not unique across base types —
51
+ * e.g. a Page and a Form both named "contact"), the page-like row wins; see
52
+ * {@link pageFirstOrdering} (kywi-cms#100).
53
+ *
27
54
  * Returns null if no matching content exists for the site+path (+locale).
28
55
  */
29
56
  export declare function resolveContentByPath(db: KywiDb, path: string, siteId: string, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"url-resolver.d.ts","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA+BjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA6DjC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD"}
1
+ {"version":3,"file":"url-resolver.d.ts","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,4DAA6D,CAAA;AAE9F;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,EAAE,CAKzC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAgCjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAgEjC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD"}
@@ -1,5 +1,32 @@
1
- import { eq, and, sql } from 'drizzle-orm';
1
+ import { eq, and, sql, inArray, asc } from 'drizzle-orm';
2
2
  import { kywiContent } from '../schema/base.js';
3
+ /**
4
+ * Base types that can legitimately own a public page URL.
5
+ *
6
+ * Mirrors `INDEXABLE_BASE_TYPES` (src/ax/filters.ts) plus `link`, which is also
7
+ * addressable (it redirects). Everything else — `form`, `component`, `media` —
8
+ * is an embeddable, not a standalone route.
9
+ */
10
+ export const PAGE_LIKE_BASE_TYPES = ['content', 'folder', 'event', 'gallery', 'link'];
11
+ /**
12
+ * ORDER BY fragments that rank page-like rows ahead of everything else, then
13
+ * break remaining ties deterministically by creation order.
14
+ *
15
+ * `kywi_content.slug`/`path` are not unique across base types, so a Page and a
16
+ * Form can both sit at `/contact`. Resolving whichever row the planner happened
17
+ * to return first served the form's row at the page URL and rendered an empty,
18
+ * layout-less page while the real page stayed invisible (kywi-cms#100 / UAT-009;
19
+ * kywi-cms#39 fixed the same collision on the form-*submission* side).
20
+ *
21
+ * This only breaks ties: a route that matches exactly one row resolves to that
22
+ * row exactly as before.
23
+ */
24
+ export function pageFirstOrdering() {
25
+ return [
26
+ sql `CASE WHEN ${inArray(kywiContent.baseType, PAGE_LIKE_BASE_TYPES)} THEN 0 ELSE 1 END`,
27
+ asc(kywiContent.createdAt),
28
+ ];
29
+ }
3
30
  /**
4
31
  * Resolve a content node by walking the materialized path.
5
32
  *
@@ -13,6 +40,10 @@ import { kywiContent } from '../schema/base.js';
13
40
  * row for that locale matches; the caller falls back to the default locale on a
14
41
  * miss. Omit it to match any locale (structural resolution).
15
42
  *
43
+ * When more than one row shares the path (slug is not unique across base types —
44
+ * e.g. a Page and a Form both named "contact"), the page-like row wins; see
45
+ * {@link pageFirstOrdering} (kywi-cms#100).
46
+ *
16
47
  * Returns null if no matching content exists for the site+path (+locale).
17
48
  */
18
49
  export async function resolveContentByPath(db, path, siteId, options) {
@@ -40,6 +71,7 @@ export async function resolveContentByPath(db, path, siteId, options) {
40
71
  })
41
72
  .from(kywiContent)
42
73
  .where(and(...conditions))
74
+ .orderBy(...pageFirstOrdering())
43
75
  .limit(1);
44
76
  if (!row)
45
77
  return null;
@@ -86,6 +118,9 @@ export async function resolveContentBySegments(db, path, siteId) {
86
118
  })
87
119
  .from(kywiContent)
88
120
  .where(and(...conditions))
121
+ // Same page-first tie-break as resolveContentByPath: a segment slug shared
122
+ // by a page and a non-page row must walk into the page (kywi-cms#100).
123
+ .orderBy(...pageFirstOrdering())
89
124
  .limit(1);
90
125
  if (!row)
91
126
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"url-resolver.js","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-resolver.js","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"edit-mode-hooks.d.ts","sourceRoot":"","sources":["../../src/scope/edit-mode-hooks.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAA;IACnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,eAAe,CAC7B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,iBAAiB,CAOnB;AAID,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;EAUxD"}
1
+ {"version":3,"file":"edit-mode-hooks.d.ts","sourceRoot":"","sources":["../../src/scope/edit-mode-hooks.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAA;IACnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAwBD,wBAAgB,eAAe,CAC7B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,iBAAiB,CAYnB;AAID,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;EAUxD"}
@@ -1,11 +1,37 @@
1
1
  'use client';
2
- import { useState, useCallback } from 'react';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ const EDIT_PARAM = 'kywi-edit';
4
+ // Keep the `?kywi-edit=1` URL param mirroring edit-mode state. This is a plain
5
+ // `history.replaceState` (never a push — a UI-mode toggle isn't a new history
6
+ // entry, and this deliberately bypasses next/navigation's router so it can't
7
+ // trigger a server round-trip): entering edit mode adds the param so a reload
8
+ // or a shared link lands straight back in the editor; leaving removes it. A
9
+ // deep link that opened straight into edit mode (the param already present)
10
+ // is a no-op here — nothing to reconcile.
11
+ function syncEditModeParam(isEditMode) {
12
+ if (typeof window === 'undefined')
13
+ return;
14
+ const url = new URL(window.location.href);
15
+ const hasParam = url.searchParams.get(EDIT_PARAM) === '1';
16
+ if (isEditMode === hasParam)
17
+ return;
18
+ if (isEditMode) {
19
+ url.searchParams.set(EDIT_PARAM, '1');
20
+ }
21
+ else {
22
+ url.searchParams.delete(EDIT_PARAM);
23
+ }
24
+ window.history.replaceState(window.history.state, '', url.toString());
25
+ }
3
26
  export function useKywiEditMode(opts = {}) {
4
27
  const { canEdit = false, canPublish = false } = opts;
5
28
  const [isEditMode, setIsEditMode] = useState(false);
6
29
  const toggleEdit = useCallback(() => setIsEditMode(prev => !prev), []);
7
30
  const startEdit = useCallback(() => setIsEditMode(true), []);
8
31
  const endEdit = useCallback(() => setIsEditMode(false), []);
32
+ useEffect(() => {
33
+ syncEditModeParam(isEditMode);
34
+ }, [isEditMode]);
9
35
  return { isEditMode, canEdit, canPublish, toggleEdit, startEdit, endEdit };
10
36
  }
11
37
  // ─── useKywiInlineEdit ────────────────────────────────────────────────────────