verso-db 0.1.5 → 0.2.0

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 (94) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +13 -7
  3. package/dist/BinaryHeap.d.ts +11 -1
  4. package/dist/BinaryHeap.d.ts.map +1 -1
  5. package/dist/BinaryHeap.js +138 -0
  6. package/dist/BinaryHeap.js.map +1 -0
  7. package/dist/Collection.d.ts +30 -4
  8. package/dist/Collection.d.ts.map +1 -1
  9. package/dist/Collection.js +1186 -0
  10. package/dist/Collection.js.map +1 -0
  11. package/dist/HNSWIndex.d.ts +59 -0
  12. package/dist/HNSWIndex.d.ts.map +1 -1
  13. package/dist/HNSWIndex.js +2818 -0
  14. package/dist/HNSWIndex.js.map +1 -0
  15. package/dist/MaxBinaryHeap.d.ts +2 -64
  16. package/dist/MaxBinaryHeap.d.ts.map +1 -1
  17. package/dist/MaxBinaryHeap.js +5 -0
  18. package/dist/MaxBinaryHeap.js.map +1 -0
  19. package/dist/SearchWorker.d.ts +57 -4
  20. package/dist/SearchWorker.d.ts.map +1 -1
  21. package/dist/SearchWorker.js +573 -0
  22. package/dist/SearchWorker.js.map +1 -0
  23. package/dist/VectorDB.d.ts.map +1 -1
  24. package/dist/VectorDB.js +246 -0
  25. package/dist/VectorDB.js.map +1 -0
  26. package/dist/WorkerPool.d.ts +32 -2
  27. package/dist/WorkerPool.d.ts.map +1 -1
  28. package/dist/WorkerPool.js +266 -0
  29. package/dist/WorkerPool.js.map +1 -0
  30. package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
  31. package/dist/backends/JsDistanceBackend.js +163 -0
  32. package/dist/backends/JsDistanceBackend.js.map +1 -0
  33. package/dist/encoding/DeltaEncoder.d.ts +2 -2
  34. package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
  35. package/dist/encoding/DeltaEncoder.js +199 -0
  36. package/dist/encoding/DeltaEncoder.js.map +1 -0
  37. package/dist/errors.js +97 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +61 -42
  42. package/dist/index.js.map +1 -9
  43. package/dist/presets.js +205 -0
  44. package/dist/presets.js.map +1 -0
  45. package/dist/quantization/ScalarQuantizer.d.ts +0 -34
  46. package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
  47. package/dist/quantization/ScalarQuantizer.js +346 -0
  48. package/dist/quantization/ScalarQuantizer.js.map +1 -0
  49. package/dist/storage/BatchWriter.js +351 -0
  50. package/dist/storage/BatchWriter.js.map +1 -0
  51. package/dist/storage/BunStorageBackend.d.ts +7 -3
  52. package/dist/storage/BunStorageBackend.d.ts.map +1 -1
  53. package/dist/storage/BunStorageBackend.js +182 -0
  54. package/dist/storage/BunStorageBackend.js.map +1 -0
  55. package/dist/storage/MemoryBackend.js +109 -0
  56. package/dist/storage/MemoryBackend.js.map +1 -0
  57. package/dist/storage/OPFSBackend.d.ts.map +1 -1
  58. package/dist/storage/OPFSBackend.js +325 -0
  59. package/dist/storage/OPFSBackend.js.map +1 -0
  60. package/dist/storage/StorageBackend.js +12 -0
  61. package/dist/storage/StorageBackend.js.map +1 -0
  62. package/dist/storage/WriteAheadLog.js +321 -0
  63. package/dist/storage/WriteAheadLog.js.map +1 -0
  64. package/dist/storage/createStorageBackend.d.ts +4 -0
  65. package/dist/storage/createStorageBackend.d.ts.map +1 -1
  66. package/dist/storage/createStorageBackend.js +119 -0
  67. package/dist/storage/createStorageBackend.js.map +1 -0
  68. package/{src/storage/index.ts → dist/storage/index.js} +7 -27
  69. package/dist/storage/index.js.map +1 -0
  70. package/dist/storage/nodeFsRuntime.d.ts +14 -0
  71. package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
  72. package/dist/storage/nodeFsRuntime.js +105 -0
  73. package/dist/storage/nodeFsRuntime.js.map +1 -0
  74. package/package.json +9 -7
  75. package/src/BinaryHeap.ts +0 -136
  76. package/src/Collection.ts +0 -1262
  77. package/src/HNSWIndex.ts +0 -2894
  78. package/src/MaxBinaryHeap.ts +0 -181
  79. package/src/SearchWorker.ts +0 -264
  80. package/src/VectorDB.ts +0 -319
  81. package/src/WorkerPool.ts +0 -222
  82. package/src/backends/JsDistanceBackend.ts +0 -171
  83. package/src/encoding/DeltaEncoder.ts +0 -236
  84. package/src/errors.ts +0 -110
  85. package/src/index.ts +0 -106
  86. package/src/presets.ts +0 -229
  87. package/src/quantization/ScalarQuantizer.ts +0 -487
  88. package/src/storage/BatchWriter.ts +0 -420
  89. package/src/storage/BunStorageBackend.ts +0 -199
  90. package/src/storage/MemoryBackend.ts +0 -122
  91. package/src/storage/OPFSBackend.ts +0 -348
  92. package/src/storage/StorageBackend.ts +0 -74
  93. package/src/storage/WriteAheadLog.ts +0 -379
  94. package/src/storage/createStorageBackend.ts +0 -137
package/dist/index.js.map CHANGED
@@ -1,9 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [
5
- ],
6
- "mappings": "",
7
- "debugId": "CE8ECA6E59322E0364756E2164756E21",
8
- "names": []
9
- }
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,gFAAgF;AAEhF,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,OAAO,EACP,oBAAoB,EACpB,SAAS,EACT,YAAY,EACb,MAAM,WAAW,CAAC;AAEnB,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,GAGvB,MAAM,gCAAgC,CAAC;AAExC,mCAAmC;AACnC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGvE,4BAA4B;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * HNSW Parameter Presets
3
+ *
4
+ * These presets are optimized based on extensive benchmarking to achieve
5
+ * the target recall@10 >= 95% for different dataset sizes and dimensions.
6
+ *
7
+ * Key parameters:
8
+ * - M: Maximum connections per node (higher = better recall, more memory)
9
+ * - efConstruction: Beam width during index building (higher = better quality, slower build)
10
+ * - efSearch: Beam width during search (higher = better recall, slower search)
11
+ */
12
+ /**
13
+ * Preset for low-dimensional vectors (128D or less)
14
+ * Suitable for: Image features, word2vec, GloVe embeddings
15
+ */
16
+ export const PRESET_LOW_DIM = Object.freeze({
17
+ name: 'low-dim',
18
+ description: 'Optimized for low-dimensional vectors (<=128D)',
19
+ M: 16,
20
+ efConstruction: 200,
21
+ efSearch: 100,
22
+ expectedRecall: 0.99,
23
+ targetDimensions: '<=128',
24
+ targetDatasetSize: '1K-100K',
25
+ });
26
+ /**
27
+ * Preset for medium-dimensional vectors (256-512D)
28
+ * Suitable for: Sentence embeddings, smaller transformer outputs
29
+ */
30
+ export const PRESET_MEDIUM_DIM = Object.freeze({
31
+ name: 'medium-dim',
32
+ description: 'Optimized for medium-dimensional vectors (129-512D)',
33
+ M: 24,
34
+ efConstruction: 200,
35
+ efSearch: 150,
36
+ expectedRecall: 0.97,
37
+ targetDimensions: '129-512',
38
+ targetDatasetSize: '1K-100K',
39
+ });
40
+ /**
41
+ * Preset for high-dimensional vectors (768D+)
42
+ * Suitable for: BERT, GPT embeddings, Cohere, OpenAI embeddings
43
+ * This is the recommended preset for RAG applications
44
+ *
45
+ * Benchmarked on Cohere Wikipedia 1024D (495K vectors):
46
+ * - efSearch=128: 99.2% recall, 168 QPS, 10.72ms P99
47
+ */
48
+ export const PRESET_HIGH_DIM = Object.freeze({
49
+ name: 'high-dim',
50
+ description: 'Optimized for high-dimensional vectors (768D+)',
51
+ M: 32,
52
+ efConstruction: 200,
53
+ efSearch: 128,
54
+ expectedRecall: 0.99,
55
+ targetDimensions: '>=768',
56
+ targetDatasetSize: '1K-500K',
57
+ });
58
+ /**
59
+ * Preset for very high-dimensional vectors (1536D+)
60
+ * Suitable for: OpenAI text-embedding-ada-002, text-embedding-3-large
61
+ *
62
+ * Scaled from PRESET_HIGH_DIM benchmarks (higher M for higher dimensions)
63
+ */
64
+ export const PRESET_VERY_HIGH_DIM = Object.freeze({
65
+ name: 'very-high-dim',
66
+ description: 'Optimized for very high-dimensional vectors (1536D+)',
67
+ M: 48,
68
+ efConstruction: 300,
69
+ efSearch: 150,
70
+ expectedRecall: 0.99,
71
+ targetDimensions: '>=1536',
72
+ targetDatasetSize: '1K-500K',
73
+ });
74
+ /**
75
+ * Preset for small datasets (<10K vectors)
76
+ * Prioritizes recall over speed since brute-force is viable
77
+ */
78
+ export const PRESET_SMALL_DATASET = Object.freeze({
79
+ name: 'small-dataset',
80
+ description: 'Optimized for small datasets (<10K vectors)',
81
+ M: 16,
82
+ efConstruction: 200,
83
+ efSearch: 200,
84
+ expectedRecall: 0.99,
85
+ targetDimensions: 'any',
86
+ targetDatasetSize: '<10K',
87
+ });
88
+ /**
89
+ * Preset for large datasets (100K-1M vectors)
90
+ * Balances recall with build time and memory
91
+ *
92
+ * Benchmarked on Cohere Wikipedia 1024D (495K vectors):
93
+ * - efSearch=128: 99.2% recall, 168 QPS
94
+ */
95
+ export const PRESET_LARGE_DATASET = Object.freeze({
96
+ name: 'large-dataset',
97
+ description: 'Optimized for large datasets (100K-1M vectors)',
98
+ M: 32,
99
+ efConstruction: 200,
100
+ efSearch: 128,
101
+ expectedRecall: 0.99,
102
+ targetDimensions: 'any',
103
+ targetDatasetSize: '100K-1M',
104
+ });
105
+ /**
106
+ * Preset for maximum recall (prioritizes accuracy over speed)
107
+ * Use when recall is critical and latency is acceptable
108
+ */
109
+ export const PRESET_MAX_RECALL = Object.freeze({
110
+ name: 'max-recall',
111
+ description: 'Maximum recall configuration',
112
+ M: 48,
113
+ efConstruction: 500,
114
+ efSearch: 400,
115
+ expectedRecall: 0.99,
116
+ targetDimensions: 'any',
117
+ targetDatasetSize: 'any',
118
+ });
119
+ /**
120
+ * Preset for minimum latency (prioritizes speed over recall)
121
+ * Use when latency is critical and 90% recall is acceptable
122
+ */
123
+ export const PRESET_LOW_LATENCY = Object.freeze({
124
+ name: 'low-latency',
125
+ description: 'Minimum latency configuration (90% recall)',
126
+ M: 12,
127
+ efConstruction: 100,
128
+ efSearch: 50,
129
+ expectedRecall: 0.90,
130
+ targetDimensions: 'any',
131
+ targetDatasetSize: 'any',
132
+ });
133
+ /**
134
+ * All available presets
135
+ */
136
+ export const PRESETS = Object.freeze({
137
+ 'low-dim': PRESET_LOW_DIM,
138
+ 'medium-dim': PRESET_MEDIUM_DIM,
139
+ 'high-dim': PRESET_HIGH_DIM,
140
+ 'very-high-dim': PRESET_VERY_HIGH_DIM,
141
+ 'small-dataset': PRESET_SMALL_DATASET,
142
+ 'large-dataset': PRESET_LARGE_DATASET,
143
+ 'max-recall': PRESET_MAX_RECALL,
144
+ 'low-latency': PRESET_LOW_LATENCY,
145
+ });
146
+ /**
147
+ * Get recommended preset based on dimension and dataset size
148
+ *
149
+ * For high-dimensional vectors (768D+), dimension takes priority over dataset size
150
+ * because recall degrades significantly without higher M values.
151
+ */
152
+ export function getRecommendedPreset(dimension, datasetSize) {
153
+ // For high-dimensional vectors, always use dimension-based presets
154
+ // (dimension matters more than dataset size for recall)
155
+ // Note: Check 1536 BEFORE 768 since 1536 >= 768 would match first
156
+ if (dimension >= 1536)
157
+ return PRESET_VERY_HIGH_DIM;
158
+ if (dimension >= 768)
159
+ return PRESET_HIGH_DIM;
160
+ // For lower dimensions, consider dataset size
161
+ if (datasetSize !== undefined) {
162
+ if (datasetSize < 10000)
163
+ return PRESET_SMALL_DATASET;
164
+ if (datasetSize > 100000)
165
+ return PRESET_LARGE_DATASET;
166
+ }
167
+ // Dimension-based selection for medium dimensions
168
+ if (dimension <= 128)
169
+ return PRESET_LOW_DIM;
170
+ if (dimension <= 512)
171
+ return PRESET_MEDIUM_DIM;
172
+ return PRESET_HIGH_DIM;
173
+ }
174
+ /**
175
+ * Get preset by name
176
+ */
177
+ export function getPreset(name) {
178
+ return PRESETS[name];
179
+ }
180
+ /**
181
+ * RAG-specific preset recommendation
182
+ * For typical RAG applications using popular embedding models
183
+ */
184
+ export function getRAGPreset(embeddingModel) {
185
+ const model = embeddingModel.toLowerCase();
186
+ // OpenAI models
187
+ if (model.includes('ada-002') || model.includes('text-embedding-3')) {
188
+ return PRESET_VERY_HIGH_DIM;
189
+ }
190
+ // Cohere models
191
+ if (model.includes('cohere') || model.includes('embed-')) {
192
+ return PRESET_HIGH_DIM;
193
+ }
194
+ // BERT/Sentence Transformers
195
+ if (model.includes('bert') || model.includes('minilm') || model.includes('mpnet')) {
196
+ return PRESET_HIGH_DIM;
197
+ }
198
+ // E5 models
199
+ if (model.includes('e5-')) {
200
+ return model.includes('large') ? PRESET_HIGH_DIM : PRESET_MEDIUM_DIM;
201
+ }
202
+ // Default to high-dim for unknown models (most modern embeddings are 768D+)
203
+ return PRESET_HIGH_DIM;
204
+ }
205
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"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"}
@@ -87,38 +87,4 @@ export declare function l2SquaredInt8(a: Int8Array, b: Int8Array): number;
87
87
  * Uses 8-wide unrolling with separate accumulators for better ILP
88
88
  */
89
89
  export declare function cosineDistanceInt8(a: Int8Array, b: Int8Array): number;
90
- /**
91
- * QuantizedVectorStore - Efficient storage for quantized vectors
92
- */
93
- export declare class QuantizedVectorStore {
94
- private quantizer;
95
- private vectors;
96
- private originalVectors;
97
- private keepOriginals;
98
- constructor(dimension: number, keepOriginals?: boolean);
99
- /**
100
- * Train the quantizer and add vectors
101
- */
102
- addVectors(vectors: Float32Array[]): void;
103
- /**
104
- * Get quantized vector by index
105
- */
106
- getQuantized(index: number): Int8Array;
107
- /**
108
- * Get original float32 vector by index (for rescoring)
109
- */
110
- getOriginal(index: number): Float32Array | null;
111
- /**
112
- * Get number of vectors
113
- */
114
- size(): number;
115
- /**
116
- * Calculate memory usage in bytes
117
- */
118
- memoryUsage(): {
119
- quantized: number;
120
- original: number;
121
- total: number;
122
- };
123
- }
124
90
  //# sourceMappingURL=ScalarQuantizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarQuantizer.d.ts","sourceRoot":"","sources":["../../src/quantization/ScalarQuantizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,YAAY,CAAC;IAClB,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,OAAO,CAAkB;gBAErB,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IA8CpC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,kBAAkB,GAAG,IAAI;IAItC,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAM3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS;IAsBzC;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAkBjF;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE;IAQnD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY;IAqB3C;;OAEG;IACH,SAAS,IAAI,WAAW;IAuBxB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe;CAkCzD;AAED;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CA4BjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAqChE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CA2CrE;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,aAAa,CAAU;gBAEnB,SAAS,EAAE,MAAM,EAAE,aAAa,UAAO;IAOnD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IAazC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAOtC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAQ/C;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,WAAW,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAOtE"}
1
+ {"version":3,"file":"ScalarQuantizer.d.ts","sourceRoot":"","sources":["../../src/quantization/ScalarQuantizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,YAAY,CAAC;IAClB,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,OAAO,CAAkB;gBAErB,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IA8CpC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,kBAAkB,GAAG,IAAI;IAItC,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAM3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS;IAczC;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAkBjF;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE;IAQnD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY;IAqB3C;;OAEG;IACH,SAAS,IAAI,WAAW;IAuBxB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe;CAkCzD;AAED;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CA4BjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAqChE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CA2CrE"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Scalar Quantizer for Int8 vector compression
3
+ *
4
+ * Provides 4x memory reduction by converting Float32 vectors to Int8.
5
+ * Expected performance:
6
+ * - Memory: 4x reduction (32 bits → 8 bits per dimension)
7
+ * - Speed: ~3.5x faster distance calculations (smaller data, better cache)
8
+ * - Recall: <2% loss compared to float32
9
+ *
10
+ * Uses range quantization: maps [min, max] to [-128, 127]
11
+ */
12
+ import { QuantizationError, DimensionMismatchError } from '../errors.js';
13
+ export class ScalarQuantizer {
14
+ dimension;
15
+ params = null;
16
+ trained = false;
17
+ constructor(dimension) {
18
+ this.dimension = dimension;
19
+ }
20
+ /**
21
+ * Train the quantizer on a set of vectors to determine optimal range
22
+ */
23
+ train(vectors) {
24
+ if (vectors.length === 0) {
25
+ throw new QuantizationError('Cannot train quantizer with empty vector set');
26
+ }
27
+ const dim = this.dimension;
28
+ // Validate all training vectors have correct dimension
29
+ for (let i = 0; i < vectors.length; i++) {
30
+ if (vectors[i].length !== dim) {
31
+ throw new DimensionMismatchError(dim, vectors[i].length, `Training vector at index ${i}`);
32
+ }
33
+ }
34
+ const min = new Float32Array(dim).fill(Infinity);
35
+ const max = new Float32Array(dim).fill(-Infinity);
36
+ // Find per-dimension min/max
37
+ for (const vector of vectors) {
38
+ for (let d = 0; d < dim; d++) {
39
+ if (vector[d] < min[d])
40
+ min[d] = vector[d];
41
+ if (vector[d] > max[d])
42
+ max[d] = vector[d];
43
+ }
44
+ }
45
+ // Compute scale and offset for mapping to [-128, 127]
46
+ const scale = new Float32Array(dim);
47
+ const offset = new Float32Array(dim);
48
+ for (let d = 0; d < dim; d++) {
49
+ const range = max[d] - min[d];
50
+ if (range === 0) {
51
+ // Handle constant dimensions
52
+ scale[d] = 1;
53
+ offset[d] = min[d];
54
+ }
55
+ else {
56
+ // Map [min, max] to [-128, 127]
57
+ scale[d] = 255 / range;
58
+ offset[d] = min[d];
59
+ }
60
+ }
61
+ this.params = { min, max, scale, offset };
62
+ this.trained = true;
63
+ }
64
+ /**
65
+ * Get training status
66
+ */
67
+ isTrained() {
68
+ return this.trained;
69
+ }
70
+ /**
71
+ * Get quantization parameters
72
+ */
73
+ getParams() {
74
+ return this.params;
75
+ }
76
+ validateParams(params) {
77
+ const arrays = [
78
+ { name: 'min', value: params.min },
79
+ { name: 'max', value: params.max },
80
+ { name: 'scale', value: params.scale },
81
+ { name: 'offset', value: params.offset },
82
+ ];
83
+ for (const { name, value } of arrays) {
84
+ if (value.length !== this.dimension) {
85
+ throw new DimensionMismatchError(this.dimension, value.length, `Quantizer parameter '${name}'`);
86
+ }
87
+ for (let i = 0; i < value.length; i++) {
88
+ if (!Number.isFinite(value[i])) {
89
+ throw new QuantizationError(`Invalid quantizer parameter '${name}' at index ${i}: ${value[i]}`);
90
+ }
91
+ }
92
+ }
93
+ for (let d = 0; d < this.dimension; d++) {
94
+ if (params.max[d] < params.min[d]) {
95
+ throw new QuantizationError(`Invalid quantizer parameters at dimension ${d}: max (${params.max[d]}) < min (${params.min[d]})`);
96
+ }
97
+ if (params.scale[d] === 0) {
98
+ throw new QuantizationError(`Invalid quantizer scale at dimension ${d}: scale must be non-zero`);
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Set quantization parameters (for loading saved quantizer)
104
+ */
105
+ setParams(params) {
106
+ this.validateParams(params);
107
+ this.params = params;
108
+ this.trained = true;
109
+ }
110
+ /**
111
+ * Quantize a single float32 vector to int8
112
+ */
113
+ quantize(vector) {
114
+ if (!this.params) {
115
+ throw new QuantizationError('Quantizer not trained');
116
+ }
117
+ if (vector.length !== this.dimension) {
118
+ throw new DimensionMismatchError(this.dimension, vector.length, 'Quantization');
119
+ }
120
+ const result = new Int8Array(this.dimension);
121
+ this.quantizeInto(vector, result, 0);
122
+ return result;
123
+ }
124
+ /**
125
+ * Quantize a float32 vector directly into a target Int8Array at the given offset.
126
+ * Zero-allocation: avoids creating a new Int8Array per vector.
127
+ *
128
+ * @param vector Source float32 vector
129
+ * @param target Target Int8Array to write into
130
+ * @param targetOffset Byte offset in target where quantized values start
131
+ */
132
+ quantizeInto(vector, target, targetOffset) {
133
+ if (!this.params) {
134
+ throw new QuantizationError('Quantizer not trained');
135
+ }
136
+ if (vector.length !== this.dimension) {
137
+ throw new DimensionMismatchError(this.dimension, vector.length, 'Quantization');
138
+ }
139
+ const dim = this.dimension;
140
+ const { scale, offset } = this.params;
141
+ for (let d = 0; d < dim; d++) {
142
+ const normalized = (vector[d] - offset[d]) * scale[d];
143
+ target[targetOffset + d] = Math.max(-128, Math.min(127, Math.round(normalized - 128)));
144
+ }
145
+ }
146
+ /**
147
+ * Quantize multiple vectors
148
+ */
149
+ quantizeBatch(vectors) {
150
+ const result = new Array(vectors.length);
151
+ for (let i = 0; i < vectors.length; i++) {
152
+ result[i] = this.quantize(vectors[i]);
153
+ }
154
+ return result;
155
+ }
156
+ /**
157
+ * Dequantize an int8 vector back to float32 (for rescoring)
158
+ */
159
+ dequantize(vector) {
160
+ if (!this.params) {
161
+ throw new QuantizationError('Quantizer not trained');
162
+ }
163
+ if (vector.length !== this.dimension) {
164
+ throw new DimensionMismatchError(this.dimension, vector.length, 'Dequantization');
165
+ }
166
+ const dim = this.dimension;
167
+ const result = new Float32Array(dim);
168
+ const { scale, offset } = this.params;
169
+ for (let d = 0; d < dim; d++) {
170
+ // Reverse the quantization
171
+ result[d] = ((vector[d] + 128) / scale[d]) + offset[d];
172
+ }
173
+ return result;
174
+ }
175
+ /**
176
+ * Serialize quantization parameters for saving
177
+ */
178
+ serialize() {
179
+ if (!this.params) {
180
+ throw new QuantizationError('Quantizer not trained');
181
+ }
182
+ const dim = this.dimension;
183
+ // 4 bytes header (dimension) + 4 * dim * 4 bytes (4 float arrays)
184
+ const buffer = new ArrayBuffer(4 + 4 * dim * 4);
185
+ const view = new DataView(buffer);
186
+ view.setInt32(0, dim, true);
187
+ let offset = 4;
188
+ for (const arr of [this.params.min, this.params.max, this.params.scale, this.params.offset]) {
189
+ for (let d = 0; d < dim; d++) {
190
+ view.setFloat32(offset, arr[d], true);
191
+ offset += 4;
192
+ }
193
+ }
194
+ return buffer;
195
+ }
196
+ /**
197
+ * Load quantization parameters
198
+ */
199
+ static deserialize(buffer) {
200
+ if (buffer.byteLength < 4) {
201
+ throw new QuantizationError('Invalid quantizer data: buffer too small');
202
+ }
203
+ const view = new DataView(buffer);
204
+ const dim = view.getInt32(0, true);
205
+ if (dim <= 0) {
206
+ throw new QuantizationError(`Invalid quantizer data: dimension must be positive, got ${dim}`);
207
+ }
208
+ const expectedSize = 4 + dim * 4 * 4;
209
+ if (buffer.byteLength < expectedSize) {
210
+ throw new QuantizationError(`Invalid quantizer data: expected ${expectedSize} bytes, got ${buffer.byteLength}`);
211
+ }
212
+ const quantizer = new ScalarQuantizer(dim);
213
+ const min = new Float32Array(dim);
214
+ const max = new Float32Array(dim);
215
+ const scale = new Float32Array(dim);
216
+ const offsetArr = new Float32Array(dim);
217
+ let offset = 4;
218
+ for (const arr of [min, max, scale, offsetArr]) {
219
+ for (let d = 0; d < dim; d++) {
220
+ arr[d] = view.getFloat32(offset, true);
221
+ offset += 4;
222
+ }
223
+ }
224
+ quantizer.setParams({ min, max, scale, offset: offsetArr });
225
+ return quantizer;
226
+ }
227
+ }
228
+ /**
229
+ * Fast Int8 distance calculations
230
+ * These are optimized for quantized vectors and provide significant speedup
231
+ */
232
+ /**
233
+ * Compute dot product between two Int8 vectors
234
+ * Uses 8-wide unrolling for better ILP (instruction-level parallelism)
235
+ */
236
+ export function dotProductInt8(a, b) {
237
+ if (a.length !== b.length) {
238
+ throw new DimensionMismatchError(a.length, b.length, 'Int8 dot product');
239
+ }
240
+ const len = a.length;
241
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
242
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
243
+ let i = 0;
244
+ // 8-wide unrolling for high-dimensional vectors
245
+ const limit8 = len - 7;
246
+ for (; i < limit8; i += 8) {
247
+ sum0 += a[i] * b[i];
248
+ sum1 += a[i + 1] * b[i + 1];
249
+ sum2 += a[i + 2] * b[i + 2];
250
+ sum3 += a[i + 3] * b[i + 3];
251
+ sum4 += a[i + 4] * b[i + 4];
252
+ sum5 += a[i + 5] * b[i + 5];
253
+ sum6 += a[i + 6] * b[i + 6];
254
+ sum7 += a[i + 7] * b[i + 7];
255
+ }
256
+ // Handle remaining elements
257
+ for (; i < len; i++) {
258
+ sum0 += a[i] * b[i];
259
+ }
260
+ return sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7;
261
+ }
262
+ /**
263
+ * Compute L2 squared distance between two Int8 vectors
264
+ * Uses 8-wide unrolling for better ILP
265
+ */
266
+ export function l2SquaredInt8(a, b) {
267
+ if (a.length !== b.length) {
268
+ throw new DimensionMismatchError(a.length, b.length, 'Int8 L2 distance');
269
+ }
270
+ const len = a.length;
271
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
272
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
273
+ let i = 0;
274
+ // 8-wide unrolling for high-dimensional vectors
275
+ const limit8 = len - 7;
276
+ for (; i < limit8; i += 8) {
277
+ const d0 = a[i] - b[i];
278
+ const d1 = a[i + 1] - b[i + 1];
279
+ const d2 = a[i + 2] - b[i + 2];
280
+ const d3 = a[i + 3] - b[i + 3];
281
+ const d4 = a[i + 4] - b[i + 4];
282
+ const d5 = a[i + 5] - b[i + 5];
283
+ const d6 = a[i + 6] - b[i + 6];
284
+ const d7 = a[i + 7] - b[i + 7];
285
+ sum0 += d0 * d0;
286
+ sum1 += d1 * d1;
287
+ sum2 += d2 * d2;
288
+ sum3 += d3 * d3;
289
+ sum4 += d4 * d4;
290
+ sum5 += d5 * d5;
291
+ sum6 += d6 * d6;
292
+ sum7 += d7 * d7;
293
+ }
294
+ // Handle remaining elements
295
+ for (; i < len; i++) {
296
+ const d = a[i] - b[i];
297
+ sum0 += d * d;
298
+ }
299
+ return sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7;
300
+ }
301
+ /**
302
+ * Compute approximate cosine distance for Int8 vectors
303
+ * Note: This is approximate because quantization changes magnitude
304
+ * Uses 8-wide unrolling with separate accumulators for better ILP
305
+ */
306
+ export function cosineDistanceInt8(a, b) {
307
+ if (a.length !== b.length) {
308
+ throw new DimensionMismatchError(a.length, b.length, 'Int8 cosine distance');
309
+ }
310
+ const len = a.length;
311
+ // Use separate accumulators for better ILP
312
+ let dot0 = 0, dot1 = 0, dot2 = 0, dot3 = 0;
313
+ let normA0 = 0, normA1 = 0, normA2 = 0, normA3 = 0;
314
+ let normB0 = 0, normB1 = 0, normB2 = 0, normB3 = 0;
315
+ let i = 0;
316
+ const limit8 = len - 7;
317
+ for (; i < limit8; i += 8) {
318
+ dot0 += a[i] * b[i] + a[i + 4] * b[i + 4];
319
+ dot1 += a[i + 1] * b[i + 1] + a[i + 5] * b[i + 5];
320
+ dot2 += a[i + 2] * b[i + 2] + a[i + 6] * b[i + 6];
321
+ dot3 += a[i + 3] * b[i + 3] + a[i + 7] * b[i + 7];
322
+ normA0 += a[i] * a[i] + a[i + 4] * a[i + 4];
323
+ normA1 += a[i + 1] * a[i + 1] + a[i + 5] * a[i + 5];
324
+ normA2 += a[i + 2] * a[i + 2] + a[i + 6] * a[i + 6];
325
+ normA3 += a[i + 3] * a[i + 3] + a[i + 7] * a[i + 7];
326
+ normB0 += b[i] * b[i] + b[i + 4] * b[i + 4];
327
+ normB1 += b[i + 1] * b[i + 1] + b[i + 5] * b[i + 5];
328
+ normB2 += b[i + 2] * b[i + 2] + b[i + 6] * b[i + 6];
329
+ normB3 += b[i + 3] * b[i + 3] + b[i + 7] * b[i + 7];
330
+ }
331
+ // Handle remaining elements
332
+ for (; i < len; i++) {
333
+ dot0 += a[i] * b[i];
334
+ normA0 += a[i] * a[i];
335
+ normB0 += b[i] * b[i];
336
+ }
337
+ const dot = dot0 + dot1 + dot2 + dot3;
338
+ const normA = normA0 + normA1 + normA2 + normA3;
339
+ const normB = normB0 + normB1 + normB2 + normB3;
340
+ const magnitude = Math.sqrt(normA * normB);
341
+ if (magnitude === 0)
342
+ return 1;
343
+ const distance = 1 - (dot / magnitude);
344
+ return distance < 0 ? 0 : distance;
345
+ }
346
+ //# sourceMappingURL=ScalarQuantizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScalarQuantizer.js","sourceRoot":"","sources":["../../src/quantization/ScalarQuantizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAStE,MAAM,OAAO,eAAe;IAClB,SAAS,CAAS;IAClB,MAAM,GAA8B,IAAI,CAAC;IACzC,OAAO,GAAY,KAAK,CAAC;IAEjC,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAuB;QAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,8CAA8C,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,uDAAuD;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9B,MAAM,IAAI,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QAElD,6BAA6B;QAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,6BAA6B;gBAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACb,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;gBACvB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,cAAc,CAAC,MAA0B;QAC/C,MAAM,MAAM,GAAiD;YAC3D,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE;YAClC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE;YAClC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;YACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;SACzC,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,wBAAwB,IAAI,GAAG,CAAC,CAAC;YAClG,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/B,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,IAAI,cAAc,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,iBAAiB,CACzB,6CAA6C,CAAC,UAAU,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAClG,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,iBAAiB,CAAC,wCAAwC,CAAC,0BAA0B,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAA0B;QAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAoB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,MAAoB,EAAE,MAAiB,EAAE,YAAoB;QACxE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAuB;QACnC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAY,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAiB;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,2BAA2B;YAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,kEAAkE;QAClE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE5B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAmB;QACpC,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,iBAAiB,CAAC,2DAA2D,GAAG,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,GAAG,YAAY,EAAE,CAAC;YACrC,MAAM,IAAI,iBAAiB,CAAC,oCAAoC,YAAY,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAClH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvC,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAED,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAY,EAAE,CAAY;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,gDAAgD;IAChD,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,CAAY;IACtD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,gDAAgD;IAChD,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAY,EAAE,CAAY;IAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,2CAA2C;IAC3C,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAEnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACvC,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrC,CAAC"}