argustack 0.1.17 → 0.1.19
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.
- package/README.md +3 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/push.d.ts +3 -0
- package/dist/mcp/tools/push.d.ts.map +1 -0
- package/dist/mcp/tools/push.js +133 -0
- package/dist/mcp/tools/push.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[**Documentation & Examples →**](https://app.paperlink.online/s/0aa7d2d6/argustack)
|
|
11
11
|
|
|
12
|
-
Argustack downloads your project data into local PostgreSQL, cross-references everything, and gives Claude direct access via
|
|
12
|
+
Argustack downloads your project data into local PostgreSQL, cross-references everything, and gives Claude direct access via 21 MCP tools. All data stays on your machine.
|
|
13
13
|
|
|
14
14
|
> *Was ticket PROJ-123 implemented as described?*
|
|
15
15
|
> *Who reviewed the PR and what was the feedback?*
|
|
@@ -24,7 +24,7 @@ Argustack downloads your project data into local PostgreSQL, cross-references ev
|
|
|
24
24
|
- **Cross-source timeline** — Jira + Git + GitHub events in chronological order
|
|
25
25
|
- **Semantic search** — find issues by meaning, not just keywords (pgvector)
|
|
26
26
|
- **Task estimation** — predict duration per developer based on actual history
|
|
27
|
-
- **
|
|
27
|
+
- **21 MCP tools** — Claude queries your data directly via SQL
|
|
28
28
|
- **IDE Plugin** — kanban board for JetBrains IDEs where columns are Claude Code skills
|
|
29
29
|
- **100% local** — no cloud, no accounts, no telemetry
|
|
30
30
|
|
|
@@ -90,6 +90,7 @@ After sync, Claude queries your data through these tools:
|
|
|
90
90
|
| `issue_timeline` | Full chronological timeline: Jira + Git + GitHub |
|
|
91
91
|
| `semantic_search` | Find similar issues by meaning (pgvector) |
|
|
92
92
|
| `estimate` | Predict task duration per developer |
|
|
93
|
+
| `push` | Push local board tasks to Jira |
|
|
93
94
|
| `workspace_info` | Current workspace configuration |
|
|
94
95
|
|
|
95
96
|
## IDE Plugin
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BpE,eAAO,MAAM,MAAM,WAWjB,CAAC;AAUH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -20,6 +20,7 @@ import { registerIssueTools } from './tools/issue.js';
|
|
|
20
20
|
import { registerSearchTools } from './tools/search.js';
|
|
21
21
|
import { registerEstimateTools } from './tools/estimate.js';
|
|
22
22
|
import { registerDatabaseTools } from './tools/database.js';
|
|
23
|
+
import { registerPushTools } from './tools/push.js';
|
|
23
24
|
const mcpFilename = fileURLToPath(import.meta.url);
|
|
24
25
|
const mcpPackageRoot = resolve(dirname(mcpFilename), '..', '..');
|
|
25
26
|
function loadIconDataUri() {
|
|
@@ -49,6 +50,7 @@ registerIssueTools(server);
|
|
|
49
50
|
registerSearchTools(server);
|
|
50
51
|
registerEstimateTools(server);
|
|
51
52
|
registerDatabaseTools(server);
|
|
53
|
+
registerPushTools(server);
|
|
52
54
|
export async function startMcpServer() {
|
|
53
55
|
const transport = new StdioServerTransport();
|
|
54
56
|
await server.connect(transport);
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwBzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwIzD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import dotenv from 'dotenv';
|
|
3
|
+
import { loadWorkspace, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
|
|
4
|
+
import { JiraProvider } from '../../adapters/jira/index.js';
|
|
5
|
+
import { PostgresStorage } from '../../adapters/postgres/index.js';
|
|
6
|
+
import { PushUseCase } from '../../use-cases/push.js';
|
|
7
|
+
import { updateMdFrontmatter } from '../../adapters/board/md-parser.js';
|
|
8
|
+
function createStorage() {
|
|
9
|
+
return new PostgresStorage({
|
|
10
|
+
host: process.env['DB_HOST'] ?? 'localhost',
|
|
11
|
+
port: parseInt(process.env['DB_PORT'] ?? '5434', 10),
|
|
12
|
+
database: process.env['DB_NAME'] ?? 'argustack',
|
|
13
|
+
user: process.env['DB_USER'] ?? 'argustack',
|
|
14
|
+
password: process.env['DB_PASSWORD'] ?? 'argustack_local',
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function registerPushTools(server) {
|
|
18
|
+
server.registerTool('create_issue', {
|
|
19
|
+
description: 'Create an issue in Argustack local database (source=local). Agent reads task content, determines fields, passes what it can. Only summary is required. Use push tool after to send to Jira.',
|
|
20
|
+
inputSchema: {
|
|
21
|
+
summary: z.string().describe('Issue title (required)'),
|
|
22
|
+
description: z.string().optional().describe('Full description / requirements / acceptance criteria'),
|
|
23
|
+
project_key: z.string().optional().describe('Jira project key (e.g. PAP). Defaults to first project in JIRA_PROJECTS env'),
|
|
24
|
+
issue_type: z.string().optional().describe('Issue type (Story, Bug, Task, or localized name)'),
|
|
25
|
+
status: z.string().optional().describe('Status name'),
|
|
26
|
+
priority: z.string().optional().describe('Priority name'),
|
|
27
|
+
assignee: z.string().optional().describe('Assignee display name'),
|
|
28
|
+
parent_key: z.string().optional().describe('Parent issue or epic key (e.g. PAP-165)'),
|
|
29
|
+
labels: z.array(z.string()).optional().describe('Labels'),
|
|
30
|
+
components: z.array(z.string()).optional().describe('Component names'),
|
|
31
|
+
},
|
|
32
|
+
}, async ({ summary, description, project_key: projectKeyParam, issue_type: issueType, status, priority, assignee, parent_key: parentKey, labels, components }) => {
|
|
33
|
+
const ws = loadWorkspace();
|
|
34
|
+
if (!ws.ok) {
|
|
35
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
36
|
+
}
|
|
37
|
+
dotenv.config({ path: `${ws.root}/.env`, quiet: true });
|
|
38
|
+
const projectKey = projectKeyParam ?? process.env['JIRA_PROJECTS']?.split(',')[0]?.trim();
|
|
39
|
+
if (!projectKey) {
|
|
40
|
+
return errorResponse('No project_key provided and no JIRA_PROJECTS in .env');
|
|
41
|
+
}
|
|
42
|
+
const storage = createStorage();
|
|
43
|
+
try {
|
|
44
|
+
await storage.initialize();
|
|
45
|
+
const now = new Date().toISOString();
|
|
46
|
+
const issueKey = `LOCAL-${String(Date.now())}`;
|
|
47
|
+
await storage.saveBatch({
|
|
48
|
+
issues: [{
|
|
49
|
+
key: issueKey,
|
|
50
|
+
id: '',
|
|
51
|
+
projectKey,
|
|
52
|
+
summary,
|
|
53
|
+
description: description ?? null,
|
|
54
|
+
issueType: issueType ?? null,
|
|
55
|
+
status: status ?? null,
|
|
56
|
+
statusCategory: null,
|
|
57
|
+
priority: priority ?? null,
|
|
58
|
+
resolution: null,
|
|
59
|
+
assignee: assignee ?? null,
|
|
60
|
+
assigneeId: null,
|
|
61
|
+
reporter: null,
|
|
62
|
+
reporterId: null,
|
|
63
|
+
created: now,
|
|
64
|
+
updated: now,
|
|
65
|
+
resolved: null,
|
|
66
|
+
dueDate: null,
|
|
67
|
+
labels: labels ?? [],
|
|
68
|
+
components: components ?? [],
|
|
69
|
+
fixVersions: [],
|
|
70
|
+
parentKey: parentKey ?? null,
|
|
71
|
+
sprint: null,
|
|
72
|
+
storyPoints: null,
|
|
73
|
+
originalEstimate: null,
|
|
74
|
+
remainingEstimate: null,
|
|
75
|
+
timeSpent: null,
|
|
76
|
+
customFields: {},
|
|
77
|
+
rawJson: {},
|
|
78
|
+
source: 'local',
|
|
79
|
+
}],
|
|
80
|
+
comments: [],
|
|
81
|
+
changelogs: [],
|
|
82
|
+
worklogs: [],
|
|
83
|
+
links: [],
|
|
84
|
+
});
|
|
85
|
+
await storage.close();
|
|
86
|
+
return textResponse(`Created local issue: ${issueKey}\nProject: ${projectKey}\nSummary: ${summary}\n\nUse 'push' tool to send to Jira.`);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
await storage.close();
|
|
90
|
+
return errorResponse(`Failed to create issue: ${getErrorMessage(err)}`);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
server.registerTool('push', {
|
|
94
|
+
description: 'Push local board tasks to Jira. Creates Stories for tasks with source=local in the Argustack database. Updates .md frontmatter with the new Jira key.',
|
|
95
|
+
inputSchema: {},
|
|
96
|
+
}, async () => {
|
|
97
|
+
const ws = loadWorkspace();
|
|
98
|
+
if (!ws.ok) {
|
|
99
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
100
|
+
}
|
|
101
|
+
dotenv.config({ path: `${ws.root}/.env`, quiet: true });
|
|
102
|
+
const jiraUrl = process.env['JIRA_URL'];
|
|
103
|
+
const jiraEmail = process.env['JIRA_EMAIL'];
|
|
104
|
+
const jiraToken = process.env['JIRA_API_TOKEN'];
|
|
105
|
+
if (!jiraUrl || !jiraEmail || !jiraToken) {
|
|
106
|
+
return errorResponse('Jira credentials not configured. Set JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN in .env');
|
|
107
|
+
}
|
|
108
|
+
const jira = new JiraProvider({ host: jiraUrl, email: jiraEmail, apiToken: jiraToken });
|
|
109
|
+
const storage = createStorage();
|
|
110
|
+
try {
|
|
111
|
+
await storage.initialize();
|
|
112
|
+
const useCase = new PushUseCase(jira, storage);
|
|
113
|
+
const result = await useCase.execute();
|
|
114
|
+
for (const item of result.created) {
|
|
115
|
+
if (item.mdPath) {
|
|
116
|
+
updateMdFrontmatter(item.mdPath, { jiraKey: item.newKey });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
await storage.close();
|
|
120
|
+
if (result.created.length === 0) {
|
|
121
|
+
return textResponse('No local issues to push. All issues already synced with Jira.');
|
|
122
|
+
}
|
|
123
|
+
const lines = result.created.map((item) => `${item.newKey} (was ${item.oldKey})`);
|
|
124
|
+
const summary = `Pushed ${String(result.created.length)} issue(s) to Jira:\n${lines.join('\n')}`;
|
|
125
|
+
return textResponse(result.errors > 0 ? `${summary}\n\n${String(result.errors)} error(s) occurred.` : summary);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
await storage.close();
|
|
129
|
+
return errorResponse(`Push failed: ${getErrorMessage(err)}`);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/mcp/tools/push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,SAAS,aAAa;IACpB,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;QACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC/C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,iBAAiB;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,6LAA6L;QAC1M,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACpG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YAC1H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YAC9F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACjE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACvE;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7J,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1F,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,aAAa,CAAC,sDAAsD,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAE3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAE/C,MAAM,OAAO,CAAC,SAAS,CAAC;gBACtB,MAAM,EAAE,CAAC;wBACP,GAAG,EAAE,QAAQ;wBACb,EAAE,EAAE,EAAE;wBACN,UAAU;wBACV,OAAO;wBACP,WAAW,EAAE,WAAW,IAAI,IAAI;wBAChC,SAAS,EAAE,SAAS,IAAI,IAAI;wBAC5B,MAAM,EAAE,MAAM,IAAI,IAAI;wBACtB,cAAc,EAAE,IAAI;wBACpB,QAAQ,EAAE,QAAQ,IAAI,IAAI;wBAC1B,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,QAAQ,IAAI,IAAI;wBAC1B,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,UAAU,EAAE,IAAI;wBAChB,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,GAAG;wBACZ,QAAQ,EAAE,IAAI;wBACd,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,MAAM,IAAI,EAAE;wBACpB,UAAU,EAAE,UAAU,IAAI,EAAE;wBAC5B,WAAW,EAAE,EAAE;wBACf,SAAS,EAAE,SAAS,IAAI,IAAI;wBAC5B,MAAM,EAAE,IAAI;wBACZ,WAAW,EAAE,IAAI;wBACjB,gBAAgB,EAAE,IAAI;wBACtB,iBAAiB,EAAE,IAAI;wBACvB,SAAS,EAAE,IAAI;wBACf,YAAY,EAAE,EAAE;wBAChB,OAAO,EAAE,EAAE;wBACX,MAAM,EAAE,OAAO;qBAChB,CAAC;gBACF,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,YAAY,CAAC,wBAAwB,QAAQ,cAAc,UAAU,cAAc,OAAO,sCAAsC,CAAC,CAAC;QAC3I,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,aAAa,CAAC,2BAA2B,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CACF,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,WAAW,EAAE,uJAAuJ;QACpK,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,OAAO,aAAa,CAAC,mFAAmF,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAEvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YAEtB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,YAAY,CAAC,+DAA+D,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,SAAS,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,UAAU,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjG,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,aAAa,CAAC,gBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|