@bulkpublishing/mcp-server 1.0.5 → 1.1.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.
@@ -2,17 +2,18 @@
2
2
  * BPAI MCP Server — Content Generation Tools
3
3
  *
4
4
  * MCP tool handlers for:
5
- * - generate_article: Single article generation
6
- * - generate_batch: Bulk generation from keyword list
5
+ * - generate_article: Single article generation (with inline linking overrides)
6
+ * - generate_batch: Bulk generation from keyword list (with cross-linking)
7
7
  * - list_models: List all available AI models
8
8
  *
9
9
  * API keys are loaded from the authenticated user's BPAI account.
10
10
  * No inline key parameters needed.
11
11
  */
12
12
  import { z } from 'zod';
13
- import { generateContent, listModels } from '../ai/engine.js';
13
+ import { generateContent, generateContentWithRetry, listModels } from '../ai/engine.js';
14
14
  import { buildGenerationPrompt, HUMANIZE_PROMPT } from '../ai/prompts.js';
15
15
  import { getUserContext, getApiKey, getKnowledgeBaseContext, getProjectSettings } from '../auth/context.js';
16
+ import { fetchAllSitemapUrls, detectPermalinkPattern } from './linking.js';
16
17
  export function registerGenerationTools(server) {
17
18
  // ============================================
18
19
  // generate_article
@@ -29,6 +30,8 @@ export function registerGenerationTools(server) {
29
30
  include_knowledge_base: z.boolean().optional().default(true).describe('Include project knowledge base context'),
30
31
  internal_linking: z.boolean().optional().default(true).describe('Apply internal linking from project settings'),
31
32
  max_internal_links: z.number().optional().default(5).describe('Max internal links to include (1-10)'),
33
+ sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for link candidates instead of using project settings. Useful when project settings are not pre-configured.'),
34
+ link_candidates: z.array(z.string()).optional().describe('Inline override: provide a direct list of URLs for internal linking. Takes priority over sitemap_url and project settings.'),
32
35
  project_id: z.string().optional().describe('Project ID (defaults to active project)'),
33
36
  }, async (args) => {
34
37
  const ctx = getUserContext();
@@ -59,10 +62,28 @@ export function registerGenerationTools(server) {
59
62
  // Load project-level context
60
63
  const project = getProjectSettings(args.project_id);
61
64
  const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
62
- // Resolve internal linking URLs from project settings
65
+ // Resolve internal linking URLs with priority chain:
66
+ // 1. link_candidates (inline array) > 2. sitemap_url (inline fetch) > 3. project settings
63
67
  let internalLinkUrls;
64
- if (args.internal_linking && project?.settings?.internal_linking?.enabled) {
65
- internalLinkUrls = project.settings.internal_linking.sitemapUrls;
68
+ if (args.internal_linking) {
69
+ if (args.link_candidates && args.link_candidates.length > 0) {
70
+ // Priority 1: Direct URL list provided inline
71
+ internalLinkUrls = args.link_candidates;
72
+ }
73
+ else if (args.sitemap_url) {
74
+ // Priority 2: Fetch sitemap on-the-fly
75
+ try {
76
+ const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
77
+ internalLinkUrls = [...new Set(rawUrls)];
78
+ }
79
+ catch (err) {
80
+ console.error(`[Generation] Sitemap fetch failed: ${err.message}`);
81
+ }
82
+ }
83
+ else if (project?.settings?.internal_linking?.enabled) {
84
+ // Priority 3: Use pre-saved project settings
85
+ internalLinkUrls = project.settings.internal_linking.sitemapUrls;
86
+ }
66
87
  }
67
88
  // Build prompts
68
89
  const { systemPrompt, userPrompt } = buildGenerationPrompt({
@@ -145,9 +166,9 @@ export function registerGenerationTools(server) {
145
166
  };
146
167
  });
147
168
  // ============================================
148
- // generate_batch
169
+ // generate_batch (with cross-linking support)
149
170
  // ============================================
150
- server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting. API keys are loaded from your BPAI account.', {
171
+ server.tool('generate_batch', 'Generate multiple articles from a list of keywords. Processes sequentially with progress reporting. Supports internal linking (from project settings, inline sitemap, or inline URLs) and cross-linking (interlinking articles within this batch using predicted URLs).', {
151
172
  keywords: z.array(z.string()).describe('Array of keywords to generate articles for'),
152
173
  provider: z.enum(['openai', 'claude', 'deepseek', 'grok', 'gemini', 'perplexity', 'kimi']).default('openai'),
153
174
  model: z.string().optional().describe('Model ID to use for all articles'),
@@ -158,6 +179,13 @@ export function registerGenerationTools(server) {
158
179
  include_knowledge_base: z.boolean().optional().default(true),
159
180
  internal_linking: z.boolean().optional().default(true),
160
181
  max_internal_links: z.number().optional().default(5),
182
+ sitemap_url: z.string().optional().describe('Inline override: fetch this sitemap URL for internal link candidates'),
183
+ link_candidates: z.array(z.string()).optional().describe('Inline override: direct list of URLs for internal linking'),
184
+ cross_linking: z.boolean().optional().default(true).describe('Enable cross-linking between articles in this batch (builds predicted URLs from keywords)'),
185
+ cross_linking_base_url: z.string().optional().describe('Base URL for cross-link slug assembly (e.g., https://example.com/blog). Falls back to project cross_linking.baseUrl, then auto-detects from sitemap URL analysis.'),
186
+ max_cross_links: z.number().optional().default(3).describe('Max cross-links (sibling article links) per article (1-10)'),
187
+ keyword_slugs: z.record(z.string(), z.string()).optional().describe('Explicit keyword→slug mapping for cross-linking (e.g., {"best coffee makers": "best-coffee-makers-2026"}). Overrides auto-slugify for specific keywords.'),
188
+ delay_between_articles: z.number().optional().default(5).describe('Seconds to wait between article generations to prevent rate limit crashes (1-60, default: 5)'),
161
189
  project_id: z.string().optional().describe('Project ID (defaults to active project)'),
162
190
  }, async (args) => {
163
191
  const ctx = getUserContext();
@@ -183,24 +211,132 @@ export function registerGenerationTools(server) {
183
211
  }],
184
212
  };
185
213
  }
214
+ // ── Resolve internal linking URLs (same priority chain as generate_article) ──
215
+ const project = getProjectSettings(args.project_id);
216
+ let internalLinkUrls;
217
+ if (args.internal_linking) {
218
+ if (args.link_candidates && args.link_candidates.length > 0) {
219
+ internalLinkUrls = args.link_candidates;
220
+ }
221
+ else if (args.sitemap_url) {
222
+ try {
223
+ const rawUrls = await fetchAllSitemapUrls(args.sitemap_url);
224
+ internalLinkUrls = [...new Set(rawUrls)];
225
+ }
226
+ catch (err) {
227
+ console.error(`[Batch] Sitemap fetch failed: ${err.message}`);
228
+ }
229
+ }
230
+ else if (project?.settings?.internal_linking?.enabled) {
231
+ internalLinkUrls = project.settings.internal_linking.sitemapUrls;
232
+ }
233
+ }
234
+ // ── Build cross-linking predicted URLs ──
235
+ let crossLinkBaseUrl = '';
236
+ const crossLinkingEnabled = args.cross_linking && args.keywords.length > 1;
237
+ let detectedPattern;
238
+ if (crossLinkingEnabled) {
239
+ // Priority: inline param > project settings > auto-detect from sitemap URL analysis
240
+ crossLinkBaseUrl = args.cross_linking_base_url
241
+ || project?.settings?.cross_linking?.baseUrl
242
+ || '';
243
+ // Smart auto-detection from sitemap URL pool
244
+ if (!crossLinkBaseUrl && internalLinkUrls && internalLinkUrls.length > 0) {
245
+ detectedPattern = detectPermalinkPattern(internalLinkUrls);
246
+ try {
247
+ const origin = new URL(internalLinkUrls[0]).origin;
248
+ const basePath = detectedPattern.basePath === '/' ? '' : detectedPattern.basePath;
249
+ crossLinkBaseUrl = `${origin}${basePath}`;
250
+ }
251
+ catch { /* ignore */ }
252
+ }
253
+ }
254
+ // Build predicted sibling URLs for cross-linking
255
+ const siblingUrls = [];
256
+ if (crossLinkingEnabled && crossLinkBaseUrl) {
257
+ for (const kw of args.keywords) {
258
+ // Use explicit slug mapping if provided, otherwise auto-slugify
259
+ const slug = args.keyword_slugs?.[kw] || slugify(kw);
260
+ const predictedUrl = `${crossLinkBaseUrl.replace(/\/$/, '')}/${slug}`;
261
+ siblingUrls.push({ keyword: kw, predictedUrl });
262
+ }
263
+ }
264
+ const maxCrossLinks = Math.min(Math.max(args.max_cross_links || 3, 1), 10);
265
+ const delayBetweenMs = Math.min(Math.max((args.delay_between_articles || 5), 1), 60) * 1000;
186
266
  const results = [];
187
267
  let completed = 0;
188
268
  let failed = 0;
269
+ let consecutiveFailures = 0;
270
+ const MAX_CONSECUTIVE_FAILURES = 5; // Circuit breaker: stop if 5 in a row fail
271
+ // Safety: cap batch size to prevent multi-hour sessions that exhaust memory
272
+ const MAX_BATCH_SIZE = 100;
273
+ if (args.keywords.length > MAX_BATCH_SIZE) {
274
+ return {
275
+ content: [{
276
+ type: 'text', text: JSON.stringify({
277
+ error: `Batch too large: ${args.keywords.length} keywords exceeds the maximum of ${MAX_BATCH_SIZE}. Split into smaller batches to prevent memory exhaustion and rate limiting. Each batch gets a fresh process lifecycle.`,
278
+ suggestion: `Split your ${args.keywords.length} keywords into ${Math.ceil(args.keywords.length / MAX_BATCH_SIZE)} batches of ~${MAX_BATCH_SIZE} each.`,
279
+ }, null, 2)
280
+ }],
281
+ };
282
+ }
283
+ console.error(`[Batch] Starting ${args.keywords.length} articles | Provider: ${provider} | Delay: ${delayBetweenMs / 1000}s | Cross-linking: ${crossLinkingEnabled}`);
284
+ const batchStartTime = Date.now();
189
285
  for (let i = 0; i < args.keywords.length; i++) {
190
286
  const keyword = args.keywords[i];
287
+ // Circuit breaker: stop if too many consecutive failures
288
+ if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
289
+ console.error(`[Batch] 🛑 Circuit breaker tripped: ${MAX_CONSECUTIVE_FAILURES} consecutive failures. Stopping batch.`);
290
+ // Mark remaining keywords as skipped
291
+ for (let j = i; j < args.keywords.length; j++) {
292
+ results.push({
293
+ keyword: args.keywords[j],
294
+ status: 'skipped',
295
+ error: `Skipped due to circuit breaker: ${MAX_CONSECUTIVE_FAILURES} consecutive failures detected. The upstream provider may be rate limiting or down.`,
296
+ });
297
+ }
298
+ break;
299
+ }
191
300
  try {
192
- const project = getProjectSettings(args.project_id);
301
+ // Progress logging
302
+ const elapsed = Date.now() - batchStartTime;
303
+ const avgPerArticle = completed > 0 ? elapsed / completed : 0;
304
+ const remaining = args.keywords.length - i;
305
+ const etaMin = avgPerArticle > 0 ? ((remaining * avgPerArticle) / 60000).toFixed(1) : '?';
306
+ console.error(`[Batch] 📝 Article ${i + 1}/${args.keywords.length}: "${keyword.substring(0, 50)}" | Done: ${completed} | Failed: ${failed} | ETA: ${etaMin}min`);
307
+ // Memory check every 10 articles
308
+ if (i > 0 && i % 10 === 0) {
309
+ const mem = process.memoryUsage();
310
+ const heapMB = (mem.heapUsed / 1024 / 1024).toFixed(1);
311
+ console.error(`[Batch] 📊 Memory checkpoint: ${heapMB}MB heap used after ${i} articles`);
312
+ // Force garbage collection hint if available
313
+ if (global.gc) {
314
+ global.gc();
315
+ console.error(`[Batch] 🧹 Manual GC triggered`);
316
+ }
317
+ }
193
318
  const kbContext = args.include_knowledge_base ? getKnowledgeBaseContext(args.project_id) : undefined;
194
- let internalLinkUrls;
195
- if (args.internal_linking && project?.settings?.internal_linking?.enabled) {
196
- internalLinkUrls = project.settings.internal_linking.sitemapUrls;
319
+ // Merge internal link URLs with shuffled cross-link siblings
320
+ let mergedLinkUrls = internalLinkUrls ? [...internalLinkUrls] : [];
321
+ if (crossLinkingEnabled && siblingUrls.length > 0) {
322
+ // Get siblings (excluding self)
323
+ const siblings = siblingUrls
324
+ .filter(s => s.keyword !== keyword)
325
+ .map(s => s.predictedUrl);
326
+ // Shuffle siblings for variety
327
+ for (let si = siblings.length - 1; si > 0; si--) {
328
+ const sj = Math.floor(Math.random() * (si + 1));
329
+ [siblings[si], siblings[sj]] = [siblings[sj], siblings[si]];
330
+ }
331
+ // Prepend cross-links to the URL pool (they get priority)
332
+ mergedLinkUrls = [...siblings.slice(0, maxCrossLinks), ...mergedLinkUrls];
197
333
  }
198
334
  const { systemPrompt, userPrompt } = buildGenerationPrompt({
199
335
  keyword,
200
336
  wordCount: args.word_count,
201
337
  tone: args.tone,
202
338
  knowledgeBaseContext: kbContext,
203
- internalLinkUrls,
339
+ internalLinkUrls: mergedLinkUrls.length > 0 ? mergedLinkUrls : undefined,
204
340
  maxInternalLinks: args.max_internal_links,
205
341
  openerSeedIndex: i,
206
342
  });
@@ -209,18 +345,26 @@ export function registerGenerationTools(server) {
209
345
  temperature: args.temperature ?? 0.7,
210
346
  maxTokens: Math.min((args.word_count || 2500) * 3, 65536),
211
347
  };
212
- const result = await generateContent({
348
+ // Use retry wrapper for resilience against transient failures
349
+ const result = await generateContentWithRetry({
213
350
  provider,
214
351
  systemPrompt,
215
352
  userPrompt,
216
353
  settings,
217
354
  }, keys);
355
+ // Increment the global generation counter (for health monitoring)
356
+ try {
357
+ globalThis.__bpaiGenerationCount?.increment();
358
+ }
359
+ catch { /* ignore */ }
218
360
  if (result.error) {
219
361
  failed++;
362
+ consecutiveFailures++;
220
363
  results.push({ keyword, status: 'failed', error: result.error });
221
364
  }
222
365
  else {
223
366
  completed++;
367
+ consecutiveFailures = 0; // Reset on success
224
368
  let text = result.text;
225
369
  // Extract title
226
370
  let title = keyword;
@@ -238,9 +382,17 @@ export function registerGenerationTools(server) {
238
382
  }
239
383
  catch (err) {
240
384
  failed++;
385
+ consecutiveFailures++;
241
386
  results.push({ keyword, status: 'failed', error: err.message });
242
387
  }
388
+ // Inter-article delay to prevent rate limit cascading
389
+ if (i < args.keywords.length - 1) {
390
+ console.error(`[Batch] ⏳ Cooling down ${delayBetweenMs / 1000}s before next article...`);
391
+ await new Promise(r => setTimeout(r, delayBetweenMs));
392
+ }
243
393
  }
394
+ const totalElapsed = ((Date.now() - batchStartTime) / 60000).toFixed(1);
395
+ console.error(`[Batch] ✅ Batch complete: ${completed} succeeded, ${failed} failed in ${totalElapsed} minutes`);
244
396
  return {
245
397
  content: [{
246
398
  type: 'text', text: JSON.stringify({
@@ -248,8 +400,19 @@ export function registerGenerationTools(server) {
248
400
  total: args.keywords.length,
249
401
  completed,
250
402
  failed,
403
+ skipped: results.filter(r => r.status === 'skipped').length,
404
+ elapsed_minutes: parseFloat(totalElapsed),
251
405
  provider,
252
406
  model: args.model || getDefaultModel(provider),
407
+ delay_between_articles_seconds: delayBetweenMs / 1000,
408
+ internal_linking_urls: internalLinkUrls?.length || 0,
409
+ cross_linking: crossLinkingEnabled ? {
410
+ enabled: true,
411
+ base_url: crossLinkBaseUrl,
412
+ sibling_count: siblingUrls.length,
413
+ max_per_article: maxCrossLinks,
414
+ detected_pattern: detectedPattern || undefined,
415
+ } : { enabled: false },
253
416
  results,
254
417
  }, null, 2)
255
418
  }],
@@ -288,4 +451,17 @@ function getDefaultModel(provider) {
288
451
  };
289
452
  return defaults[provider] || 'gpt-5.2';
290
453
  }
454
+ /**
455
+ * Convert a keyword/title into a URL-safe slug.
456
+ * Matches the typical WordPress/blog slug behavior.
457
+ */
458
+ function slugify(text) {
459
+ return text
460
+ .toLowerCase()
461
+ .trim()
462
+ .replace(/[^\w\s-]/g, '') // Remove non-word chars (except spaces and hyphens)
463
+ .replace(/\s+/g, '-') // Spaces to hyphens
464
+ .replace(/-+/g, '-') // Collapse multiple hyphens
465
+ .replace(/^-+|-+$/g, ''); // Trim leading/trailing hyphens
466
+ }
291
467
  //# sourceMappingURL=generation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/tools/generation.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@
4
4
  * MCP tool handlers for:
5
5
  * - broadcast_urls: Submit URLs to IndexNow and ping services
6
6
  * - indexnow_submit: Direct IndexNow submission
7
- * - fetch_sitemap: Parse and return URLs from a sitemap
7
+ *
8
+ * NOTE: fetch_sitemap is registered in linking.ts (the richer version with
9
+ * persistence, filtering, and permalink pattern detection). Do NOT re-register
10
+ * it here — duplicate registration crashes the MCP server on startup.
8
11
  */
9
12
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
13
  export declare function registerIndexingTools(server: McpServer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"indexing.d.ts","sourceRoot":"","sources":["../../src/tools/indexing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAuMtD"}
1
+ {"version":3,"file":"indexing.d.ts","sourceRoot":"","sources":["../../src/tools/indexing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAmKtD"}
@@ -4,7 +4,10 @@
4
4
  * MCP tool handlers for:
5
5
  * - broadcast_urls: Submit URLs to IndexNow and ping services
6
6
  * - indexnow_submit: Direct IndexNow submission
7
- * - fetch_sitemap: Parse and return URLs from a sitemap
7
+ *
8
+ * NOTE: fetch_sitemap is registered in linking.ts (the richer version with
9
+ * persistence, filtering, and permalink pattern detection). Do NOT re-register
10
+ * it here — duplicate registration crashes the MCP server on startup.
8
11
  */
9
12
  import { z } from 'zod';
10
13
  export function registerIndexingTools(server) {
@@ -150,36 +153,6 @@ export function registerIndexingTools(server) {
150
153
  };
151
154
  }
152
155
  });
153
- // ============================================
154
- // fetch_sitemap
155
- // ============================================
156
- server.tool('fetch_sitemap', 'Fetch and parse a sitemap.xml file, returning all URLs found. Supports sitemap index files (recursively fetches child sitemaps).', {
157
- sitemap_url: z.string().describe('URL of the sitemap.xml to parse'),
158
- max_urls: z.number().optional().default(1000).describe('Maximum number of URLs to return'),
159
- }, async (args) => {
160
- try {
161
- const urls = await parseSitemap(args.sitemap_url, args.max_urls || 1000);
162
- return {
163
- content: [{
164
- type: 'text', text: JSON.stringify({
165
- status: 'success',
166
- sitemap_url: args.sitemap_url,
167
- url_count: urls.length,
168
- urls,
169
- }, null, 2)
170
- }],
171
- };
172
- }
173
- catch (error) {
174
- return {
175
- content: [{
176
- type: 'text', text: JSON.stringify({
177
- error: `Failed to fetch sitemap: ${error.message}`,
178
- }, null, 2)
179
- }],
180
- };
181
- }
182
- });
183
156
  }
184
157
  // ============================================
185
158
  // HELPERS
@@ -1 +1 @@
1
- {"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../src/tools/indexing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../src/tools/indexing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * BPAI MCP Server — Linking Tools
3
+ *
4
+ * MCP tool handlers for:
5
+ * - fetch_sitemap: Fetch and parse XML sitemaps to discover linkable URLs
6
+ * - update_linking_settings: Configure internal/cross-linking for a project
7
+ *
8
+ * These tools close the gap where MCP users previously could not populate
9
+ * sitemapUrls or configure linking settings without the web dashboard.
10
+ *
11
+ * Settings are persisted to the database via the mcp-update-settings edge
12
+ * function, so changes survive server restarts and are visible in the web UI.
13
+ */
14
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
15
+ /**
16
+ * Recursively fetch all URLs from a sitemap, including nested sitemap indexes.
17
+ * Mirrors the logic in netlify/edge-functions/fetch-sitemap.ts but runs
18
+ * directly in the MCP server process (Node.js) so no edge function call needed.
19
+ */
20
+ export declare function fetchAllSitemapUrls(sitemapUrl: string, visited?: Set<string>): Promise<string[]>;
21
+ /**
22
+ * Analyze a pool of sitemap URLs to detect the most common permalink pattern.
23
+ * Returns the detected base path prefix used for content pages.
24
+ *
25
+ * Examples:
26
+ * URLs like /blog/my-post, /blog/another → detects "/blog"
27
+ * URLs like /2026/01/my-post → detects "/" (date-based, uses root)
28
+ * URLs like /resources/guides/my-post → detects "/resources/guides"
29
+ * URLs like /my-post, /another-post → detects "/" (flat/root structure)
30
+ */
31
+ export declare function detectPermalinkPattern(urls: string[]): {
32
+ basePath: string;
33
+ pattern: 'flat' | 'subdirectory' | 'date-based' | 'nested';
34
+ confidence: number;
35
+ example: string;
36
+ };
37
+ export declare function registerLinkingTools(server: McpServer): void;
38
+ //# sourceMappingURL=linking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linking.d.ts","sourceRoot":"","sources":["../../src/tools/linking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,cAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6C5G;AAkDD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB,CAqGA;AAiDD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAyMrD"}