@softtechai/quickmcp 1.0.8

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 (163) hide show
  1. package/README.md +553 -0
  2. package/dist/client/MCPClient.d.ts +24 -0
  3. package/dist/client/MCPClient.d.ts.map +1 -0
  4. package/dist/client/MCPClient.js +211 -0
  5. package/dist/client/MCPClient.js.map +1 -0
  6. package/dist/client/MCPClientUnified.d.ts +31 -0
  7. package/dist/client/MCPClientUnified.d.ts.map +1 -0
  8. package/dist/client/MCPClientUnified.js +275 -0
  9. package/dist/client/MCPClientUnified.js.map +1 -0
  10. package/dist/client/MCPTestRunner.d.ts +44 -0
  11. package/dist/client/MCPTestRunner.d.ts.map +1 -0
  12. package/dist/client/MCPTestRunner.js +220 -0
  13. package/dist/client/MCPTestRunner.js.map +1 -0
  14. package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
  15. package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
  16. package/dist/client/MCPTestRunnerUnified.js +183 -0
  17. package/dist/client/MCPTestRunnerUnified.js.map +1 -0
  18. package/dist/database/json-manager.d.ts +55 -0
  19. package/dist/database/json-manager.d.ts.map +1 -0
  20. package/dist/database/json-manager.js +128 -0
  21. package/dist/database/json-manager.js.map +1 -0
  22. package/dist/database/sqlite-manager.d.ts +53 -0
  23. package/dist/database/sqlite-manager.d.ts.map +1 -0
  24. package/dist/database/sqlite-manager.js +193 -0
  25. package/dist/database/sqlite-manager.js.map +1 -0
  26. package/dist/dynamic-mcp-executor.d.ts +14 -0
  27. package/dist/dynamic-mcp-executor.d.ts.map +1 -0
  28. package/dist/dynamic-mcp-executor.js +274 -0
  29. package/dist/dynamic-mcp-executor.js.map +1 -0
  30. package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
  31. package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
  32. package/dist/generators/MCPServerGenerator-new.js +287 -0
  33. package/dist/generators/MCPServerGenerator-new.js.map +1 -0
  34. package/dist/generators/MCPServerGenerator.d.ts +42 -0
  35. package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
  36. package/dist/generators/MCPServerGenerator.js +494 -0
  37. package/dist/generators/MCPServerGenerator.js.map +1 -0
  38. package/dist/generators/database/sqlite-manager.d.ts +52 -0
  39. package/dist/generators/database/sqlite-manager.js +143 -0
  40. package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
  41. package/dist/generators/generators/MCPServerGenerator.js +396 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +23 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/integrated-mcp-server-new.d.ts +12 -0
  47. package/dist/integrated-mcp-server-new.d.ts.map +1 -0
  48. package/dist/integrated-mcp-server-new.js +253 -0
  49. package/dist/integrated-mcp-server-new.js.map +1 -0
  50. package/dist/integrated-mcp-server.d.ts +25 -0
  51. package/dist/integrated-mcp-server.d.ts.map +1 -0
  52. package/dist/integrated-mcp-server.js +541 -0
  53. package/dist/integrated-mcp-server.js.map +1 -0
  54. package/dist/mcp-inspector-server.d.ts +3 -0
  55. package/dist/mcp-inspector-server.d.ts.map +1 -0
  56. package/dist/mcp-inspector-server.js +119 -0
  57. package/dist/mcp-inspector-server.js.map +1 -0
  58. package/dist/mcp-sdk-server.d.ts +3 -0
  59. package/dist/mcp-sdk-server.d.ts.map +1 -0
  60. package/dist/mcp-sdk-server.js +90 -0
  61. package/dist/mcp-sdk-server.js.map +1 -0
  62. package/dist/mcp-server.d.ts +3 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +300 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/parsers/CsvParser.d.ts +7 -0
  67. package/dist/parsers/CsvParser.d.ts.map +1 -0
  68. package/dist/parsers/CsvParser.js +98 -0
  69. package/dist/parsers/CsvParser.js.map +1 -0
  70. package/dist/parsers/DatabaseParser.d.ts +18 -0
  71. package/dist/parsers/DatabaseParser.d.ts.map +1 -0
  72. package/dist/parsers/DatabaseParser.js +372 -0
  73. package/dist/parsers/DatabaseParser.js.map +1 -0
  74. package/dist/parsers/ExcelParser.d.ts +8 -0
  75. package/dist/parsers/ExcelParser.d.ts.map +1 -0
  76. package/dist/parsers/ExcelParser.js +119 -0
  77. package/dist/parsers/ExcelParser.js.map +1 -0
  78. package/dist/parsers/index.d.ts +13 -0
  79. package/dist/parsers/index.d.ts.map +1 -0
  80. package/dist/parsers/index.js +88 -0
  81. package/dist/parsers/index.js.map +1 -0
  82. package/dist/parsers/parsers/ExcelParser.js +118 -0
  83. package/dist/parsers/types/index.js +2 -0
  84. package/dist/quickmcp-unified-bridge.d.ts +13 -0
  85. package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
  86. package/dist/quickmcp-unified-bridge.js +176 -0
  87. package/dist/quickmcp-unified-bridge.js.map +1 -0
  88. package/dist/server/ServerManager.d.ts +37 -0
  89. package/dist/server/ServerManager.d.ts.map +1 -0
  90. package/dist/server/ServerManager.js +376 -0
  91. package/dist/server/ServerManager.js.map +1 -0
  92. package/dist/sqlite-manager.js +145 -0
  93. package/dist/start-new-server.d.ts +3 -0
  94. package/dist/start-new-server.d.ts.map +1 -0
  95. package/dist/start-new-server.js +10 -0
  96. package/dist/start-new-server.js.map +1 -0
  97. package/dist/test-app.d.ts +2 -0
  98. package/dist/test-app.d.ts.map +1 -0
  99. package/dist/test-app.js +119 -0
  100. package/dist/test-app.js.map +1 -0
  101. package/dist/test-new-architecture.d.ts +3 -0
  102. package/dist/test-new-architecture.d.ts.map +1 -0
  103. package/dist/test-new-architecture.js +72 -0
  104. package/dist/test-new-architecture.js.map +1 -0
  105. package/dist/transport/base-transport.d.ts +21 -0
  106. package/dist/transport/base-transport.d.ts.map +1 -0
  107. package/dist/transport/base-transport.js +16 -0
  108. package/dist/transport/base-transport.js.map +1 -0
  109. package/dist/transport/index.d.ts +10 -0
  110. package/dist/transport/index.d.ts.map +1 -0
  111. package/dist/transport/index.js +12 -0
  112. package/dist/transport/index.js.map +1 -0
  113. package/dist/transport/sse-transport.d.ts +13 -0
  114. package/dist/transport/sse-transport.d.ts.map +1 -0
  115. package/dist/transport/sse-transport.js +106 -0
  116. package/dist/transport/sse-transport.js.map +1 -0
  117. package/dist/transport/stdio-transport.d.ts +8 -0
  118. package/dist/transport/stdio-transport.d.ts.map +1 -0
  119. package/dist/transport/stdio-transport.js +53 -0
  120. package/dist/transport/stdio-transport.js.map +1 -0
  121. package/dist/transport/streamable-http-transport.d.ts +15 -0
  122. package/dist/transport/streamable-http-transport.d.ts.map +1 -0
  123. package/dist/transport/streamable-http-transport.js +151 -0
  124. package/dist/transport/streamable-http-transport.js.map +1 -0
  125. package/dist/types/index.d.ts +64 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/index.js +3 -0
  128. package/dist/types/index.js.map +1 -0
  129. package/dist/web/client/MCPClient.js +348 -0
  130. package/dist/web/client/MCPTestRunner.js +317 -0
  131. package/dist/web/database/json-manager.js +124 -0
  132. package/dist/web/database/sqlite-manager.js +146 -0
  133. package/dist/web/dynamic-mcp-executor.js +443 -0
  134. package/dist/web/generators/MCPServerGenerator-new.js +284 -0
  135. package/dist/web/generators/MCPServerGenerator.js +566 -0
  136. package/dist/web/integrated-mcp-server-new.js +394 -0
  137. package/dist/web/parsers/CsvParser.js +144 -0
  138. package/dist/web/parsers/DatabaseParser.js +637 -0
  139. package/dist/web/parsers/ExcelParser.js +180 -0
  140. package/dist/web/parsers/index.js +152 -0
  141. package/dist/web/server.d.ts +3 -0
  142. package/dist/web/server.d.ts.map +1 -0
  143. package/dist/web/server.js +790 -0
  144. package/dist/web/server.js.map +1 -0
  145. package/dist/web/types/index.js +2 -0
  146. package/dist/web/web/server.js +860 -0
  147. package/package.json +68 -0
  148. package/quickmcp-direct-stdio.js +328 -0
  149. package/src/web/public/app.js +1795 -0
  150. package/src/web/public/database-tables.html +711 -0
  151. package/src/web/public/how-to-use.html +571 -0
  152. package/src/web/public/how-to-use.js +255 -0
  153. package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
  154. package/src/web/public/images/2-claude-tools.png +0 -0
  155. package/src/web/public/images/3-claude-developer-settings.png +0 -0
  156. package/src/web/public/images/4-claude-config.png +0 -0
  157. package/src/web/public/images/5-claude-config-edit.png +0 -0
  158. package/src/web/public/index.html +626 -0
  159. package/src/web/public/manage-servers.html +198 -0
  160. package/src/web/public/modern-styles.css +946 -0
  161. package/src/web/public/shared-styles.css +2091 -0
  162. package/src/web/public/shared.js +93 -0
  163. package/src/web/public/test-servers.html +302 -0
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPServerGenerator = void 0;
4
+ const sqlite_manager_js_1 = require("../database/sqlite-manager.js");
5
+ class MCPServerGenerator {
6
+ constructor() {
7
+ this.sqliteManager = new sqlite_manager_js_1.SQLiteManager();
8
+ }
9
+ async generateServer(serverId, serverName, parsedData, dbConfig) {
10
+ try {
11
+ console.error(`🚀 Generating virtual MCP server: ${serverId}`);
12
+ // Create server config
13
+ console.error(`📝 Creating server config with serverId: "${serverId}", serverName: "${serverName}"`);
14
+ const serverConfig = {
15
+ id: serverId,
16
+ name: serverName,
17
+ dbConfig: dbConfig,
18
+ createdAt: new Date().toISOString()
19
+ };
20
+ console.error('📄 Server config created:', JSON.stringify(serverConfig, null, 2));
21
+ // Save server to SQLite database only
22
+ this.sqliteManager.saveServer(serverConfig);
23
+ console.error(`✅ Server config saved to SQLite database: ${serverId}`);
24
+ // Generate and save tools
25
+ const tools = this.generateToolsForData(serverId, parsedData, dbConfig);
26
+ if (tools.length > 0) {
27
+ this.sqliteManager.saveTools(tools);
28
+ console.error(`✅ Generated ${tools.length} tools for server ${serverId}`);
29
+ }
30
+ // Generate and save resources
31
+ const resources = this.generateResourcesForData(serverId, parsedData, dbConfig);
32
+ if (resources.length > 0) {
33
+ this.sqliteManager.saveResources(resources);
34
+ console.error(`✅ Generated ${resources.length} resources for server ${serverId}`);
35
+ }
36
+ return {
37
+ success: true,
38
+ message: `Virtual MCP server '${serverId}' created successfully with ${tools.length} tools and ${resources.length} resources`
39
+ };
40
+ }
41
+ catch (error) {
42
+ console.error(`❌ Error generating server ${serverId}:`, error);
43
+ return {
44
+ success: false,
45
+ message: `Failed to generate server: ${error instanceof Error ? error.message : 'Unknown error'}`
46
+ };
47
+ }
48
+ }
49
+ generateToolsForData(serverId, parsedData, dbConfig) {
50
+ const tools = [];
51
+ for (const [tableName, rows] of Object.entries(parsedData)) {
52
+ if (!rows || rows.length === 0)
53
+ continue;
54
+ const columns = this.analyzeColumns(rows);
55
+ const cleanTableName = this.sanitizeName(tableName);
56
+ // GET tool
57
+ tools.push({
58
+ server_id: serverId,
59
+ name: `get_${cleanTableName}`,
60
+ description: `Get records from ${tableName} table`,
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ limit: {
65
+ type: 'number',
66
+ description: 'Maximum number of records to return',
67
+ default: 100,
68
+ minimum: 1,
69
+ maximum: 1000
70
+ },
71
+ offset: {
72
+ type: 'number',
73
+ description: 'Number of records to skip',
74
+ default: 0,
75
+ minimum: 0
76
+ },
77
+ ...this.generateFilterProperties(columns)
78
+ },
79
+ required: []
80
+ },
81
+ sqlQuery: this.generateSelectQuery(tableName, columns, dbConfig.type),
82
+ operation: 'SELECT'
83
+ });
84
+ // CREATE tool
85
+ tools.push({
86
+ server_id: serverId,
87
+ name: `create_${cleanTableName}`,
88
+ description: `Create a new record in ${tableName} table`,
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: this.generateInputProperties(columns, true),
92
+ required: columns.filter(col => !col.nullable && col.name.toLowerCase() !== 'id').map(col => col.name)
93
+ },
94
+ sqlQuery: this.generateInsertQuery(tableName, columns, dbConfig.type),
95
+ operation: 'INSERT'
96
+ });
97
+ // UPDATE tool
98
+ if (columns.some(col => col.name.toLowerCase() === 'id')) {
99
+ tools.push({
100
+ server_id: serverId,
101
+ name: `update_${cleanTableName}`,
102
+ description: `Update a record in ${tableName} table`,
103
+ inputSchema: {
104
+ type: 'object',
105
+ properties: {
106
+ id: {
107
+ type: ['string', 'number'],
108
+ description: 'ID of the record to update'
109
+ },
110
+ ...this.generateInputProperties(columns, false)
111
+ },
112
+ required: ['id']
113
+ },
114
+ sqlQuery: this.generateUpdateQuery(tableName, columns, dbConfig.type),
115
+ operation: 'UPDATE'
116
+ });
117
+ // DELETE tool
118
+ tools.push({
119
+ server_id: serverId,
120
+ name: `delete_${cleanTableName}`,
121
+ description: `Delete a record from ${tableName} table`,
122
+ inputSchema: {
123
+ type: 'object',
124
+ properties: {
125
+ id: {
126
+ type: ['string', 'number'],
127
+ description: 'ID of the record to delete'
128
+ }
129
+ },
130
+ required: ['id']
131
+ },
132
+ sqlQuery: this.generateDeleteQuery(tableName, dbConfig.type),
133
+ operation: 'DELETE'
134
+ });
135
+ }
136
+ }
137
+ return tools;
138
+ }
139
+ generateResourcesForData(serverId, parsedData, dbConfig) {
140
+ const resources = [];
141
+ for (const [tableName, rows] of Object.entries(parsedData)) {
142
+ if (!rows || rows.length === 0)
143
+ continue;
144
+ const cleanTableName = this.sanitizeName(tableName);
145
+ resources.push({
146
+ server_id: serverId,
147
+ name: `${cleanTableName}_list`,
148
+ description: `List all records from ${tableName} table`,
149
+ uri_template: `${cleanTableName}://list`,
150
+ sqlQuery: this.generateSelectQuery(tableName, this.analyzeColumns(rows), dbConfig.type, false)
151
+ });
152
+ }
153
+ return resources;
154
+ }
155
+ analyzeColumns(rows) {
156
+ if (!rows || rows.length === 0)
157
+ return [];
158
+ const firstRow = rows[0];
159
+ const columns = [];
160
+ for (const [key, value] of Object.entries(firstRow)) {
161
+ let type = 'string';
162
+ if (typeof value === 'number') {
163
+ type = Number.isInteger(value) ? 'integer' : 'number';
164
+ }
165
+ else if (typeof value === 'boolean') {
166
+ type = 'boolean';
167
+ }
168
+ else if (value instanceof Date) {
169
+ type = 'string'; // Dates are handled as strings in JSON
170
+ }
171
+ else if (value === null || value === undefined) {
172
+ // Check other rows to determine type
173
+ for (let i = 1; i < Math.min(rows.length, 10); i++) {
174
+ const otherValue = rows[i][key];
175
+ if (otherValue !== null && otherValue !== undefined) {
176
+ if (typeof otherValue === 'number') {
177
+ type = Number.isInteger(otherValue) ? 'integer' : 'number';
178
+ }
179
+ else if (typeof otherValue === 'boolean') {
180
+ type = 'boolean';
181
+ }
182
+ break;
183
+ }
184
+ }
185
+ }
186
+ columns.push({
187
+ name: key,
188
+ type: type,
189
+ nullable: rows.some(row => row[key] === null || row[key] === undefined)
190
+ });
191
+ }
192
+ return columns;
193
+ }
194
+ generateFilterProperties(columns) {
195
+ const properties = {};
196
+ for (const column of columns) {
197
+ const baseType = column.type === 'integer' ? 'number' : column.type;
198
+ properties[`filter_${column.name}`] = {
199
+ type: baseType,
200
+ description: `Filter by ${column.name}`
201
+ };
202
+ }
203
+ return properties;
204
+ }
205
+ generateInputProperties(columns, isCreate) {
206
+ const properties = {};
207
+ for (const column of columns) {
208
+ // Skip ID field for create operations
209
+ if (isCreate && column.name.toLowerCase() === 'id')
210
+ continue;
211
+ const baseType = column.type === 'integer' ? 'number' : column.type;
212
+ properties[column.name] = {
213
+ type: baseType,
214
+ description: `${column.name} field`
215
+ };
216
+ }
217
+ return properties;
218
+ }
219
+ generateSelectQuery(tableName, columns, dbType, withParams = true) {
220
+ const columnList = columns.map(col => `[${col.name}]`).join(', ');
221
+ let query = `SELECT ${columnList} FROM [${tableName}]`;
222
+ if (withParams) {
223
+ const whereConditions = columns.map(col => `(@filter_${col.name} IS NULL OR [${col.name}] = @filter_${col.name})`).join(' AND ');
224
+ query += ` WHERE ${whereConditions}`;
225
+ if (dbType === 'mssql') {
226
+ // Use TOP for SQL Server to avoid OFFSET/FETCH complexity
227
+ // Replace SELECT with SELECT TOP
228
+ query = query.replace('SELECT ', 'SELECT TOP (@limit) ');
229
+ }
230
+ else {
231
+ query += ' LIMIT @limit OFFSET @offset';
232
+ }
233
+ }
234
+ return query;
235
+ }
236
+ generateInsertQuery(tableName, columns, dbType) {
237
+ const insertColumns = columns.filter(col => col.name.toLowerCase() !== 'id');
238
+ const columnNames = insertColumns.map(col => `[${col.name}]`).join(', ');
239
+ const paramNames = insertColumns.map(col => `@${col.name}`).join(', ');
240
+ return `INSERT INTO [${tableName}] (${columnNames}) VALUES (${paramNames})`;
241
+ }
242
+ generateUpdateQuery(tableName, columns, dbType) {
243
+ const updateColumns = columns.filter(col => col.name.toLowerCase() !== 'id');
244
+ const setClause = updateColumns.map(col => `[${col.name}] = @${col.name}`).join(', ');
245
+ return `UPDATE [${tableName}] SET ${setClause} WHERE [Id] = @id`;
246
+ }
247
+ generateDeleteQuery(tableName, dbType) {
248
+ return `DELETE FROM [${tableName}] WHERE [Id] = @id`;
249
+ }
250
+ sanitizeName(name) {
251
+ return name.toLowerCase()
252
+ .replace(/[^a-z0-9]/g, '_')
253
+ .replace(/_{2,}/g, '_')
254
+ .replace(/^_|_$/g, '');
255
+ }
256
+ // Public methods for management
257
+ getAllServers() {
258
+ return this.sqliteManager.getAllServers();
259
+ }
260
+ getServer(serverId) {
261
+ return this.sqliteManager.getServer(serverId);
262
+ }
263
+ deleteServer(serverId) {
264
+ this.sqliteManager.deleteServer(serverId);
265
+ console.error(`🗑️ Deleted server from SQLite database: ${serverId}`);
266
+ }
267
+ getAllTools() {
268
+ return this.sqliteManager.getAllTools();
269
+ }
270
+ getToolsForServer(serverId) {
271
+ return this.sqliteManager.getToolsForServer(serverId);
272
+ }
273
+ getAllResources() {
274
+ return this.sqliteManager.getAllResources();
275
+ }
276
+ getResourcesForServer(serverId) {
277
+ return this.sqliteManager.getResourcesForServer(serverId);
278
+ }
279
+ getStats() {
280
+ return this.sqliteManager.getStats();
281
+ }
282
+ close() {
283
+ this.sqliteManager.close();
284
+ }
285
+ }
286
+ exports.MCPServerGenerator = MCPServerGenerator;
287
+ //# sourceMappingURL=MCPServerGenerator-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPServerGenerator-new.js","sourceRoot":"","sources":["../../src/generators/MCPServerGenerator-new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { ServerConfig, ToolDefinition, ResourceDefinition } from '../database/sqlite-manager';
2
+ interface ParsedData {
3
+ [tableName: string]: any[];
4
+ }
5
+ export declare class MCPServerGenerator {
6
+ private sqliteManager;
7
+ constructor();
8
+ generateServer(serverId: string, serverName: string, parsedData: ParsedData, dbConfig: any, selectedTables?: any[]): Promise<{
9
+ success: boolean;
10
+ message: string;
11
+ }>;
12
+ private generateToolsForData;
13
+ private generateResourcesForData;
14
+ private analyzeColumns;
15
+ private generateFilterProperties;
16
+ private generateInputProperties;
17
+ private generateSelectQuery;
18
+ private generateInsertQuery;
19
+ private generateUpdateQuery;
20
+ private generateDeleteQuery;
21
+ private generateCountQuery;
22
+ private generateMinQuery;
23
+ private generateMaxQuery;
24
+ private generateSumQuery;
25
+ private generateAvgQuery;
26
+ private sanitizeName;
27
+ getAllServers(): ServerConfig[];
28
+ getServer(serverId: string): ServerConfig | null;
29
+ deleteServer(serverId: string): void;
30
+ getAllTools(): ToolDefinition[];
31
+ getToolsForServer(serverId: string): ToolDefinition[];
32
+ getAllResources(): ResourceDefinition[];
33
+ getResourcesForServer(serverId: string): ResourceDefinition[];
34
+ getStats(): {
35
+ servers: number;
36
+ tools: number;
37
+ resources: number;
38
+ };
39
+ close(): void;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=MCPServerGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPServerGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/MCPServerGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAQ7G,UAAU,UAAU;IAClB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;CAC5B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;;IAM/B,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,GAAG,EACb,cAAc,CAAC,EAAE,GAAG,EAAE,GACrB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA6CjD,OAAO,CAAC,oBAAoB;IA6O5B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,cAAc;IAwCtB,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,mBAAmB;IA6C3B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,YAAY;IAQpB,aAAa,IAAI,YAAY,EAAE;IAI/B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAIhD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKpC,WAAW,IAAI,cAAc,EAAE;IAI/B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IAIrD,eAAe,IAAI,kBAAkB,EAAE;IAIvC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAI7D,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAIjE,KAAK,IAAI,IAAI;CAGd"}