@ifc-lite/export 4.5.0 → 4.7.4

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 (208) hide show
  1. package/README.md +5 -5
  2. package/dist/appearance-dependencies.d.ts.map +1 -1
  3. package/dist/appearance-dependencies.js +1 -0
  4. package/dist/appearance-dependencies.js.map +1 -1
  5. package/dist/attribute-real-slots.d.ts.map +1 -1
  6. package/dist/attribute-real-slots.js +7 -1
  7. package/dist/attribute-real-slots.js.map +1 -1
  8. package/dist/attribute-slot-types.js +2 -2
  9. package/dist/attribute-slot-types.js.map +1 -1
  10. package/dist/demesh-prune.d.ts.map +1 -1
  11. package/dist/demesh-prune.js +1 -0
  12. package/dist/demesh-prune.js.map +1 -1
  13. package/dist/demesh-writer.d.ts.map +1 -1
  14. package/dist/demesh-writer.js +1 -0
  15. package/dist/demesh-writer.js.map +1 -1
  16. package/dist/effective-index.d.ts.map +1 -1
  17. package/dist/effective-index.js +2 -0
  18. package/dist/effective-index.js.map +1 -1
  19. package/dist/entity-iteration.d.ts.map +1 -1
  20. package/dist/entity-iteration.js +1 -0
  21. package/dist/entity-iteration.js.map +1 -1
  22. package/dist/entity-type-sets.js +2 -2
  23. package/dist/entity-type-sets.js.map +1 -1
  24. package/dist/generated/ifc4-required-slots.d.ts +17 -0
  25. package/dist/generated/ifc4-required-slots.d.ts.map +1 -0
  26. package/dist/generated/ifc4-required-slots.js +619 -0
  27. package/dist/generated/ifc4-required-slots.js.map +1 -0
  28. package/dist/georef-closure.d.ts.map +1 -1
  29. package/dist/georef-closure.js +5 -0
  30. package/dist/georef-closure.js.map +1 -1
  31. package/dist/ifc5-effective-rows.d.ts +16 -0
  32. package/dist/ifc5-effective-rows.d.ts.map +1 -0
  33. package/dist/ifc5-effective-rows.js +90 -0
  34. package/dist/ifc5-effective-rows.js.map +1 -0
  35. package/dist/ifc5-export-helpers.d.ts +19 -0
  36. package/dist/ifc5-export-helpers.d.ts.map +1 -1
  37. package/dist/ifc5-export-helpers.js +16 -0
  38. package/dist/ifc5-export-helpers.js.map +1 -1
  39. package/dist/ifc5-exporter.d.ts +9 -11
  40. package/dist/ifc5-exporter.d.ts.map +1 -1
  41. package/dist/ifc5-exporter.js +38 -95
  42. package/dist/ifc5-exporter.js.map +1 -1
  43. package/dist/ifc5-pset-properties.d.ts +61 -0
  44. package/dist/ifc5-pset-properties.d.ts.map +1 -0
  45. package/dist/ifc5-pset-properties.js +100 -0
  46. package/dist/ifc5-pset-properties.js.map +1 -0
  47. package/dist/ifc5-tree-scope.js +3 -0
  48. package/dist/ifc5-tree-scope.js.map +1 -1
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/lod0-generator.d.ts.map +1 -1
  54. package/dist/lod0-generator.js +2 -0
  55. package/dist/lod0-generator.js.map +1 -1
  56. package/dist/merged-context.d.ts.map +1 -1
  57. package/dist/merged-context.js +3 -0
  58. package/dist/merged-context.js.map +1 -1
  59. package/dist/merged-decomposition-parents.d.ts +99 -0
  60. package/dist/merged-decomposition-parents.d.ts.map +1 -0
  61. package/dist/merged-decomposition-parents.js +142 -0
  62. package/dist/merged-decomposition-parents.js.map +1 -0
  63. package/dist/merged-empty-containers-refs.d.ts +24 -0
  64. package/dist/merged-empty-containers-refs.d.ts.map +1 -0
  65. package/dist/merged-empty-containers-refs.js +126 -0
  66. package/dist/merged-empty-containers-refs.js.map +1 -0
  67. package/dist/merged-empty-containers.d.ts +31 -0
  68. package/dist/merged-empty-containers.d.ts.map +1 -1
  69. package/dist/merged-empty-containers.js +14 -123
  70. package/dist/merged-empty-containers.js.map +1 -1
  71. package/dist/merged-exporter.d.ts +7 -18
  72. package/dist/merged-exporter.d.ts.map +1 -1
  73. package/dist/merged-exporter.js +80 -70
  74. package/dist/merged-exporter.js.map +1 -1
  75. package/dist/merged-header.d.ts +11 -0
  76. package/dist/merged-header.d.ts.map +1 -0
  77. package/dist/merged-header.js +23 -0
  78. package/dist/merged-header.js.map +1 -0
  79. package/dist/nonrel-positional-ref-narrowing.d.ts +3 -0
  80. package/dist/nonrel-positional-ref-narrowing.d.ts.map +1 -0
  81. package/dist/nonrel-positional-ref-narrowing.js +194 -0
  82. package/dist/nonrel-positional-ref-narrowing.js.map +1 -0
  83. package/dist/nonrel-ref-list-types.d.ts +13 -0
  84. package/dist/nonrel-ref-list-types.d.ts.map +1 -0
  85. package/dist/nonrel-ref-list-types.js +162 -0
  86. package/dist/nonrel-ref-list-types.js.map +1 -0
  87. package/dist/parquet-created-entity-rows.d.ts +20 -0
  88. package/dist/parquet-created-entity-rows.d.ts.map +1 -0
  89. package/dist/parquet-created-entity-rows.js +40 -0
  90. package/dist/parquet-created-entity-rows.js.map +1 -0
  91. package/dist/parquet-exporter-ondemand.d.ts +3 -2
  92. package/dist/parquet-exporter-ondemand.d.ts.map +1 -1
  93. package/dist/parquet-exporter-ondemand.js +15 -6
  94. package/dist/parquet-exporter-ondemand.js.map +1 -1
  95. package/dist/parquet-exporter.d.ts +5 -12
  96. package/dist/parquet-exporter.d.ts.map +1 -1
  97. package/dist/parquet-exporter.js +57 -84
  98. package/dist/parquet-exporter.js.map +1 -1
  99. package/dist/parquet-relationship-rows.d.ts +11 -0
  100. package/dist/parquet-relationship-rows.d.ts.map +1 -0
  101. package/dist/parquet-relationship-rows.js +57 -0
  102. package/dist/parquet-relationship-rows.js.map +1 -0
  103. package/dist/parquet-spatial-rows.d.ts +14 -0
  104. package/dist/parquet-spatial-rows.d.ts.map +1 -0
  105. package/dist/parquet-spatial-rows.js +57 -0
  106. package/dist/parquet-spatial-rows.js.map +1 -0
  107. package/dist/reference-collector.d.ts +17 -1
  108. package/dist/reference-collector.d.ts.map +1 -1
  109. package/dist/reference-collector.js +30 -1
  110. package/dist/reference-collector.js.map +1 -1
  111. package/dist/registry-entity-names.d.ts +3 -0
  112. package/dist/registry-entity-names.d.ts.map +1 -0
  113. package/dist/registry-entity-names.js +38 -0
  114. package/dist/registry-entity-names.js.map +1 -0
  115. package/dist/relationship-slot-bounds.d.ts +14 -0
  116. package/dist/relationship-slot-bounds.d.ts.map +1 -0
  117. package/dist/relationship-slot-bounds.js +64 -0
  118. package/dist/relationship-slot-bounds.js.map +1 -0
  119. package/dist/retype.d.ts.map +1 -1
  120. package/dist/retype.js +5 -2
  121. package/dist/retype.js.map +1 -1
  122. package/dist/schema-conversion-loss-report.d.ts +97 -0
  123. package/dist/schema-conversion-loss-report.d.ts.map +1 -0
  124. package/dist/schema-conversion-loss-report.js +116 -0
  125. package/dist/schema-conversion-loss-report.js.map +1 -0
  126. package/dist/schema-converter-attr-remap.d.ts +8 -0
  127. package/dist/schema-converter-attr-remap.d.ts.map +1 -1
  128. package/dist/schema-converter-attr-remap.js +14 -1
  129. package/dist/schema-converter-attr-remap.js.map +1 -1
  130. package/dist/schema-converter-enums.d.ts +27 -0
  131. package/dist/schema-converter-enums.d.ts.map +1 -0
  132. package/dist/schema-converter-enums.js +117 -0
  133. package/dist/schema-converter-enums.js.map +1 -0
  134. package/dist/schema-converter-ifc4-slots.d.ts +36 -0
  135. package/dist/schema-converter-ifc4-slots.d.ts.map +1 -0
  136. package/dist/schema-converter-ifc4-slots.js +70 -0
  137. package/dist/schema-converter-ifc4-slots.js.map +1 -0
  138. package/dist/schema-converter.d.ts +41 -19
  139. package/dist/schema-converter.d.ts.map +1 -1
  140. package/dist/schema-converter.js +73 -42
  141. package/dist/schema-converter.js.map +1 -1
  142. package/dist/schema-enum-policy.d.ts +48 -0
  143. package/dist/schema-enum-policy.d.ts.map +1 -0
  144. package/dist/schema-enum-policy.js +26 -0
  145. package/dist/schema-enum-policy.js.map +1 -0
  146. package/dist/schema-untranslatable.d.ts +84 -2
  147. package/dist/schema-untranslatable.d.ts.map +1 -1
  148. package/dist/schema-untranslatable.js +98 -3
  149. package/dist/schema-untranslatable.js.map +1 -1
  150. package/dist/step-collection.js +1 -1
  151. package/dist/step-collection.js.map +1 -1
  152. package/dist/step-export-types.d.ts +13 -3
  153. package/dist/step-export-types.d.ts.map +1 -1
  154. package/dist/step-exporter.d.ts.map +1 -1
  155. package/dist/step-exporter.js +4 -2
  156. package/dist/step-exporter.js.map +1 -1
  157. package/dist/step-georeferencing.js +2 -0
  158. package/dist/step-georeferencing.js.map +1 -1
  159. package/dist/step-header.d.ts.map +1 -1
  160. package/dist/step-header.js +1 -0
  161. package/dist/step-header.js.map +1 -1
  162. package/dist/step-map-unit.d.ts.map +1 -1
  163. package/dist/step-map-unit.js +4 -0
  164. package/dist/step-map-unit.js.map +1 -1
  165. package/dist/step-overlay-entities.d.ts.map +1 -1
  166. package/dist/step-overlay-entities.js +5 -1
  167. package/dist/step-overlay-entities.js.map +1 -1
  168. package/dist/step-pass-builder.d.ts.map +1 -1
  169. package/dist/step-pass-builder.js +8 -1
  170. package/dist/step-pass-builder.js.map +1 -1
  171. package/dist/step-property-set-generators.d.ts.map +1 -1
  172. package/dist/step-property-set-generators.js +17 -0
  173. package/dist/step-property-set-generators.js.map +1 -1
  174. package/dist/step-property-set-index.d.ts +4 -10
  175. package/dist/step-property-set-index.d.ts.map +1 -1
  176. package/dist/step-property-set-index.js +52 -8
  177. package/dist/step-property-set-index.js.map +1 -1
  178. package/dist/step-property-set-readers.d.ts.map +1 -1
  179. package/dist/step-property-set-readers.js +4 -0
  180. package/dist/step-property-set-readers.js.map +1 -1
  181. package/dist/step-ref-scan.d.ts +6 -0
  182. package/dist/step-ref-scan.d.ts.map +1 -0
  183. package/dist/step-ref-scan.js +52 -0
  184. package/dist/step-ref-scan.js.map +1 -0
  185. package/dist/step-serialization.d.ts.map +1 -1
  186. package/dist/step-serialization.js +18 -2
  187. package/dist/step-serialization.js.map +1 -1
  188. package/dist/step-shared-atom-retention.d.ts +5 -0
  189. package/dist/step-shared-atom-retention.d.ts.map +1 -0
  190. package/dist/step-shared-atom-retention.js +60 -0
  191. package/dist/step-shared-atom-retention.js.map +1 -0
  192. package/dist/step-source-iteration.d.ts +1 -1
  193. package/dist/step-source-iteration.d.ts.map +1 -1
  194. package/dist/step-source-iteration.js +50 -45
  195. package/dist/step-source-iteration.js.map +1 -1
  196. package/dist/style-closure.d.ts.map +1 -1
  197. package/dist/style-closure.js +11 -0
  198. package/dist/style-closure.js.map +1 -1
  199. package/dist/subset-entity-reader.d.ts.map +1 -1
  200. package/dist/subset-entity-reader.js +3 -2
  201. package/dist/subset-entity-reader.js.map +1 -1
  202. package/dist/subset-roots.js +2 -2
  203. package/dist/subset-roots.js.map +1 -1
  204. package/package.json +11 -10
  205. package/dist/merged-rel-aggregates.d.ts +0 -63
  206. package/dist/merged-rel-aggregates.d.ts.map +0 -1
  207. package/dist/merged-rel-aggregates.js +0 -122
  208. package/dist/merged-rel-aggregates.js.map +0 -1
@@ -1,122 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- import { filterHiddenRefsFromRelationshipLine } from './reference-collector.js';
5
- /**
6
- * Skip IfcRelAggregates that become fully redundant after spatial
7
- * unification, and mark the individually-redundant members of ones only
8
- * PARTIALLY so for stripping.
9
- *
10
- * When Model2's `IfcRelAggregates(Project, (Site))` gets remapped to
11
- * `IfcRelAggregates(FirstProject, (FirstSite))`, it duplicates Model1's
12
- * existing relationship, causing viewers to show Site multiple times.
13
- *
14
- * An IfcRelAggregates is fully redundant (skipped entirely) when its
15
- * RelatingObject (attr 4) AND ALL its RelatedObjects (attr 5) remap to an
16
- * edge the primary model already declares. When only the RelatingObject and
17
- * SOME (not all) of its RelatedObjects have such a primary edge — e.g. Model2's Building
18
- * unifies with Model1's, and one of its two Storeys matches Model1's by
19
- * name while the other is new — the rel is genuinely needed for its new
20
- * member(s), but Model1's own relationship already lists the remapped
21
- * one(s) under the same (now-shared) RelatingObject: emitting them again
22
- * here would duplicate that membership. Those specific ids are recorded in
23
- * `relAggregateStrip` so {@link applyRelAggregateStrip} drops them from the
24
- * emitted RelatedObjects list, keeping only the genuinely new members.
25
- */
26
- export function skipRedundantRelAggregates(dataStore, sharedRemap, skipEntityIds, relAggregateStrip, primaryAggregatePairs, findEntitiesByType, extractStepAttribute) {
27
- for (const relId of findEntitiesByType(dataStore, 'IFCRELAGGREGATES')) {
28
- // RelatingObject is attr 4 — single #ref
29
- const relatingAttr = extractStepAttribute(relId, dataStore, 4);
30
- if (!relatingAttr)
31
- continue;
32
- const relatingRef = relatingAttr.match(/^#(\d+)$/);
33
- if (!relatingRef || !sharedRemap.has(parseInt(relatingRef[1], 10)))
34
- continue;
35
- // RelatedObjects is attr 5 — list of #refs like (#2,#3)
36
- const relatedAttr = extractStepAttribute(relId, dataStore, 5);
37
- if (!relatedAttr)
38
- continue;
39
- const refs = [];
40
- const refRegex = /#(\d+)/g;
41
- let m;
42
- while ((m = refRegex.exec(relatedAttr)) !== null) {
43
- refs.push(parseInt(m[1], 10));
44
- }
45
- if (refs.length === 0)
46
- continue;
47
- const remappedRelatingObject = sharedRemap.get(parseInt(relatingRef[1], 10));
48
- // An object identity match alone does not prove that the primary model
49
- // already owns this aggregation edge. Preserve a matched member when this
50
- // is the only relationship that establishes its parentage (#3550).
51
- const redundantRefs = refs.filter(ref => {
52
- const remappedRef = sharedRemap.get(ref);
53
- return remappedRef !== undefined && primaryAggregatePairs.has(aggregatePairKey(remappedRelatingObject, remappedRef));
54
- });
55
- if (redundantRefs.length === refs.length) {
56
- // Every edge already exists in the primary model — this rel is fully redundant.
57
- skipEntityIds.add(relId);
58
- }
59
- else if (redundantRefs.length > 0) {
60
- // Some, not all — keep the rel for its new member(s), but drop the
61
- // ones Model1's own relationship already aggregates.
62
- relAggregateStrip.set(relId, new Set(redundantRefs));
63
- }
64
- }
65
- }
66
- /** Encode one `RelatingObject → RelatedObject` aggregation edge for set lookup. */
67
- export function aggregatePairKey(relatingObjectId, relatedObjectId) {
68
- return `${relatingObjectId}:${relatedObjectId}`;
69
- }
70
- /**
71
- * Collect the aggregation edges actually declared by the primary model.
72
- *
73
- * A later model may unify both endpoint entities without the primary model
74
- * declaring their relationship. Callers use this set to distinguish a truly
75
- * duplicate edge from the only surviving statement of parentage.
76
- */
77
- export function collectRelAggregatePairs(dataStore, findEntitiesByType, extractStepAttribute, idOffset) {
78
- const pairs = new Set();
79
- for (const relId of findEntitiesByType(dataStore, 'IFCRELAGGREGATES')) {
80
- const relatingAttr = extractStepAttribute(relId, dataStore, 4);
81
- const relatingRef = relatingAttr?.match(/^#(\d+)$/);
82
- if (!relatingRef)
83
- continue;
84
- const relatedAttr = extractStepAttribute(relId, dataStore, 5);
85
- if (!relatedAttr)
86
- continue;
87
- const relatingId = parseInt(relatingRef[1], 10) + idOffset;
88
- const refRegex = /#(\d+)/g;
89
- let match;
90
- while ((match = refRegex.exec(relatedAttr)) !== null) {
91
- pairs.add(aggregatePairKey(relatingId, parseInt(match[1], 10) + idOffset));
92
- }
93
- }
94
- return pairs;
95
- }
96
- /**
97
- * Render-time counterpart of {@link skipRedundantRelAggregates}: drop
98
- * RelatedObjects members a partially redundant IFCRELAGGREGATES already
99
- * shares with the first model's OWN relationship to the same (now-unified)
100
- * RelatingObject. Reuses the same list/scalar-aware ref filter the
101
- * `visibleOnly`/deletion dangling-ref path uses. Must run in LOCAL id
102
- * space, before any id offset/remap — `localId` and the ids inside
103
- * `relAggregateStrip` are both local to the model being rendered.
104
- *
105
- * Returns `entityText` unchanged when `localId` has no strip entry, and
106
- * `null` when the filter would withhold the whole line — a strip set built
107
- * by {@link skipRedundantRelAggregates} is a strict subset of the
108
- * RelatedObjects list, so for well-formed input the filter only narrows,
109
- * but a degenerate file (a stripped member id that also appears as a
110
- * single-valued ref, e.g. self-aggregation) can null the line. The caller
111
- * must withhold it, like every other user of the filter: every edge the
112
- * line declared is already declared by the primary model, and emitting the
113
- * unfiltered bytes instead would reintroduce the duplicate membership this
114
- * module exists to remove.
115
- */
116
- export function applyRelAggregateStrip(entityText, localId, relAggregateStrip) {
117
- const toStrip = relAggregateStrip.get(localId);
118
- if (toStrip === undefined)
119
- return entityText;
120
- return filterHiddenRefsFromRelationshipLine(entityText, id => toStrip.has(id));
121
- }
122
- //# sourceMappingURL=merged-rel-aggregates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merged-rel-aggregates.js","sourceRoot":"","sources":["../src/merged-rel-aggregates.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,oCAAoC,EAAE,MAAM,0BAA0B,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAuB,EACvB,WAAgC,EAChC,aAA0B,EAC1B,iBAA2C,EAC3C,qBAA0C,EAC1C,kBAA4E,EAC5E,oBAAsG;IAEtG,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;QACtE,yCAAyC;QACzC,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY;YAAE,SAAS;QAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAAE,SAAS;QAE7E,wDAAwD;QACxD,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhC,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC;QAC9E,uEAAuE;QACvE,0EAA0E;QAC1E,mEAAmE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACtC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,WAAW,KAAK,SAAS,IAAI,qBAAqB,CAAC,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC,CAAC;QACvH,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,gFAAgF;YAChF,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,mEAAmE;YACnE,qDAAqD;YACrD,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,gBAAwB,EAAE,eAAuB;IAChF,OAAO,GAAG,gBAAgB,IAAI,eAAe,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAuB,EACvB,kBAA4E,EAC5E,oBAAsG,EACtG,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;QACtE,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC;QAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC;QAC3B,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,OAAe,EACf,iBAA2D;IAE3D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC7C,OAAO,oCAAoC,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC"}