@origintrail-official/dkg-node-ui 0.0.1-dev.1773506972.23bf9c0

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 (84) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +49 -0
  3. package/dist/api.d.ts +30 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +805 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/chat-assistant.d.ts +68 -0
  8. package/dist/chat-assistant.d.ts.map +1 -0
  9. package/dist/chat-assistant.js +663 -0
  10. package/dist/chat-assistant.js.map +1 -0
  11. package/dist/chat-memory.d.ts +171 -0
  12. package/dist/chat-memory.d.ts.map +1 -0
  13. package/dist/chat-memory.js +985 -0
  14. package/dist/chat-memory.js.map +1 -0
  15. package/dist/chat-persistence-queue.d.ts +67 -0
  16. package/dist/chat-persistence-queue.d.ts.map +1 -0
  17. package/dist/chat-persistence-queue.js +245 -0
  18. package/dist/chat-persistence-queue.js.map +1 -0
  19. package/dist/db.d.ts +402 -0
  20. package/dist/db.d.ts.map +1 -0
  21. package/dist/db.js +887 -0
  22. package/dist/db.js.map +1 -0
  23. package/dist/gelf-push-worker.d.ts +67 -0
  24. package/dist/gelf-push-worker.d.ts.map +1 -0
  25. package/dist/gelf-push-worker.js +147 -0
  26. package/dist/gelf-push-worker.js.map +1 -0
  27. package/dist/index.d.ts +20 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +12 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/llm/capability-resolver.d.ts +3 -0
  32. package/dist/llm/capability-resolver.d.ts.map +1 -0
  33. package/dist/llm/capability-resolver.js +21 -0
  34. package/dist/llm/capability-resolver.js.map +1 -0
  35. package/dist/llm/client.d.ts +23 -0
  36. package/dist/llm/client.d.ts.map +1 -0
  37. package/dist/llm/client.js +91 -0
  38. package/dist/llm/client.js.map +1 -0
  39. package/dist/llm/provider-adapter.d.ts +16 -0
  40. package/dist/llm/provider-adapter.d.ts.map +1 -0
  41. package/dist/llm/provider-adapter.js +199 -0
  42. package/dist/llm/provider-adapter.js.map +1 -0
  43. package/dist/llm/types.d.ts +64 -0
  44. package/dist/llm/types.d.ts.map +1 -0
  45. package/dist/llm/types.js +2 -0
  46. package/dist/llm/types.js.map +1 -0
  47. package/dist/metrics-collector.d.ts +36 -0
  48. package/dist/metrics-collector.d.ts.map +1 -0
  49. package/dist/metrics-collector.js +155 -0
  50. package/dist/metrics-collector.js.map +1 -0
  51. package/dist/operation-tracker.d.ts +43 -0
  52. package/dist/operation-tracker.d.ts.map +1 -0
  53. package/dist/operation-tracker.js +195 -0
  54. package/dist/operation-tracker.js.map +1 -0
  55. package/dist/structured-logger.d.ts +16 -0
  56. package/dist/structured-logger.d.ts.map +1 -0
  57. package/dist/structured-logger.js +41 -0
  58. package/dist/structured-logger.js.map +1 -0
  59. package/dist/telemetry.d.ts +35 -0
  60. package/dist/telemetry.d.ts.map +1 -0
  61. package/dist/telemetry.js +45 -0
  62. package/dist/telemetry.js.map +1 -0
  63. package/dist-ui/assets/3d-force-graph-nMUNmvtB.js +964 -0
  64. package/dist-ui/assets/AgentHub-XKCM9uYQ.js +65 -0
  65. package/dist-ui/assets/AppHost-DoLIi89g.js +1 -0
  66. package/dist-ui/assets/Apps-Cc8HfqfD.js +1 -0
  67. package/dist-ui/assets/Dashboard-D5q6MK78.js +2 -0
  68. package/dist-ui/assets/Explorer-B80RVksc.js +64 -0
  69. package/dist-ui/assets/N3Parser-Q_-1ZY5E.js +7 -0
  70. package/dist-ui/assets/Settings-CG7-7GM-.js +71 -0
  71. package/dist-ui/assets/hooks-BLTFNmyP.js +1 -0
  72. package/dist-ui/assets/index-8_35CUX2.js +192 -0
  73. package/dist-ui/assets/index-CKZq_ZB-.css +1 -0
  74. package/dist-ui/assets/index-DH-l6lM0.js +76 -0
  75. package/dist-ui/assets/jsonld-32FQRO67-DhbO8O6B.js +2 -0
  76. package/dist-ui/assets/jsonld-BFI4wECl.js +62 -0
  77. package/dist-ui/assets/ntriples-ZWBY2WET-nIpilpjf.js +1 -0
  78. package/dist-ui/assets/ordinal-DIohFSkg.js +1 -0
  79. package/dist-ui/assets/renderer-3d-2EVDZII7-DsxBsJvs.js +2 -0
  80. package/dist-ui/assets/three.module-uCjFke6H.js +4019 -0
  81. package/dist-ui/assets/turtle-JJPK7LJ5-zezDJZEp.js +1 -0
  82. package/dist-ui/favicon.png +0 -0
  83. package/dist-ui/index.html +14 -0
  84. package/package.json +58 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Records the lifecycle of node operations (publish, query, sync, etc.)
3
+ * in the dashboard SQLite database. If no DB is configured (e.g. in tests),
4
+ * all methods are no-ops.
5
+ */
6
+ export class OperationTracker {
7
+ db;
8
+ starts = new Map();
9
+ phaseStarts = new Map();
10
+ constructor(db) {
11
+ this.db = db;
12
+ }
13
+ start(ctx, meta) {
14
+ if (!this.db)
15
+ return;
16
+ const now = Date.now();
17
+ this.starts.set(ctx.operationId, now);
18
+ try {
19
+ this.db.insertOperation({
20
+ operation_id: ctx.operationId,
21
+ operation_name: ctx.operationName,
22
+ started_at: now,
23
+ peer_id: meta?.peerId,
24
+ paranet_id: meta?.paranetId,
25
+ details: meta?.details ? JSON.stringify(meta.details) : null,
26
+ });
27
+ }
28
+ catch {
29
+ // Must never break the node
30
+ }
31
+ }
32
+ complete(ctx, meta) {
33
+ if (!this.db)
34
+ return;
35
+ const startedAt = this.starts.get(ctx.operationId);
36
+ this.starts.delete(ctx.operationId);
37
+ try {
38
+ this.db.completeOperation({
39
+ operation_id: ctx.operationId,
40
+ duration_ms: startedAt ? Date.now() - startedAt : 0,
41
+ triple_count: meta?.tripleCount,
42
+ details: meta?.details ? JSON.stringify(meta.details) : null,
43
+ });
44
+ }
45
+ catch {
46
+ // Must never break the node
47
+ }
48
+ }
49
+ fail(ctx, err) {
50
+ if (!this.db)
51
+ return;
52
+ const now = Date.now();
53
+ const startedAt = this.starts.get(ctx.operationId);
54
+ this.starts.delete(ctx.operationId);
55
+ const message = err instanceof Error ? err.message : String(err);
56
+ try {
57
+ const prefix = ctx.operationId + ':';
58
+ const activeKeys = [...this.phaseStarts.keys()].filter(k => k.startsWith(prefix));
59
+ for (const key of activeKeys) {
60
+ const phase = key.slice(prefix.length);
61
+ const phaseStartedAt = this.phaseStarts.get(key);
62
+ this.phaseStarts.delete(key);
63
+ this.db.failPhase({
64
+ operation_id: ctx.operationId,
65
+ phase,
66
+ duration_ms: phaseStartedAt ? now - phaseStartedAt : 0,
67
+ error_message: message,
68
+ });
69
+ }
70
+ this.db.failOperation({
71
+ operation_id: ctx.operationId,
72
+ duration_ms: startedAt ? now - startedAt : 0,
73
+ error_message: message,
74
+ });
75
+ }
76
+ catch {
77
+ // Must never break the node
78
+ }
79
+ }
80
+ startPhase(ctx, phase) {
81
+ if (!this.db)
82
+ return;
83
+ const now = Date.now();
84
+ const key = `${ctx.operationId}:${phase}`;
85
+ this.phaseStarts.set(key, now);
86
+ try {
87
+ this.db.insertPhase({
88
+ operation_id: ctx.operationId,
89
+ phase,
90
+ started_at: now,
91
+ });
92
+ }
93
+ catch {
94
+ // Must never break the node
95
+ }
96
+ }
97
+ completePhase(ctx, phase) {
98
+ if (!this.db)
99
+ return;
100
+ const key = `${ctx.operationId}:${phase}`;
101
+ const startedAt = this.phaseStarts.get(key);
102
+ this.phaseStarts.delete(key);
103
+ try {
104
+ this.db.completePhase({
105
+ operation_id: ctx.operationId,
106
+ phase,
107
+ duration_ms: startedAt ? Date.now() - startedAt : 0,
108
+ });
109
+ }
110
+ catch {
111
+ // Must never break the node
112
+ }
113
+ }
114
+ setCost(ctx, cost) {
115
+ if (!this.db)
116
+ return;
117
+ try {
118
+ const gasPriceGwei = cost.gasPrice != null
119
+ ? Number(cost.gasPrice) / 1e9
120
+ : null;
121
+ const gasCostEth = cost.gasCost != null
122
+ ? Number(cost.gasCost) / 1e18
123
+ : null;
124
+ const tracCost = cost.tracCost != null
125
+ ? Number(cost.tracCost) / 1e18
126
+ : null;
127
+ this.db.setOperationCost({
128
+ operation_id: ctx.operationId,
129
+ gas_used: cost.gasUsed != null ? Number(cost.gasUsed) : null,
130
+ gas_price_gwei: gasPriceGwei,
131
+ gas_cost_eth: gasCostEth,
132
+ trac_cost: tracCost,
133
+ });
134
+ }
135
+ catch {
136
+ // Must never break the node
137
+ }
138
+ }
139
+ setTxHash(ctx, txHash, chainId) {
140
+ if (!this.db || !txHash)
141
+ return;
142
+ try {
143
+ this.db.setOperationCost({
144
+ operation_id: ctx.operationId,
145
+ tx_hash: txHash,
146
+ chain_id: chainId ?? null,
147
+ });
148
+ }
149
+ catch {
150
+ // Must never break the node
151
+ }
152
+ }
153
+ /**
154
+ * Execute `fn` as a tracked phase — no timing gaps, no forgotten end calls.
155
+ * On success completes the phase; on error fails the phase and re-throws.
156
+ */
157
+ async trackPhase(ctx, phase, fn) {
158
+ this.startPhase(ctx, phase);
159
+ try {
160
+ const result = await fn();
161
+ this.completePhase(ctx, phase);
162
+ return result;
163
+ }
164
+ catch (err) {
165
+ if (this.db) {
166
+ const key = `${ctx.operationId}:${phase}`;
167
+ const startedAt = this.phaseStarts.get(key);
168
+ this.phaseStarts.delete(key);
169
+ try {
170
+ this.db.failPhase({
171
+ operation_id: ctx.operationId,
172
+ phase,
173
+ duration_ms: startedAt ? Date.now() - startedAt : 0,
174
+ error_message: err instanceof Error ? err.message : String(err),
175
+ });
176
+ }
177
+ catch { /* never crash */ }
178
+ }
179
+ throw err;
180
+ }
181
+ }
182
+ /**
183
+ * Create an onPhase callback wired to this tracker instance.
184
+ * Pass this to DKGAgent/Publisher methods that accept `onPhase`.
185
+ */
186
+ phaseCallback(ctx) {
187
+ return (phase, status) => {
188
+ if (status === 'start')
189
+ this.startPhase(ctx, phase);
190
+ else
191
+ this.completePhase(ctx, phase);
192
+ };
193
+ }
194
+ }
195
+ //# sourceMappingURL=operation-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-tracker.js","sourceRoot":"","sources":["../src/operation-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Logger, type OperationContext } from '@origintrail-official/dkg-core';
2
+ import type { DashboardDB } from './db.js';
3
+ /**
4
+ * Drop-in replacement for Logger that also writes structured log
5
+ * entries to the dashboard SQLite database. Existing stdout/stderr
6
+ * output is preserved — the DB write is a side-effect.
7
+ */
8
+ export declare class StructuredLogger extends Logger {
9
+ private readonly db;
10
+ constructor(moduleName: string, db: DashboardDB);
11
+ info(ctx: OperationContext, message: string): void;
12
+ warn(ctx: OperationContext, message: string): void;
13
+ error(ctx: OperationContext, message: string): void;
14
+ private persist;
15
+ }
16
+ //# sourceMappingURL=structured-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-logger.d.ts","sourceRoot":"","sources":["../src/structured-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,MAAM;IAGxC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBADnB,UAAU,EAAE,MAAM,EACD,EAAE,EAAE,WAAW;IAKzB,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlD,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKlD,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5D,OAAO,CAAC,OAAO;CAchB"}
@@ -0,0 +1,41 @@
1
+ import { Logger } from '@origintrail-official/dkg-core';
2
+ /**
3
+ * Drop-in replacement for Logger that also writes structured log
4
+ * entries to the dashboard SQLite database. Existing stdout/stderr
5
+ * output is preserved — the DB write is a side-effect.
6
+ */
7
+ export class StructuredLogger extends Logger {
8
+ db;
9
+ constructor(moduleName, db) {
10
+ super(moduleName);
11
+ this.db = db;
12
+ }
13
+ info(ctx, message) {
14
+ super.info(ctx, message);
15
+ this.persist('info', ctx, message);
16
+ }
17
+ warn(ctx, message) {
18
+ super.warn(ctx, message);
19
+ this.persist('warn', ctx, message);
20
+ }
21
+ error(ctx, message) {
22
+ super.error(ctx, message);
23
+ this.persist('error', ctx, message);
24
+ }
25
+ persist(level, ctx, message) {
26
+ try {
27
+ this.db.insertLog({
28
+ ts: Date.now(),
29
+ level,
30
+ operation_name: ctx.operationName,
31
+ operation_id: ctx.operationId,
32
+ module: this.moduleName ?? 'unknown',
33
+ message,
34
+ });
35
+ }
36
+ catch {
37
+ // DB write failures must never break the node
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=structured-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-logger.js","sourceRoot":"","sources":["../src/structured-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAyB,MAAM,gCAAgC,CAAC;AAG/E;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,MAAM;IAGvB;IAFnB,YACE,UAAkB,EACD,EAAe;QAEhC,KAAK,CAAC,UAAU,CAAC,CAAC;QAFD,OAAE,GAAF,EAAE,CAAa;IAGlC,CAAC;IAEQ,IAAI,CAAC,GAAqB,EAAE,OAAe;QAClD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEQ,IAAI,CAAC,GAAqB,EAAE,OAAe;QAClD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEQ,KAAK,CAAC,GAAqB,EAAE,OAAe;QACnD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAEO,OAAO,CAAC,KAAa,EAAE,GAAqB,EAAE,OAAe;QACnE,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;gBAChB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,KAAK;gBACL,cAAc,EAAE,GAAG,CAAC,aAAa;gBACjC,YAAY,EAAE,GAAG,CAAC,WAAW;gBAC7B,MAAM,EAAG,IAAY,CAAC,UAAU,IAAI,SAAS;gBAC7C,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Optional OpenTelemetry integration for the Node UI.
3
+ * When enabled (via config), exports metrics and optionally traces to an OTLP endpoint.
4
+ * operationId is set as the trace/span attribute for correlation with the dashboard.
5
+ *
6
+ * To enable: add @opentelemetry/api, @opentelemetry/sdk-metrics, and
7
+ * @opentelemetry/exporter-metrics-otlp-http; then implement registerMeter() and
8
+ * use the same metric names below. For traces, use @opentelemetry/sdk-trace-base
9
+ * and set span attributes { 'dkg.operation_id': operationId }.
10
+ */
11
+ export interface TelemetryConfig {
12
+ enabled?: boolean;
13
+ /** OTLP HTTP endpoint for metrics (e.g. http://localhost:4318/v1/metrics) */
14
+ metricsEndpoint?: string;
15
+ /** Service name for resource attributes */
16
+ serviceName?: string;
17
+ }
18
+ /**
19
+ * Initialize telemetry. No-op if disabled or OTel packages not installed.
20
+ * Call once at daemon startup.
21
+ */
22
+ export declare function initTelemetry(_config: TelemetryConfig): void;
23
+ /**
24
+ * Record a gauge value for export. No-op when telemetry is disabled.
25
+ * Metric names match dashboard: dkg.network.peers, dkg.knowledge.triples, dkg.system.cpu_percent, etc.
26
+ */
27
+ export declare function recordGauge(_name: string, _value: number): void;
28
+ /**
29
+ * Start a span for an operation (for trace correlation).
30
+ * operationId should be set as span attribute so traces match the Operations panel.
31
+ * No-op when telemetry is disabled.
32
+ */
33
+ export declare function setOperationSpan(_operationId: string, _operationName: string): void;
34
+ export declare function isTelemetryConfigured(): boolean;
35
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAK5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAGnF;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Optional OpenTelemetry integration for the Node UI.
3
+ * When enabled (via config), exports metrics and optionally traces to an OTLP endpoint.
4
+ * operationId is set as the trace/span attribute for correlation with the dashboard.
5
+ *
6
+ * To enable: add @opentelemetry/api, @opentelemetry/sdk-metrics, and
7
+ * @opentelemetry/exporter-metrics-otlp-http; then implement registerMeter() and
8
+ * use the same metric names below. For traces, use @opentelemetry/sdk-trace-base
9
+ * and set span attributes { 'dkg.operation_id': operationId }.
10
+ */
11
+ let configured = false;
12
+ /**
13
+ * Initialize telemetry. No-op if disabled or OTel packages not installed.
14
+ * Call once at daemon startup.
15
+ */
16
+ export function initTelemetry(_config) {
17
+ if (!_config.enabled || !_config.metricsEndpoint)
18
+ return;
19
+ configured = true;
20
+ // When OTel is added: create MeterProvider, OTLP exporter, register gauges
21
+ // meter.createObservableGauge('dkg.network.peers', ...), etc.
22
+ }
23
+ /**
24
+ * Record a gauge value for export. No-op when telemetry is disabled.
25
+ * Metric names match dashboard: dkg.network.peers, dkg.knowledge.triples, dkg.system.cpu_percent, etc.
26
+ */
27
+ export function recordGauge(_name, _value) {
28
+ if (!configured)
29
+ return;
30
+ // When OTel is added: update the observable gauge callback or record value
31
+ }
32
+ /**
33
+ * Start a span for an operation (for trace correlation).
34
+ * operationId should be set as span attribute so traces match the Operations panel.
35
+ * No-op when telemetry is disabled.
36
+ */
37
+ export function setOperationSpan(_operationId, _operationName) {
38
+ if (!configured)
39
+ return;
40
+ // When OTel is added: tracer.startSpan(operationName, { attributes: { 'dkg.operation_id': operationId } })
41
+ }
42
+ export function isTelemetryConfigured() {
43
+ return configured;
44
+ }
45
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAwB;IACpD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO;IACzD,UAAU,GAAG,IAAI,CAAC;IAClB,2EAA2E;IAC3E,8DAA8D;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAAc;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,2EAA2E;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,cAAsB;IAC3E,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,2GAA2G;AAC7G,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC"}