@claude-flow/plugin-code-intelligence 3.0.0-alpha.1

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.
@@ -0,0 +1,481 @@
1
+ /**
2
+ * MinCut Bridge for Module Splitting
3
+ *
4
+ * Provides graph min-cut operations for optimal module boundary detection
5
+ * using ruvector-mincut-wasm for high-performance graph partitioning.
6
+ *
7
+ * Features:
8
+ * - Optimal module boundary detection
9
+ * - Multi-way graph partitioning
10
+ * - Constraint-aware splitting
11
+ * - Cut weight optimization
12
+ *
13
+ * Based on ADR-035: Advanced Code Intelligence Plugin
14
+ *
15
+ * @module v3/plugins/code-intelligence/bridges/mincut-bridge
16
+ */
17
+ /**
18
+ * MinCut Bridge Implementation
19
+ */
20
+ export class MinCutBridge {
21
+ // WASM module for future performance optimization (currently uses JS fallback)
22
+ wasmModule = null;
23
+ initialized = false;
24
+ /**
25
+ * Initialize the WASM module
26
+ */
27
+ async initialize() {
28
+ if (this.initialized)
29
+ return;
30
+ try {
31
+ // Dynamic import of WASM module
32
+ this.wasmModule = await this.loadWasmModule();
33
+ this.initialized = true;
34
+ }
35
+ catch {
36
+ // Fallback to pure JS implementation
37
+ console.warn('WASM MinCut module not available, using JS fallback');
38
+ this.wasmModule = null;
39
+ this.initialized = true;
40
+ }
41
+ }
42
+ /**
43
+ * Check if initialized
44
+ */
45
+ isInitialized() {
46
+ return this.initialized;
47
+ }
48
+ /**
49
+ * Find optimal module boundaries using MinCut
50
+ */
51
+ async findOptimalCuts(graph, numModules, constraints) {
52
+ if (!this.initialized) {
53
+ await this.initialize();
54
+ }
55
+ const partition = new Map();
56
+ const nodeCount = graph.nodes.length;
57
+ if (nodeCount === 0 || numModules < 2) {
58
+ // All nodes in single partition
59
+ for (const node of graph.nodes) {
60
+ partition.set(node.id, 0);
61
+ }
62
+ return partition;
63
+ }
64
+ // Create node lookup
65
+ const nodeMap = new Map();
66
+ const indexMap = new Map();
67
+ graph.nodes.forEach((node, index) => {
68
+ nodeMap.set(node.id, index);
69
+ indexMap.set(index, node.id);
70
+ });
71
+ // Apply constraints for preserved boundaries
72
+ const fixed = new Map();
73
+ if (constraints.preserveBoundaries) {
74
+ for (let i = 0; i < constraints.preserveBoundaries.length && i < numModules; i++) {
75
+ const boundary = constraints.preserveBoundaries[i];
76
+ if (boundary) {
77
+ const nodeIdx = nodeMap.get(boundary);
78
+ if (nodeIdx !== undefined) {
79
+ fixed.set(nodeIdx, i);
80
+ }
81
+ }
82
+ }
83
+ }
84
+ // Build adjacency matrix with weights
85
+ const weights = Array.from({ length: nodeCount }, () => Array(nodeCount).fill(0));
86
+ for (const edge of graph.edges) {
87
+ const fromIdx = nodeMap.get(edge.from);
88
+ const toIdx = nodeMap.get(edge.to);
89
+ if (fromIdx !== undefined && toIdx !== undefined) {
90
+ weights[fromIdx][toIdx] = edge.weight;
91
+ weights[toIdx][fromIdx] = edge.weight; // Symmetric for partitioning
92
+ }
93
+ }
94
+ // Use spectral partitioning (JS fallback)
95
+ const partitionArray = this.spectralPartition(weights, numModules, fixed, constraints);
96
+ // Convert to map
97
+ for (let i = 0; i < nodeCount; i++) {
98
+ const nodeId = indexMap.get(i);
99
+ const part = partitionArray[i];
100
+ if (nodeId && part !== undefined) {
101
+ partition.set(nodeId, part);
102
+ }
103
+ }
104
+ // Apply keepTogether constraints
105
+ if (constraints.keepTogether) {
106
+ for (const group of constraints.keepTogether) {
107
+ if (group.length > 0) {
108
+ const firstIdx = nodeMap.get(group[0] ?? '');
109
+ const firstPart = firstIdx !== undefined ? partitionArray[firstIdx] : undefined;
110
+ if (firstPart !== undefined) {
111
+ for (const nodeId of group) {
112
+ partition.set(nodeId, firstPart);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ return partition;
119
+ }
120
+ /**
121
+ * Calculate cut weight for a given partition
122
+ */
123
+ async calculateCutWeight(graph, partition) {
124
+ if (!this.initialized) {
125
+ await this.initialize();
126
+ }
127
+ let cutWeight = 0;
128
+ for (const edge of graph.edges) {
129
+ const fromPart = partition.get(edge.from);
130
+ const toPart = partition.get(edge.to);
131
+ if (fromPart !== undefined && toPart !== undefined && fromPart !== toPart) {
132
+ cutWeight += edge.weight;
133
+ }
134
+ }
135
+ return cutWeight;
136
+ }
137
+ /**
138
+ * Find minimum s-t cut
139
+ */
140
+ async minSTCut(graph, source, sink) {
141
+ if (!this.initialized) {
142
+ await this.initialize();
143
+ }
144
+ const nodeCount = graph.nodes.length;
145
+ // Create node lookup
146
+ const nodeMap = new Map();
147
+ const indexMap = new Map();
148
+ graph.nodes.forEach((node, index) => {
149
+ nodeMap.set(node.id, index);
150
+ indexMap.set(index, node.id);
151
+ });
152
+ const sourceIdx = nodeMap.get(source);
153
+ const sinkIdx = nodeMap.get(sink);
154
+ if (sourceIdx === undefined || sinkIdx === undefined) {
155
+ return {
156
+ cutValue: 0,
157
+ cutEdges: [],
158
+ sourceSet: [],
159
+ sinkSet: graph.nodes.map(n => n.id),
160
+ };
161
+ }
162
+ // Build capacity matrix
163
+ const capacity = Array.from({ length: nodeCount }, () => Array(nodeCount).fill(0));
164
+ for (const edge of graph.edges) {
165
+ const fromIdx = nodeMap.get(edge.from);
166
+ const toIdx = nodeMap.get(edge.to);
167
+ if (fromIdx !== undefined && toIdx !== undefined) {
168
+ capacity[fromIdx][toIdx] = edge.weight;
169
+ }
170
+ }
171
+ // Ford-Fulkerson with BFS (Edmonds-Karp)
172
+ const { maxFlow, residual } = this.edmondsKarp(capacity, sourceIdx, sinkIdx);
173
+ // Find source set using BFS on residual graph
174
+ const sourceSet = new Set();
175
+ const queue = [sourceIdx];
176
+ sourceSet.add(sourceIdx);
177
+ while (queue.length > 0) {
178
+ const current = queue.shift();
179
+ for (let next = 0; next < nodeCount; next++) {
180
+ if (!sourceSet.has(next) && (residual[current]?.[next] ?? 0) > 0) {
181
+ sourceSet.add(next);
182
+ queue.push(next);
183
+ }
184
+ }
185
+ }
186
+ // Find cut edges
187
+ const cutEdges = [];
188
+ for (const edge of graph.edges) {
189
+ const fromIdx = nodeMap.get(edge.from);
190
+ const toIdx = nodeMap.get(edge.to);
191
+ if (fromIdx !== undefined && toIdx !== undefined) {
192
+ if (sourceSet.has(fromIdx) && !sourceSet.has(toIdx)) {
193
+ cutEdges.push({ from: edge.from, to: edge.to });
194
+ }
195
+ }
196
+ }
197
+ // Convert sets to arrays
198
+ const sourceSetNodes = [];
199
+ const sinkSetNodes = [];
200
+ for (let i = 0; i < nodeCount; i++) {
201
+ const nodeId = indexMap.get(i);
202
+ if (nodeId) {
203
+ if (sourceSet.has(i)) {
204
+ sourceSetNodes.push(nodeId);
205
+ }
206
+ else {
207
+ sinkSetNodes.push(nodeId);
208
+ }
209
+ }
210
+ }
211
+ return {
212
+ cutValue: maxFlow,
213
+ cutEdges,
214
+ sourceSet: sourceSetNodes,
215
+ sinkSet: sinkSetNodes,
216
+ };
217
+ }
218
+ /**
219
+ * Multi-way cut for module splitting
220
+ */
221
+ async multiWayCut(graph, terminals, _weights) {
222
+ if (!this.initialized) {
223
+ await this.initialize();
224
+ }
225
+ const numTerminals = terminals.length;
226
+ if (numTerminals < 2) {
227
+ const partitions = new Map();
228
+ for (const node of graph.nodes) {
229
+ partitions.set(node.id, 0);
230
+ }
231
+ return { cutValue: 0, partitions };
232
+ }
233
+ // Create node lookup
234
+ const nodeMap = new Map();
235
+ graph.nodes.forEach((node, index) => {
236
+ nodeMap.set(node.id, index);
237
+ });
238
+ // Get terminal indices
239
+ const terminalIndices = terminals
240
+ .map(t => nodeMap.get(t))
241
+ .filter((idx) => idx !== undefined);
242
+ if (terminalIndices.length < 2) {
243
+ const partitions = new Map();
244
+ for (const node of graph.nodes) {
245
+ partitions.set(node.id, 0);
246
+ }
247
+ return { cutValue: 0, partitions };
248
+ }
249
+ // Use isolating cuts algorithm
250
+ // Assign each node to the nearest terminal
251
+ const partitions = new Map();
252
+ const distances = this.computeDistances(graph, terminalIndices, nodeMap);
253
+ for (const node of graph.nodes) {
254
+ const nodeIdx = nodeMap.get(node.id);
255
+ if (nodeIdx === undefined)
256
+ continue;
257
+ let minDist = Infinity;
258
+ let minTerminal = 0;
259
+ for (let t = 0; t < terminalIndices.length; t++) {
260
+ const dist = distances.get(`${nodeIdx}-${t}`) ?? Infinity;
261
+ if (dist < minDist) {
262
+ minDist = dist;
263
+ minTerminal = t;
264
+ }
265
+ }
266
+ partitions.set(node.id, minTerminal);
267
+ }
268
+ // Calculate cut value
269
+ const cutValue = await this.calculateCutWeight(graph, partitions);
270
+ return { cutValue, partitions };
271
+ }
272
+ // ============================================================================
273
+ // Private Helper Methods
274
+ // ============================================================================
275
+ /**
276
+ * Load WASM module dynamically
277
+ */
278
+ async loadWasmModule() {
279
+ throw new Error('WASM module loading not implemented');
280
+ }
281
+ /**
282
+ * Spectral partitioning using Fiedler vector
283
+ */
284
+ spectralPartition(weights, numPartitions, fixed, _constraints) {
285
+ const n = weights.length;
286
+ const partition = new Array(n).fill(0);
287
+ if (n === 0)
288
+ return partition;
289
+ // Apply fixed partitions
290
+ for (const [node, part] of fixed) {
291
+ partition[node] = part;
292
+ }
293
+ // If all fixed, return
294
+ if (fixed.size >= n)
295
+ return partition;
296
+ // Compute Laplacian
297
+ const laplacian = Array.from({ length: n }, () => Array(n).fill(0));
298
+ for (let i = 0; i < n; i++) {
299
+ let degree = 0;
300
+ for (let j = 0; j < n; j++) {
301
+ if (i !== j) {
302
+ const w = (weights[i]?.[j] ?? 0) + (weights[j]?.[i] ?? 0);
303
+ laplacian[i][j] = -w;
304
+ degree += w;
305
+ }
306
+ }
307
+ laplacian[i][i] = degree;
308
+ }
309
+ // Power iteration to find Fiedler vector (second smallest eigenvector)
310
+ // Simplified: use random initialization and iterate
311
+ const fiedler = new Array(n).fill(0).map(() => Math.random() - 0.5);
312
+ // Normalize
313
+ let norm = Math.sqrt(fiedler.reduce((sum, v) => sum + v * v, 0));
314
+ for (let i = 0; i < n; i++) {
315
+ fiedler[i] = (fiedler[i] ?? 0) / norm;
316
+ }
317
+ // Iterate
318
+ for (let iter = 0; iter < 50; iter++) {
319
+ // Multiply by Laplacian
320
+ const newFiedler = new Array(n).fill(0);
321
+ for (let i = 0; i < n; i++) {
322
+ for (let j = 0; j < n; j++) {
323
+ newFiedler[i] += (laplacian[i]?.[j] ?? 0) * (fiedler[j] ?? 0);
324
+ }
325
+ }
326
+ // Orthogonalize against constant vector
327
+ const mean = newFiedler.reduce((a, b) => a + b, 0) / n;
328
+ for (let i = 0; i < n; i++) {
329
+ newFiedler[i] = (newFiedler[i] ?? 0) - mean;
330
+ }
331
+ // Normalize
332
+ norm = Math.sqrt(newFiedler.reduce((sum, v) => sum + v * v, 0));
333
+ if (norm > 0) {
334
+ for (let i = 0; i < n; i++) {
335
+ fiedler[i] = (newFiedler[i] ?? 0) / norm;
336
+ }
337
+ }
338
+ }
339
+ // Partition based on Fiedler vector
340
+ if (numPartitions === 2) {
341
+ // Simple bisection
342
+ for (let i = 0; i < n; i++) {
343
+ if (!fixed.has(i)) {
344
+ partition[i] = (fiedler[i] ?? 0) >= 0 ? 0 : 1;
345
+ }
346
+ }
347
+ }
348
+ else {
349
+ // K-means clustering on Fiedler values
350
+ const sorted = fiedler
351
+ .map((v, i) => ({ value: v, index: i }))
352
+ .filter(item => !fixed.has(item.index))
353
+ .sort((a, b) => (a.value ?? 0) - (b.value ?? 0));
354
+ const binSize = Math.ceil(sorted.length / numPartitions);
355
+ for (let i = 0; i < sorted.length; i++) {
356
+ const item = sorted[i];
357
+ if (item) {
358
+ partition[item.index] = Math.min(Math.floor(i / binSize), numPartitions - 1);
359
+ }
360
+ }
361
+ }
362
+ return partition;
363
+ }
364
+ /**
365
+ * Edmonds-Karp algorithm (Ford-Fulkerson with BFS)
366
+ */
367
+ edmondsKarp(capacity, source, sink) {
368
+ const n = capacity.length;
369
+ const residual = capacity.map(row => [...row]);
370
+ let maxFlow = 0;
371
+ // BFS to find augmenting path
372
+ const bfs = () => {
373
+ const parent = new Array(n).fill(-1);
374
+ const visited = new Array(n).fill(false);
375
+ const queue = [source];
376
+ visited[source] = true;
377
+ while (queue.length > 0) {
378
+ const current = queue.shift();
379
+ if (current === sink) {
380
+ // Reconstruct path
381
+ const path = [];
382
+ let node = sink;
383
+ while (node !== source) {
384
+ path.unshift(node);
385
+ node = parent[node] ?? source;
386
+ }
387
+ path.unshift(source);
388
+ return path;
389
+ }
390
+ for (let next = 0; next < n; next++) {
391
+ if (!visited[next] && (residual[current]?.[next] ?? 0) > 0) {
392
+ visited[next] = true;
393
+ parent[next] = current;
394
+ queue.push(next);
395
+ }
396
+ }
397
+ }
398
+ return null;
399
+ };
400
+ // Find augmenting paths
401
+ let path = bfs();
402
+ while (path !== null) {
403
+ // Find minimum capacity along path
404
+ let minCap = Infinity;
405
+ for (let i = 0; i < path.length - 1; i++) {
406
+ const from = path[i];
407
+ const to = path[i + 1];
408
+ if (from !== undefined && to !== undefined) {
409
+ minCap = Math.min(minCap, residual[from]?.[to] ?? 0);
410
+ }
411
+ }
412
+ // Update residual capacities
413
+ for (let i = 0; i < path.length - 1; i++) {
414
+ const from = path[i];
415
+ const to = path[i + 1];
416
+ if (from !== undefined && to !== undefined) {
417
+ residual[from][to] = (residual[from]?.[to] ?? 0) - minCap;
418
+ residual[to][from] = (residual[to]?.[from] ?? 0) + minCap;
419
+ }
420
+ }
421
+ maxFlow += minCap;
422
+ path = bfs();
423
+ }
424
+ return { maxFlow, residual };
425
+ }
426
+ /**
427
+ * Compute distances from terminals to all nodes
428
+ */
429
+ computeDistances(graph, terminalIndices, nodeMap) {
430
+ const distances = new Map();
431
+ const nodeCount = graph.nodes.length;
432
+ // Build adjacency list with weights
433
+ const adj = new Map();
434
+ for (let i = 0; i < nodeCount; i++) {
435
+ adj.set(i, []);
436
+ }
437
+ for (const edge of graph.edges) {
438
+ const fromIdx = nodeMap.get(edge.from);
439
+ const toIdx = nodeMap.get(edge.to);
440
+ if (fromIdx !== undefined && toIdx !== undefined) {
441
+ adj.get(fromIdx)?.push({ to: toIdx, weight: edge.weight });
442
+ adj.get(toIdx)?.push({ to: fromIdx, weight: edge.weight });
443
+ }
444
+ }
445
+ // Dijkstra from each terminal
446
+ for (let t = 0; t < terminalIndices.length; t++) {
447
+ const terminal = terminalIndices[t];
448
+ if (terminal === undefined)
449
+ continue;
450
+ const dist = new Array(nodeCount).fill(Infinity);
451
+ dist[terminal] = 0;
452
+ const pq = [{ node: terminal, dist: 0 }];
453
+ while (pq.length > 0) {
454
+ pq.sort((a, b) => a.dist - b.dist);
455
+ const current = pq.shift();
456
+ if (current.dist > (dist[current.node] ?? Infinity))
457
+ continue;
458
+ for (const neighbor of adj.get(current.node) ?? []) {
459
+ const newDist = current.dist + (1 / Math.max(neighbor.weight, 0.1)); // Inverse weight as distance
460
+ if (newDist < (dist[neighbor.to] ?? Infinity)) {
461
+ dist[neighbor.to] = newDist;
462
+ pq.push({ node: neighbor.to, dist: newDist });
463
+ }
464
+ }
465
+ }
466
+ // Store distances
467
+ for (let i = 0; i < nodeCount; i++) {
468
+ distances.set(`${i}-${t}`, dist[i] ?? Infinity);
469
+ }
470
+ }
471
+ return distances;
472
+ }
473
+ }
474
+ /**
475
+ * Create and export default bridge instance
476
+ */
477
+ export function createMinCutBridge() {
478
+ return new MinCutBridge();
479
+ }
480
+ export default MinCutBridge;
481
+ //# sourceMappingURL=mincut-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mincut-bridge.js","sourceRoot":"","sources":["../../src/bridges/mincut-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Code Intelligence Plugin for Claude Flow V3
3
+ *
4
+ * A comprehensive code intelligence plugin combining graph neural networks
5
+ * for code structure analysis with ultra-fast vector search for semantic
6
+ * code similarity.
7
+ *
8
+ * Features:
9
+ * - Semantic code search
10
+ * - Architecture analysis and drift detection
11
+ * - Refactoring impact prediction using GNN
12
+ * - Module splitting suggestions using MinCut
13
+ * - Pattern learning from code history
14
+ *
15
+ * Based on ADR-035: Advanced Code Intelligence Plugin
16
+ *
17
+ * @module @claude-flow/plugin-code-intelligence
18
+ */
19
+ export * from './types.js';
20
+ export { GNNBridge, createGNNBridge } from './bridges/gnn-bridge.js';
21
+ export { MinCutBridge, createMinCutBridge } from './bridges/mincut-bridge.js';
22
+ export { semanticSearchTool, architectureAnalyzeTool, refactorImpactTool, splitSuggestTool, learnPatternsTool, codeIntelligenceTools, toolHandlers, createToolContext, } from './mcp-tools.js';
23
+ export type { MCPTool, ToolContext, MCPToolResult } from './mcp-tools.js';
24
+ import type { CodeIntelligenceConfig, IGNNBridge, IMinCutBridge } from './types.js';
25
+ /**
26
+ * Plugin metadata
27
+ */
28
+ export declare const pluginMetadata: {
29
+ name: string;
30
+ version: string;
31
+ description: string;
32
+ author: string;
33
+ category: string;
34
+ keywords: string[];
35
+ homepage: string;
36
+ repository: string;
37
+ };
38
+ /**
39
+ * Plugin state
40
+ */
41
+ export type PluginState = 'uninitialized' | 'initializing' | 'ready' | 'error' | 'shutdown';
42
+ /**
43
+ * Code Intelligence Plugin Class
44
+ */
45
+ export declare class CodeIntelligencePlugin {
46
+ private state;
47
+ private config;
48
+ private gnnBridge;
49
+ private mincutBridge;
50
+ constructor(config?: Partial<CodeIntelligenceConfig>);
51
+ /**
52
+ * Get plugin metadata
53
+ */
54
+ getMetadata(): {
55
+ name: string;
56
+ version: string;
57
+ description: string;
58
+ author: string;
59
+ category: string;
60
+ keywords: string[];
61
+ homepage: string;
62
+ repository: string;
63
+ };
64
+ /**
65
+ * Get current state
66
+ */
67
+ getState(): PluginState;
68
+ /**
69
+ * Initialize the plugin
70
+ */
71
+ initialize(): Promise<void>;
72
+ /**
73
+ * Shutdown the plugin
74
+ */
75
+ shutdown(): Promise<void>;
76
+ /**
77
+ * Get MCP tools provided by this plugin
78
+ */
79
+ getMCPTools(): import("./mcp-tools.js").MCPTool<unknown, unknown>[];
80
+ /**
81
+ * Get tool context for execution
82
+ */
83
+ getToolContext(): {
84
+ get: <T>(key: string) => T | undefined;
85
+ set: <T>(key: string, value: T) => void;
86
+ bridges: {
87
+ gnn: IGNNBridge;
88
+ mincut: IMinCutBridge;
89
+ };
90
+ config: {
91
+ allowedRoots: string[];
92
+ blockedPatterns: RegExp[];
93
+ maskSecrets: boolean;
94
+ };
95
+ };
96
+ /**
97
+ * Get configuration
98
+ */
99
+ getConfig(): CodeIntelligenceConfig;
100
+ /**
101
+ * Update configuration
102
+ */
103
+ updateConfig(config: Partial<CodeIntelligenceConfig>): void;
104
+ }
105
+ /**
106
+ * Create plugin instance
107
+ */
108
+ export declare function createPlugin(config?: Partial<CodeIntelligenceConfig>): CodeIntelligencePlugin;
109
+ /**
110
+ * Default export
111
+ */
112
+ export default CodeIntelligencePlugin;
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM1E,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;CAS1B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5F;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,YAAY,CAA8B;gBAEtC,MAAM,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAIxD;;OAEG;IACH,WAAW;;;;;;;;;;IAIX;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;OAEG;IACH,WAAW;IAIX;;OAEG;IACH,cAAc;cAYJ,CAAC,OAAO,MAAM,KAAuB,CAAC,GAAG,SAAS;cAClD,CAAC,OAAO,MAAM,SAAS,CAAC;;;;;;;;;;;IAalC;;OAEG;IACH,SAAS,IAAI,sBAAsB;IAInC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;CAU5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAE7F;AAED;;GAEG;AACH,eAAe,sBAAsB,CAAC"}