@powerhousedao/reactor-api 6.0.0-dev.2 → 6.0.0-dev.21

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 (58) hide show
  1. package/dist/src/graphql/graphql-manager.d.ts +2 -1
  2. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  3. package/dist/src/graphql/graphql-manager.js +19 -2
  4. package/dist/src/graphql/graphql-manager.js.map +1 -1
  5. package/dist/src/graphql/reactor/adapters.d.ts +10 -2
  6. package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
  7. package/dist/src/graphql/reactor/adapters.js +34 -0
  8. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  9. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  10. package/dist/src/graphql/reactor/gen/graphql.d.ts +36 -4
  11. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  12. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  13. package/dist/src/graphql/reactor/resolvers.d.ts +17 -1
  14. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  15. package/dist/src/graphql/reactor/resolvers.js +53 -28
  16. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  17. package/dist/src/graphql/reactor/schema.graphql +33 -30
  18. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  19. package/dist/src/graphql/reactor/subgraph.js +21 -0
  20. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  21. package/dist/src/packages/import-loader.d.ts +3 -1
  22. package/dist/src/packages/import-loader.d.ts.map +1 -1
  23. package/dist/src/packages/import-loader.js +19 -10
  24. package/dist/src/packages/import-loader.js.map +1 -1
  25. package/dist/src/packages/types.d.ts +4 -0
  26. package/dist/src/packages/types.d.ts.map +1 -1
  27. package/dist/src/packages/util.d.ts +2 -1
  28. package/dist/src/packages/util.d.ts.map +1 -1
  29. package/dist/src/packages/util.js.map +1 -1
  30. package/dist/src/packages/vite-loader.d.ts +4 -3
  31. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  32. package/dist/src/packages/vite-loader.js +21 -8
  33. package/dist/src/packages/vite-loader.js.map +1 -1
  34. package/dist/src/server.d.ts +9 -6
  35. package/dist/src/server.d.ts.map +1 -1
  36. package/dist/src/server.js +104 -40
  37. package/dist/src/server.js.map +1 -1
  38. package/dist/src/types.d.ts +1 -1
  39. package/dist/src/types.d.ts.map +1 -1
  40. package/dist/src/utils/create-schema.d.ts.map +1 -1
  41. package/dist/src/utils/create-schema.js +54 -7
  42. package/dist/src/utils/create-schema.js.map +1 -1
  43. package/dist/src/utils/drive-url.d.ts +2 -0
  44. package/dist/src/utils/drive-url.d.ts.map +1 -0
  45. package/dist/src/utils/drive-url.js +3 -0
  46. package/dist/src/utils/drive-url.js.map +1 -0
  47. package/dist/src/utils/index.d.ts +1 -0
  48. package/dist/src/utils/index.d.ts.map +1 -1
  49. package/dist/src/utils/index.js +1 -0
  50. package/dist/src/utils/index.js.map +1 -1
  51. package/dist/test/two-reactor-gql-catchup-duplicate.test.d.ts +2 -0
  52. package/dist/test/two-reactor-gql-catchup-duplicate.test.d.ts.map +1 -0
  53. package/dist/test/two-reactor-gql-catchup-duplicate.test.js +264 -0
  54. package/dist/test/two-reactor-gql-catchup-duplicate.test.js.map +1 -0
  55. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
  56. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  57. package/dist/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +8 -9
@@ -0,0 +1,264 @@
1
+ import { CompositeChannelFactory, ConsoleLogger, driveCollectionId, JobStatus, OperationEventTypes, ReactorBuilder, SyncBuilder, } from "@powerhousedao/reactor";
2
+ import { driveDocumentModelModule } from "document-drive";
3
+ import { documentModelDocumentModelModule, } from "document-model";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { createResolverBridge } from "./utils/gql-resolver-bridge.js";
6
+ async function waitForJobCompletion(reactor, jobId, timeoutMs = 5000) {
7
+ const startTime = Date.now();
8
+ while (Date.now() - startTime < timeoutMs) {
9
+ const status = await reactor.getJobStatus(jobId);
10
+ if (status.status === JobStatus.READ_MODELS_READY) {
11
+ return;
12
+ }
13
+ if (status.status === JobStatus.FAILED) {
14
+ throw new Error(`Job failed: ${status.error?.message || "Unknown"}`);
15
+ }
16
+ await new Promise((resolve) => setTimeout(resolve, 50));
17
+ }
18
+ throw new Error(`Job did not complete within ${timeoutMs}ms`);
19
+ }
20
+ async function waitForOperationsReady(eventBus, documentId, timeoutMs = 5000) {
21
+ return new Promise((resolve, reject) => {
22
+ const timeout = setTimeout(() => {
23
+ unsubscribe();
24
+ reject(new Error(`OPERATIONS_READY event for document ${documentId} not received within ${timeoutMs}ms`));
25
+ }, timeoutMs);
26
+ const unsubscribe = eventBus.subscribe(OperationEventTypes.OPERATIONS_READY, (type, event) => {
27
+ const hasDocument = event.operations.some((op) => op.context.documentId === documentId);
28
+ if (hasDocument) {
29
+ clearTimeout(timeout);
30
+ unsubscribe();
31
+ resolve();
32
+ }
33
+ });
34
+ });
35
+ }
36
+ /**
37
+ * Creates a unique key for an operation using id + index + skip.
38
+ * Per deriveOperationId, the same operation ID can appear with different index values.
39
+ * A true duplicate is identified by the combination of id + index + skip.
40
+ */
41
+ function createOperationKey(op) {
42
+ return `${op.operation.id}:${op.operation.index}:${op.operation.skip}`;
43
+ }
44
+ /**
45
+ * Creates a collector that subscribes to OPERATIONS_READY events and tracks
46
+ * operations for a specific document, detecting duplicates.
47
+ */
48
+ function collectOperationsReady(eventBus, documentId, timeoutMs = 10000) {
49
+ const operationKeys = new Set();
50
+ const allOperations = [];
51
+ const duplicates = [];
52
+ let waitResolve = null;
53
+ let waitCount = 0;
54
+ const unsubscribe = eventBus.subscribe(OperationEventTypes.OPERATIONS_READY, (type, event) => {
55
+ for (const op of event.operations) {
56
+ if (op.context.documentId !== documentId) {
57
+ continue;
58
+ }
59
+ const key = createOperationKey(op);
60
+ allOperations.push(op);
61
+ if (operationKeys.has(key)) {
62
+ duplicates.push(op);
63
+ }
64
+ else {
65
+ operationKeys.add(key);
66
+ }
67
+ }
68
+ if (waitResolve && allOperations.length >= waitCount) {
69
+ waitResolve();
70
+ waitResolve = null;
71
+ }
72
+ });
73
+ return {
74
+ operationKeys,
75
+ allOperations,
76
+ duplicates,
77
+ waitForCount: (count) => {
78
+ if (allOperations.length >= count) {
79
+ return Promise.resolve();
80
+ }
81
+ waitCount = count;
82
+ return new Promise((resolve, reject) => {
83
+ waitResolve = resolve;
84
+ setTimeout(() => {
85
+ if (waitResolve) {
86
+ waitResolve = null;
87
+ reject(new Error(`Expected ${count} operations but received ${allOperations.length} within ${timeoutMs}ms`));
88
+ }
89
+ }, timeoutMs);
90
+ });
91
+ },
92
+ stop: () => {
93
+ unsubscribe();
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Creates a collector that subscribes to JOB_FAILED events and tracks failures
99
+ * that indicate duplicate operations (document already exists errors).
100
+ */
101
+ function collectDuplicateFailures(eventBus) {
102
+ const failures = [];
103
+ const unsubscribe = eventBus.subscribe(OperationEventTypes.JOB_FAILED, (type, event) => {
104
+ if (event.error.message.includes("already exists")) {
105
+ failures.push(event);
106
+ }
107
+ });
108
+ return {
109
+ failures,
110
+ stop: () => {
111
+ unsubscribe();
112
+ },
113
+ };
114
+ }
115
+ async function setupTwoReactors() {
116
+ const syncManagerRegistry = new Map();
117
+ const resolverBridge = createResolverBridge(syncManagerRegistry);
118
+ const logger = new ConsoleLogger(["test"]);
119
+ const channelFactoryA = new CompositeChannelFactory(logger);
120
+ const channelFactoryB = new CompositeChannelFactory(logger);
121
+ const models = [
122
+ driveDocumentModelModule,
123
+ documentModelDocumentModelModule,
124
+ ];
125
+ const reactorAModule = await new ReactorBuilder()
126
+ .withDocumentModels(models)
127
+ .withSync(new SyncBuilder().withChannelFactory(channelFactoryA))
128
+ .buildModule();
129
+ const reactorA = reactorAModule.reactor;
130
+ const eventBusA = reactorAModule.eventBus;
131
+ const syncManagerA = reactorAModule.syncModule.syncManager;
132
+ const reactorBModule = await new ReactorBuilder()
133
+ .withDocumentModels(models)
134
+ .withSync(new SyncBuilder().withChannelFactory(channelFactoryB))
135
+ .buildModule();
136
+ const reactorB = reactorBModule.reactor;
137
+ const eventBusB = reactorBModule.eventBus;
138
+ const syncManagerB = reactorBModule.syncModule.syncManager;
139
+ syncManagerRegistry.set("reactora", syncManagerA);
140
+ syncManagerRegistry.set("reactorb", syncManagerB);
141
+ return {
142
+ reactorA,
143
+ reactorB,
144
+ eventBusA,
145
+ eventBusB,
146
+ syncManagerA,
147
+ syncManagerB,
148
+ resolverBridge,
149
+ };
150
+ }
151
+ describe("Two-Reactor GQL Catchup Duplicate Operations Bug", () => {
152
+ let reactorA;
153
+ let reactorB;
154
+ let eventBusA;
155
+ let eventBusB;
156
+ let syncManagerA;
157
+ let resolverBridge;
158
+ beforeEach(async () => {
159
+ const setup = await setupTwoReactors();
160
+ reactorA = setup.reactorA;
161
+ reactorB = setup.reactorB;
162
+ eventBusA = setup.eventBusA;
163
+ eventBusB = setup.eventBusB;
164
+ syncManagerA = setup.syncManagerA;
165
+ resolverBridge = setup.resolverBridge;
166
+ });
167
+ afterEach(() => {
168
+ reactorA.kill();
169
+ reactorB.kill();
170
+ });
171
+ it("should not produce duplicate operations when remote is removed and re-added", async () => {
172
+ const driveDocument = driveDocumentModelModule.utils.createDocument();
173
+ const collectionId = driveCollectionId("main", driveDocument.header.id);
174
+ const jobInfo = await reactorA.create(driveDocument);
175
+ await waitForJobCompletion(reactorA, jobInfo.id);
176
+ const gqlParamsToB = {
177
+ url: "http://reactorB/graphql",
178
+ pollIntervalMs: 100,
179
+ maxFailures: 10,
180
+ retryBaseDelayMs: 50,
181
+ fetchFn: resolverBridge,
182
+ };
183
+ const filter = {
184
+ documentId: [],
185
+ scope: [],
186
+ branch: "main",
187
+ };
188
+ const readyPromiseB = waitForOperationsReady(eventBusB, driveDocument.header.id);
189
+ await syncManagerA.add("remoteB", collectionId, { type: "gql", parameters: gqlParamsToB }, filter);
190
+ await readyPromiseB;
191
+ const resultA = await reactorA.getOperations(driveDocument.header.id, {
192
+ branch: "main",
193
+ });
194
+ const opsA = Object.values(resultA).flatMap((scope) => scope.results);
195
+ expect(opsA.length).toBeGreaterThan(0);
196
+ const resultB = await reactorB.getOperations(driveDocument.header.id, {
197
+ branch: "main",
198
+ });
199
+ const opsB = Object.values(resultB).flatMap((scope) => scope.results);
200
+ expect(opsB.length).toBe(opsA.length);
201
+ const operationCollector = collectOperationsReady(eventBusA, driveDocument.header.id, 15000);
202
+ const failureCollector = collectDuplicateFailures(eventBusA);
203
+ try {
204
+ await syncManagerA.remove("remoteB");
205
+ await new Promise((resolve) => setTimeout(resolve, 200));
206
+ await syncManagerA.add("remoteB", collectionId, { type: "gql", parameters: gqlParamsToB }, filter);
207
+ await new Promise((resolve) => setTimeout(resolve, 2000));
208
+ expect(operationCollector.duplicates.length, "Duplicate operations were received via OPERATIONS_READY events").toBe(0);
209
+ expect(failureCollector.failures.length, "Duplicate operations caused 'document already exists' failures - this indicates the catchup backfill bug").toBe(0);
210
+ }
211
+ finally {
212
+ operationCollector.stop();
213
+ failureCollector.stop();
214
+ }
215
+ }, 20000);
216
+ it("should not produce duplicate operations after multiple remove/re-add cycles", async () => {
217
+ const driveDocument = driveDocumentModelModule.utils.createDocument();
218
+ const collectionId = driveCollectionId("main", driveDocument.header.id);
219
+ const jobInfo = await reactorA.create(driveDocument);
220
+ await waitForJobCompletion(reactorA, jobInfo.id);
221
+ await reactorA.execute(driveDocument.header.id, "main", [
222
+ driveDocumentModelModule.actions.setDriveName({ name: "Test Drive" }),
223
+ driveDocumentModelModule.actions.addFolder({
224
+ id: "folder-1",
225
+ name: "Folder 1",
226
+ parentFolder: null,
227
+ }),
228
+ ]);
229
+ const gqlParamsToB = {
230
+ url: "http://reactorB/graphql",
231
+ pollIntervalMs: 100,
232
+ maxFailures: 10,
233
+ retryBaseDelayMs: 50,
234
+ fetchFn: resolverBridge,
235
+ };
236
+ const filter = {
237
+ documentId: [],
238
+ scope: [],
239
+ branch: "main",
240
+ };
241
+ const readyPromiseB = waitForOperationsReady(eventBusB, driveDocument.header.id);
242
+ await syncManagerA.add("remoteB", collectionId, { type: "gql", parameters: gqlParamsToB }, filter);
243
+ await readyPromiseB;
244
+ await new Promise((resolve) => setTimeout(resolve, 500));
245
+ const operationCollector = collectOperationsReady(eventBusA, driveDocument.header.id, 30000);
246
+ const failureCollector = collectDuplicateFailures(eventBusA);
247
+ try {
248
+ for (let cycle = 0; cycle < 3; cycle++) {
249
+ await syncManagerA.remove("remoteB");
250
+ await new Promise((resolve) => setTimeout(resolve, 200));
251
+ await syncManagerA.add("remoteB", collectionId, { type: "gql", parameters: gqlParamsToB }, filter);
252
+ await new Promise((resolve) => setTimeout(resolve, 1000));
253
+ }
254
+ await new Promise((resolve) => setTimeout(resolve, 2000));
255
+ expect(operationCollector.duplicates.length, "Duplicate operations were received via OPERATIONS_READY events").toBe(0);
256
+ expect(failureCollector.failures.length, "Duplicate operations caused 'document already exists' failures after 3 remove/re-add cycles - this indicates the catchup backfill bug").toBe(0);
257
+ }
258
+ finally {
259
+ operationCollector.stop();
260
+ failureCollector.stop();
261
+ }
262
+ }, 45000);
263
+ });
264
+ //# sourceMappingURL=two-reactor-gql-catchup-duplicate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-reactor-gql-catchup-duplicate.test.js","sourceRoot":"","sources":["../../test/two-reactor-gql-catchup-duplicate.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gql-resolver-bridge.d.ts","sourceRoot":"","sources":["../../../test/utils/gql-resolver-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AA8BrD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,GAChC,OAAO,KAAK,CAgFd"}
1
+ {"version":3,"file":"gql-resolver-bridge.d.ts","sourceRoot":"","sources":["../../../test/utils/gql-resolver-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AA8BrD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,GAChC,OAAO,KAAK,CAiFd"}
@@ -1 +1 @@
1
- {"version":3,"file":"gql-resolver-bridge.js","sourceRoot":"","sources":["../../../test/utils/gql-resolver-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,wCAAwC,CAAC;AAShD,SAAS,kBAAkB,CAAI,IAAO;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,GAAW,EACX,QAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAiC;IAEjC,OAAO,KAAK,EACV,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,GAAG,GAAG,KAAK,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YAChC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAmB,CAAC;QAC/D,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAGtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE/D,OAAO,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAmBtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE9D,OAAO,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAWtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE1D,OAAO,kBAAkB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"gql-resolver-bridge.js","sourceRoot":"","sources":["../../../test/utils/gql-resolver-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,wCAAwC,CAAC;AAShD,SAAS,kBAAkB,CAAI,IAAO;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,GAAW,EACX,QAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAiC;IAEjC,OAAO,KAAK,EACV,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,GAAG,GAAG,KAAK,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YAChC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAmB,CAAC;QAC/D,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAGtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE/D,OAAO,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAmBtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE9D,OAAO,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAYtB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAE1D,OAAO,kBAAkB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC"}