mcp-aiven 0.1.5

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 (132) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +173 -0
  3. package/dist/client.d.ts +16 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +84 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/config.d.ts +15 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +35 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/errors.d.ts +8 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +42 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/generated/aiven-api.d.ts +49982 -0
  16. package/dist/generated/aiven-api.d.ts.map +1 -0
  17. package/dist/generated/aiven-api.js +6 -0
  18. package/dist/generated/aiven-api.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +85 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/manifests/core.yaml +206 -0
  24. package/dist/manifests/integrations.yaml +72 -0
  25. package/dist/manifests/kafka.yaml +143 -0
  26. package/dist/manifests/pg.yaml +43 -0
  27. package/dist/prompts.d.ts +5 -0
  28. package/dist/prompts.d.ts.map +1 -0
  29. package/dist/prompts.js +10 -0
  30. package/dist/prompts.js.map +1 -0
  31. package/dist/security.d.ts +5 -0
  32. package/dist/security.d.ts.map +1 -0
  33. package/dist/security.js +52 -0
  34. package/dist/security.js.map +1 -0
  35. package/dist/shared/service-info.d.ts +5 -0
  36. package/dist/shared/service-info.d.ts.map +1 -0
  37. package/dist/shared/service-info.js +24 -0
  38. package/dist/shared/service-info.js.map +1 -0
  39. package/dist/tool-result-limit.d.ts +7 -0
  40. package/dist/tool-result-limit.d.ts.map +1 -0
  41. package/dist/tool-result-limit.js +44 -0
  42. package/dist/tool-result-limit.js.map +1 -0
  43. package/dist/tools/api-tool.d.ts +4 -0
  44. package/dist/tools/api-tool.d.ts.map +1 -0
  45. package/dist/tools/api-tool.js +80 -0
  46. package/dist/tools/api-tool.js.map +1 -0
  47. package/dist/tools/applications/handlers.d.ts +4 -0
  48. package/dist/tools/applications/handlers.d.ts.map +1 -0
  49. package/dist/tools/applications/handlers.js +345 -0
  50. package/dist/tools/applications/handlers.js.map +1 -0
  51. package/dist/tools/applications/index.d.ts +2 -0
  52. package/dist/tools/applications/index.d.ts.map +1 -0
  53. package/dist/tools/applications/index.js +2 -0
  54. package/dist/tools/applications/index.js.map +1 -0
  55. package/dist/tools/applications/schemas.d.ts +276 -0
  56. package/dist/tools/applications/schemas.d.ts.map +1 -0
  57. package/dist/tools/applications/schemas.js +204 -0
  58. package/dist/tools/applications/schemas.js.map +1 -0
  59. package/dist/tools/json-schema-to-zod.d.ts +4 -0
  60. package/dist/tools/json-schema-to-zod.d.ts.map +1 -0
  61. package/dist/tools/json-schema-to-zod.js +118 -0
  62. package/dist/tools/json-schema-to-zod.js.map +1 -0
  63. package/dist/tools/kafka/descriptions.d.ts +3 -0
  64. package/dist/tools/kafka/descriptions.d.ts.map +1 -0
  65. package/dist/tools/kafka/descriptions.js +43 -0
  66. package/dist/tools/kafka/descriptions.js.map +1 -0
  67. package/dist/tools/kafka/handlers.d.ts +4 -0
  68. package/dist/tools/kafka/handlers.d.ts.map +1 -0
  69. package/dist/tools/kafka/handlers.js +65 -0
  70. package/dist/tools/kafka/handlers.js.map +1 -0
  71. package/dist/tools/kafka/helpers.d.ts +4 -0
  72. package/dist/tools/kafka/helpers.d.ts.map +1 -0
  73. package/dist/tools/kafka/helpers.js +79 -0
  74. package/dist/tools/kafka/helpers.js.map +1 -0
  75. package/dist/tools/kafka/index.d.ts +2 -0
  76. package/dist/tools/kafka/index.d.ts.map +1 -0
  77. package/dist/tools/kafka/index.js +2 -0
  78. package/dist/tools/kafka/index.js.map +1 -0
  79. package/dist/tools/kafka/schemas.d.ts +43 -0
  80. package/dist/tools/kafka/schemas.d.ts.map +1 -0
  81. package/dist/tools/kafka/schemas.js +23 -0
  82. package/dist/tools/kafka/schemas.js.map +1 -0
  83. package/dist/tools/pg/connection.d.ts +5 -0
  84. package/dist/tools/pg/connection.d.ts.map +1 -0
  85. package/dist/tools/pg/connection.js +28 -0
  86. package/dist/tools/pg/connection.js.map +1 -0
  87. package/dist/tools/pg/descriptions.d.ts +4 -0
  88. package/dist/tools/pg/descriptions.d.ts.map +1 -0
  89. package/dist/tools/pg/descriptions.js +66 -0
  90. package/dist/tools/pg/descriptions.js.map +1 -0
  91. package/dist/tools/pg/handlers.d.ts +4 -0
  92. package/dist/tools/pg/handlers.d.ts.map +1 -0
  93. package/dist/tools/pg/handlers.js +91 -0
  94. package/dist/tools/pg/handlers.js.map +1 -0
  95. package/dist/tools/pg/index.d.ts +2 -0
  96. package/dist/tools/pg/index.d.ts.map +1 -0
  97. package/dist/tools/pg/index.js +2 -0
  98. package/dist/tools/pg/index.js.map +1 -0
  99. package/dist/tools/pg/query.d.ts +6 -0
  100. package/dist/tools/pg/query.d.ts.map +1 -0
  101. package/dist/tools/pg/query.js +120 -0
  102. package/dist/tools/pg/query.js.map +1 -0
  103. package/dist/tools/pg/schemas.d.ts +59 -0
  104. package/dist/tools/pg/schemas.d.ts.map +1 -0
  105. package/dist/tools/pg/schemas.js +69 -0
  106. package/dist/tools/pg/schemas.js.map +1 -0
  107. package/dist/tools/pg/validation.d.ts +10 -0
  108. package/dist/tools/pg/validation.d.ts.map +1 -0
  109. package/dist/tools/pg/validation.js +77 -0
  110. package/dist/tools/pg/validation.js.map +1 -0
  111. package/dist/tools/registry.d.ts +4 -0
  112. package/dist/tools/registry.d.ts.map +1 -0
  113. package/dist/tools/registry.js +120 -0
  114. package/dist/tools/registry.js.map +1 -0
  115. package/dist/tools/response-filter.d.ts +3 -0
  116. package/dist/tools/response-filter.d.ts.map +1 -0
  117. package/dist/tools/response-filter.js +19 -0
  118. package/dist/tools/response-filter.js.map +1 -0
  119. package/dist/transport.d.ts +14 -0
  120. package/dist/transport.d.ts.map +1 -0
  121. package/dist/transport.js +111 -0
  122. package/dist/transport.js.map +1 -0
  123. package/dist/types.d.ts +127 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +81 -0
  126. package/dist/types.js.map +1 -0
  127. package/generator/schemas/api-schemas.json +2106 -0
  128. package/package.json +78 -0
  129. package/src/manifests/core.yaml +206 -0
  130. package/src/manifests/integrations.yaml +72 -0
  131. package/src/manifests/kafka.yaml +143 -0
  132. package/src/manifests/pg.yaml +43 -0
@@ -0,0 +1,111 @@
1
+ import { createHash } from 'node:crypto';
2
+ import express from 'express';
3
+ import rateLimit, { ipKeyGenerator } from 'express-rate-limit';
4
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
+ import { HOST } from './config.js';
7
+ export function createStdioTransport() {
8
+ return new StdioServerTransport();
9
+ }
10
+ const RATE_LIMIT_PROPERTY = 'rateLimit';
11
+ /** Logs and sends the same response as express-rate-limit's default handler. */
12
+ function rateLimitExceededHandler(scope) {
13
+ return (request, response, _next, optionsUsed) => {
14
+ const rl = request[RATE_LIMIT_PROPERTY];
15
+ const ip = request.ip ?? 'unknown';
16
+ const path = request.path || request.url || '';
17
+ console.warn(`mcp-aiven: rate limit exceeded (${scope}) ${request.method} ${path} ip=${ip}` +
18
+ (rl !== undefined ? ` limit=${rl.limit} used=${rl.used} keyPrefix=${rl.key.slice(0, 8)}` : ''));
19
+ response.status(optionsUsed.statusCode);
20
+ const message = optionsUsed.message;
21
+ if (typeof message === 'function') {
22
+ void Promise.resolve(message(request, response)).then((body) => {
23
+ if (!response.writableEnded)
24
+ response.send(body);
25
+ });
26
+ }
27
+ else if (!response.writableEnded) {
28
+ response.send(message);
29
+ }
30
+ };
31
+ }
32
+ function createMcpPostRateLimit(cfg, message) {
33
+ return rateLimit({
34
+ windowMs: cfg.windowMs,
35
+ limit: cfg.limit,
36
+ standardHeaders: 'draft-7',
37
+ legacyHeaders: false,
38
+ keyGenerator: (req) => mcpRequestKey(req),
39
+ message,
40
+ handler: rateLimitExceededHandler('mcp-post'),
41
+ });
42
+ }
43
+ function authMiddleware(req, res, next) {
44
+ const [scheme, token] = (req.headers.authorization ?? '').split(' ', 2);
45
+ if (scheme !== 'Bearer' || !token) {
46
+ res.status(401).json({ error: 'Missing or invalid Authorization header' });
47
+ return;
48
+ }
49
+ req.token = token;
50
+ next();
51
+ }
52
+ function mcpRequestKey(req) {
53
+ const auth = req.headers.authorization;
54
+ if (typeof auth === 'string' && auth.startsWith('Bearer ')) {
55
+ const token = auth.slice(7).trim();
56
+ if (token.length > 0) {
57
+ return createHash('sha256').update(token).digest('hex');
58
+ }
59
+ }
60
+ return ipKeyGenerator(req.ip ?? '0.0.0.0');
61
+ }
62
+ export function startHttpServer(createServer, config) {
63
+ const app = express();
64
+ if (config.trustProxy) {
65
+ app.set('trust proxy', 1);
66
+ }
67
+ app.use(express.json({ limit: '5mb' }));
68
+ const mcpPostRateLimit = createMcpPostRateLimit(config.rateLimit, {
69
+ error: 'Too many MCP requests. Please wait before trying again.',
70
+ });
71
+ app.get('/health', (_req, res) => {
72
+ res.json({ status: 'ok' });
73
+ });
74
+ app.get('/.well-known/oauth-protected-resource', (_req, res) => {
75
+ res.json({
76
+ resource: HOST,
77
+ authorization_servers: [config.apiOrigin],
78
+ scopes_supported: config.scopes,
79
+ bearer_methods_supported: ['header'],
80
+ });
81
+ });
82
+ app.get('/mcp', (_req, res) => {
83
+ res.status(405).set('Allow', 'POST').json({ error: 'Method Not Allowed' });
84
+ });
85
+ app.delete('/mcp', (_req, res) => {
86
+ res.status(405).set('Allow', 'POST').json({ error: 'Method Not Allowed' });
87
+ });
88
+ app.post('/mcp', mcpPostRateLimit, authMiddleware, (req, res) => {
89
+ void (async () => {
90
+ const token = req.token;
91
+ const transport = new StreamableHTTPServerTransport({ enableJsonResponse: true });
92
+ const mcpServer = createServer();
93
+ await mcpServer.connect(transport);
94
+ req.auth = {
95
+ token,
96
+ clientId: 'aiven',
97
+ scopes: [],
98
+ };
99
+ await transport.handleRequest(req, res, req.body);
100
+ })().catch((err) => {
101
+ console.error('mcp-aiven: MCP handler error:', err);
102
+ if (!res.headersSent) {
103
+ res.status(500).json({ error: 'Internal server error' });
104
+ }
105
+ });
106
+ });
107
+ app.listen(config.port, () => {
108
+ console.error(`mcp-aiven: HTTP listening on port ${config.port}`);
109
+ });
110
+ }
111
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import type { z } from 'zod';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ export declare enum ServiceCategory {
4
+ Core = "core",
5
+ Pg = "pg",
6
+ Kafka = "kafka",
7
+ Application = "application",
8
+ Integrations = "integrations"
9
+ }
10
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
11
+ export interface AivenConfig {
12
+ readonly token: string | undefined;
13
+ readonly readOnly: boolean;
14
+ readonly transport: 'stdio' | 'http';
15
+ }
16
+ export interface RequestOptions {
17
+ query?: Record<string, string | number | boolean | undefined> | undefined;
18
+ timeout?: number | undefined;
19
+ token?: string | undefined;
20
+ toolName?: string | undefined;
21
+ mcpClient?: string | undefined;
22
+ }
23
+ export interface ToolAnnotations {
24
+ readOnlyHint: boolean;
25
+ destructiveHint: boolean;
26
+ idempotentHint: boolean;
27
+ openWorldHint: boolean;
28
+ }
29
+ export declare const READ_ONLY_ANNOTATIONS: ToolAnnotations;
30
+ export declare const CREATE_ANNOTATIONS: ToolAnnotations;
31
+ export declare const UPDATE_ANNOTATIONS: ToolAnnotations;
32
+ export declare const DELETE_ANNOTATIONS: ToolAnnotations;
33
+ export declare const WRITE_DML_ANNOTATIONS: ToolAnnotations;
34
+ export type ToolResult = CallToolResult;
35
+ export interface HandlerContext {
36
+ token?: string | undefined;
37
+ mcpClient?: string | undefined;
38
+ }
39
+ export interface ToolDefinition<TInput extends z.ZodType = z.ZodType> {
40
+ name: string;
41
+ category: ServiceCategory;
42
+ definition: {
43
+ title: string;
44
+ description: string;
45
+ inputSchema: TInput;
46
+ annotations: ToolAnnotations;
47
+ outputSchema?: z.ZodType | undefined;
48
+ };
49
+ handler: (params: z.infer<TInput>, context?: HandlerContext) => Promise<ToolResult>;
50
+ }
51
+ export declare function toolSuccess(data: string | Record<string, unknown>): ToolResult;
52
+ export declare function toolError(message: string): ToolResult;
53
+ export interface JsonSchema {
54
+ type?: string;
55
+ description?: string;
56
+ properties?: Record<string, JsonSchema>;
57
+ required?: string[];
58
+ items?: JsonSchema;
59
+ enum?: string[];
60
+ minimum?: number;
61
+ maximum?: number;
62
+ minLength?: number;
63
+ maxLength?: number;
64
+ pattern?: string;
65
+ default?: unknown;
66
+ nullable?: boolean;
67
+ additionalProperties?: boolean | JsonSchema;
68
+ oneOf?: JsonSchema[];
69
+ anyOf?: JsonSchema[];
70
+ format?: string;
71
+ }
72
+ export interface ResponseFilterConfig {
73
+ key: string;
74
+ fields: string[];
75
+ }
76
+ export type ToolSpec = ApiToolConfig;
77
+ export interface ApiToolConfig {
78
+ name: string;
79
+ title: string;
80
+ description: string;
81
+ category: ServiceCategory;
82
+ method: HttpMethod;
83
+ path: string;
84
+ inputSchema: z.ZodType;
85
+ annotations: ToolAnnotations;
86
+ defaults?: Record<string, unknown> | undefined;
87
+ responseFilter?: ResponseFilterConfig | undefined;
88
+ }
89
+ export interface ServiceConnectionInfo {
90
+ host: string;
91
+ port: number;
92
+ user: string;
93
+ password: string;
94
+ dbname: string;
95
+ }
96
+ export declare enum PgToolName {
97
+ OptimizeQuery = "aiven_pg_optimize_query",
98
+ Read = "aiven_pg_read",
99
+ Write = "aiven_pg_write"
100
+ }
101
+ export declare enum PgQueryMode {
102
+ ReadOnly = "read-only",
103
+ ReadWrite = "read-write"
104
+ }
105
+ export interface ExecutePgQueryOptions {
106
+ project: string;
107
+ service_name: string;
108
+ query: string;
109
+ database?: string | undefined;
110
+ mode: PgQueryMode;
111
+ limit?: number | undefined;
112
+ offset?: number | undefined;
113
+ token?: string | undefined;
114
+ mcpClient?: string | undefined;
115
+ toolName?: string | undefined;
116
+ }
117
+ export declare enum ApplicationToolName {
118
+ Deploy = "aiven_application_deploy",
119
+ Redeploy = "aiven_application_redeploy",
120
+ VcsIntegrationList = "aiven_vcs_integration_list",
121
+ VcsIntegrationRepositoryList = "aiven_vcs_integration_repository_list"
122
+ }
123
+ export declare enum KafkaToolName {
124
+ ConnectCreateConnector = "aiven_kafka_connect_create_connector",
125
+ ConnectEditConnector = "aiven_kafka_connect_edit_connector"
126
+ }
127
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,81 @@
1
+ import { applyToolResultCharCap } from './tool-result-limit.js';
2
+ export var ServiceCategory;
3
+ (function (ServiceCategory) {
4
+ ServiceCategory["Core"] = "core";
5
+ ServiceCategory["Pg"] = "pg";
6
+ ServiceCategory["Kafka"] = "kafka";
7
+ ServiceCategory["Application"] = "application";
8
+ ServiceCategory["Integrations"] = "integrations";
9
+ })(ServiceCategory || (ServiceCategory = {}));
10
+ export const READ_ONLY_ANNOTATIONS = {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: true,
15
+ };
16
+ export const CREATE_ANNOTATIONS = {
17
+ readOnlyHint: false,
18
+ destructiveHint: false,
19
+ idempotentHint: false,
20
+ openWorldHint: true,
21
+ };
22
+ export const UPDATE_ANNOTATIONS = {
23
+ readOnlyHint: false,
24
+ destructiveHint: false,
25
+ idempotentHint: true,
26
+ openWorldHint: true,
27
+ };
28
+ export const DELETE_ANNOTATIONS = {
29
+ readOnlyHint: false,
30
+ destructiveHint: true,
31
+ idempotentHint: true,
32
+ openWorldHint: true,
33
+ };
34
+ export const WRITE_DML_ANNOTATIONS = {
35
+ readOnlyHint: false,
36
+ destructiveHint: true,
37
+ idempotentHint: false,
38
+ openWorldHint: true,
39
+ };
40
+ function textContent(text) {
41
+ return { type: 'text', text };
42
+ }
43
+ export function toolSuccess(data) {
44
+ const text = typeof data === 'string' ? data : JSON.stringify(data);
45
+ const capped = applyToolResultCharCap(text);
46
+ return {
47
+ content: [textContent(capped)],
48
+ };
49
+ }
50
+ export function toolError(message) {
51
+ return {
52
+ content: [textContent(message)],
53
+ isError: true,
54
+ };
55
+ }
56
+ export var PgToolName;
57
+ (function (PgToolName) {
58
+ PgToolName["OptimizeQuery"] = "aiven_pg_optimize_query";
59
+ PgToolName["Read"] = "aiven_pg_read";
60
+ PgToolName["Write"] = "aiven_pg_write";
61
+ })(PgToolName || (PgToolName = {}));
62
+ export var PgQueryMode;
63
+ (function (PgQueryMode) {
64
+ PgQueryMode["ReadOnly"] = "read-only";
65
+ PgQueryMode["ReadWrite"] = "read-write";
66
+ })(PgQueryMode || (PgQueryMode = {}));
67
+ // ---------- Application ----------
68
+ export var ApplicationToolName;
69
+ (function (ApplicationToolName) {
70
+ ApplicationToolName["Deploy"] = "aiven_application_deploy";
71
+ ApplicationToolName["Redeploy"] = "aiven_application_redeploy";
72
+ ApplicationToolName["VcsIntegrationList"] = "aiven_vcs_integration_list";
73
+ ApplicationToolName["VcsIntegrationRepositoryList"] = "aiven_vcs_integration_repository_list";
74
+ })(ApplicationToolName || (ApplicationToolName = {}));
75
+ // ---------- Kafka ----------
76
+ export var KafkaToolName;
77
+ (function (KafkaToolName) {
78
+ KafkaToolName["ConnectCreateConnector"] = "aiven_kafka_connect_create_connector";
79
+ KafkaToolName["ConnectEditConnector"] = "aiven_kafka_connect_edit_connector";
80
+ })(KafkaToolName || (KafkaToolName = {}));
81
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,4BAAS,CAAA;IACT,kCAAe,CAAA;IACf,8CAA2B,CAAA;IAC3B,gDAA6B,CAAA;AAC/B,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAyBD,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,IAAI;CACpB,CAAC;AAsBF,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAsC;IAChE,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO;QACL,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAkDD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,uDAAyC,CAAA;IACzC,oCAAsB,CAAA;IACtB,sCAAwB,CAAA;AAC1B,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,qCAAsB,CAAA;IACtB,uCAAwB,CAAA;AAC1B,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAeD,oCAAoC;AAEpC,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,0DAAmC,CAAA;IACnC,8DAAuC,CAAA;IACvC,wEAAiD,CAAA;IACjD,6FAAsE,CAAA;AACxE,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAED,8BAA8B;AAE9B,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,gFAA+D,CAAA;IAC/D,4EAA2D,CAAA;AAC7D,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"}