socialcrawl-mcp 1.0.1 β 1.0.2
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 +227 -102
- package/dist/__tests__/client.test.js +1 -1
- package/dist/__tests__/client.test.js.map +1 -1
- package/dist/client.js +3 -3
- package/dist/client.js.map +1 -1
- package/dist/data/docs.js +260 -260
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,153 +1,278 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# socialcrawl-mcp
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Give your AI agent access to 21 social media platforms through a single API**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/socialcrawl-mcp)
|
|
8
|
+
[](https://registry.modelcontextprotocol.io)
|
|
9
|
+
[](https://socialcrawl.dev)
|
|
10
|
+
[](https://socialcrawl.dev/docs)
|
|
11
|
+
[](LICENSE)
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
[Overview](#overview) | [Installation](#installation) | [Setup](#setup) | [Usage](#usage) | [Tools](#available-tools) | [Platforms](#supported-platforms)
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
</div>
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
- **Adam Jones** (Anthropic) [@domdomegg](https://github.com/domdomegg)
|
|
15
|
-
- **Tadas Antanavicius** (PulseMCP) [@tadasant](https://github.com/tadasant)
|
|
16
|
-
- **Toby Padilla** (GitHub) [@toby](https://github.com/toby)
|
|
17
|
-
- **Radoslav (Rado) Dimitrov** (Stacklok) [@rdimitrov](https://github.com/rdimitrov)
|
|
17
|
+
---
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Overview
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
`socialcrawl-mcp` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI agents to the [SocialCrawl API](https://socialcrawl.dev) β a unified social media data API covering 21 platforms and 105 endpoints.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Retrieve profiles, posts, comments, search results, trending content, and analytics from TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Reddit, and 15 more platforms. One API key, one consistent response format, every platform.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
25
|
+
**What the MCP server does:**
|
|
26
|
+
- Discovers available platforms and endpoints dynamically
|
|
27
|
+
- Fetches live social media data on your behalf
|
|
28
|
+
- Validates requests locally before making API calls (saves credits)
|
|
29
|
+
- Provides built-in API documentation the agent can query on demand
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
## Installation
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
### Claude Code (quickest)
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
- **golangci-lint v2.4.0**
|
|
35
|
+
```bash
|
|
36
|
+
claude mcp add --scope user socialcrawl -- npx -y socialcrawl-mcp
|
|
37
|
+
```
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Then set your API key:
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
|
|
43
|
-
make dev-compose
|
|
42
|
+
claude mcp add-env socialcrawl SOCIALCRAWL_API_KEY sc_your_key_here
|
|
44
43
|
```
|
|
45
44
|
|
|
46
|
-
|
|
45
|
+
### Claude Desktop
|
|
46
|
+
|
|
47
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"socialcrawl": {
|
|
53
|
+
"command": "npx",
|
|
54
|
+
"args": ["-y", "socialcrawl-mcp"],
|
|
55
|
+
"env": {
|
|
56
|
+
"SOCIALCRAWL_API_KEY": "sc_your_key_here"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
47
62
|
|
|
48
|
-
|
|
63
|
+
### Cursor
|
|
64
|
+
|
|
65
|
+
Add to `.cursor/mcp.json` in your project root or `~/.cursor/mcp.json` globally:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"socialcrawl": {
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["-y", "socialcrawl-mcp"],
|
|
73
|
+
"env": {
|
|
74
|
+
"SOCIALCRAWL_API_KEY": "sc_your_key_here"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
49
80
|
|
|
50
|
-
|
|
81
|
+
### VS Code (Claude Code)
|
|
82
|
+
|
|
83
|
+
Add to `.vscode/mcp.json` in your project or your user settings:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"servers": {
|
|
88
|
+
"socialcrawl": {
|
|
89
|
+
"type": "stdio",
|
|
90
|
+
"command": "npx",
|
|
91
|
+
"args": ["-y", "socialcrawl-mcp"],
|
|
92
|
+
"env": {
|
|
93
|
+
"SOCIALCRAWL_API_KEY": "sc_your_key_here"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
51
99
|
|
|
52
|
-
|
|
100
|
+
### Windsurf
|
|
101
|
+
|
|
102
|
+
Add to your Windsurf MCP configuration:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"mcpServers": {
|
|
107
|
+
"socialcrawl": {
|
|
108
|
+
"command": "npx",
|
|
109
|
+
"args": ["-y", "socialcrawl-mcp"],
|
|
110
|
+
"env": {
|
|
111
|
+
"SOCIALCRAWL_API_KEY": "sc_your_key_here"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
53
117
|
|
|
54
|
-
|
|
55
|
-
<summary>Alternative: Running a pre-built Docker image</summary>
|
|
118
|
+
### Other MCP-compatible clients
|
|
56
119
|
|
|
57
|
-
|
|
120
|
+
Any MCP client that supports stdio transport can use this server. The general pattern is:
|
|
58
121
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
122
|
+
- **Command:** `npx`
|
|
123
|
+
- **Args:** `["-y", "socialcrawl-mcp"]`
|
|
124
|
+
- **Environment:** `SOCIALCRAWL_API_KEY` set to your API key
|
|
62
125
|
|
|
63
|
-
|
|
64
|
-
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main
|
|
126
|
+
Restart your AI client after saving the configuration.
|
|
65
127
|
|
|
66
|
-
|
|
67
|
-
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:v1.0.0
|
|
128
|
+
## Setup
|
|
68
129
|
|
|
69
|
-
|
|
70
|
-
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main-20250906-abc123d
|
|
71
|
-
```
|
|
130
|
+
### 1. Get your API key
|
|
72
131
|
|
|
73
|
-
**
|
|
74
|
-
- **Releases**: `latest`, `v1.0.0`, `v1.1.0`, etc.
|
|
75
|
-
- **Continuous**: `main` (latest main branch build)
|
|
76
|
-
- **Development**: `main-<date>-<sha>` (specific commit builds)
|
|
132
|
+
Sign up at [socialcrawl.dev](https://socialcrawl.dev) and grab your API key from the dashboard. Every account starts with **100 free credits** β no credit card required.
|
|
77
133
|
|
|
78
|
-
|
|
134
|
+
### 2. Add the key to your config
|
|
79
135
|
|
|
80
|
-
|
|
136
|
+
Replace `sc_your_key_here` in the installation config above with your actual API key (starts with `sc_`).
|
|
81
137
|
|
|
82
|
-
|
|
138
|
+
> [!TIP]
|
|
139
|
+
> You can also set `SOCIALCRAWL_API_KEY` as a system environment variable instead of putting it in the MCP config. The discovery and documentation tools work even without a key β only actual API requests need one.
|
|
83
140
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
141
|
+
## Usage
|
|
142
|
+
|
|
143
|
+
Ask your AI agent in natural language. The MCP server handles the rest.
|
|
87
144
|
|
|
88
|
-
|
|
89
|
-
|
|
145
|
+
### Fetch a profile
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Get the TikTok profile for @charlidamelio
|
|
90
149
|
```
|
|
91
150
|
|
|
92
|
-
|
|
151
|
+
The agent calls `socialcrawl_request` with `platform: "tiktok"`, `resource: "profile"`, `params: { handle: "charlidamelio" }` and returns structured profile data including followers, bio, verification status, and engagement metrics.
|
|
93
152
|
|
|
94
|
-
|
|
153
|
+
### Search across platforms
|
|
95
154
|
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
make check
|
|
155
|
+
```
|
|
156
|
+
Search YouTube for "machine learning tutorials"
|
|
99
157
|
```
|
|
100
158
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
<!--
|
|
104
|
-
For Claude and other AI tools: Always prefer make targets over custom commands where possible.
|
|
105
|
-
-->
|
|
159
|
+
### Get post comments
|
|
106
160
|
|
|
107
|
-
|
|
161
|
+
```
|
|
162
|
+
Get the comments on this Instagram post: https://instagram.com/p/CwA1234abcd
|
|
163
|
+
```
|
|
108
164
|
|
|
109
|
-
###
|
|
165
|
+
### Cross-platform research
|
|
110
166
|
|
|
111
167
|
```
|
|
112
|
-
|
|
113
|
-
β βββ publisher/ # Server publishing tool
|
|
114
|
-
βββ data/ # Seed data
|
|
115
|
-
βββ deploy/ # Deployment configuration (Pulumi)
|
|
116
|
-
βββ docs/ # Documentation
|
|
117
|
-
βββ internal/ # Private application code
|
|
118
|
-
β βββ api/ # HTTP handlers and routing
|
|
119
|
-
β βββ auth/ # Authentication (GitHub OAuth, JWT, namespace blocking)
|
|
120
|
-
β βββ config/ # Configuration management
|
|
121
|
-
β βββ database/ # Data persistence (PostgreSQL)
|
|
122
|
-
β βββ service/ # Business logic
|
|
123
|
-
β βββ telemetry/ # Metrics and monitoring
|
|
124
|
-
β βββ validators/ # Input validation
|
|
125
|
-
βββ pkg/ # Public packages
|
|
126
|
-
β βββ api/ # API types and structures
|
|
127
|
-
β β βββ v0/ # Version 0 API types
|
|
128
|
-
β βββ model/ # Data models for server.json
|
|
129
|
-
βββ scripts/ # Development and testing scripts
|
|
130
|
-
βββ tests/ # Integration tests
|
|
131
|
-
βββ tools/ # CLI tools and utilities
|
|
132
|
-
βββ validate-*.sh # Schema validation tools
|
|
168
|
+
Compare the follower counts of @mkbhd on TikTok, Instagram, YouTube, and Twitter
|
|
133
169
|
```
|
|
134
170
|
|
|
135
|
-
|
|
171
|
+
The agent makes 4 sequential API calls β one per platform β and compiles the results into a comparison.
|
|
172
|
+
|
|
173
|
+
### Explore available endpoints
|
|
136
174
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
- **DNS verification** - For proving ownership of a domain and its subdomains
|
|
141
|
-
- **HTTP verification** - For proving ownership of a domain
|
|
175
|
+
```
|
|
176
|
+
What social media platforms can you access?
|
|
177
|
+
```
|
|
142
178
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
179
|
+
```
|
|
180
|
+
Show me all the TikTok endpoints
|
|
181
|
+
```
|
|
146
182
|
|
|
147
|
-
|
|
183
|
+
### Access documentation
|
|
148
184
|
|
|
149
|
-
|
|
185
|
+
```
|
|
186
|
+
How does the SocialCrawl credit system work?
|
|
187
|
+
```
|
|
150
188
|
|
|
151
|
-
|
|
189
|
+
### Example response
|
|
190
|
+
|
|
191
|
+
Every response follows a unified envelope format:
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"success": true,
|
|
196
|
+
"platform": "tiktok",
|
|
197
|
+
"endpoint": "/v1/tiktok/profile",
|
|
198
|
+
"data": {
|
|
199
|
+
"content": { "text": "...", "media_urls": ["..."] },
|
|
200
|
+
"author": { "username": "charlidamelio", "followers": 156000000 },
|
|
201
|
+
"engagement": { "likes": 5200, "engagement_rate": 0.045 },
|
|
202
|
+
"metadata": { "language": "en", "content_category": "entertainment" }
|
|
203
|
+
},
|
|
204
|
+
"credits_used": 1,
|
|
205
|
+
"credits_remaining": 99
|
|
206
|
+
}
|
|
207
|
+
```
|
|
152
208
|
|
|
153
|
-
|
|
209
|
+
> [!NOTE]
|
|
210
|
+
> The same response structure is returned for every platform β no per-platform parsing logic needed.
|
|
211
|
+
|
|
212
|
+
## Available Tools
|
|
213
|
+
|
|
214
|
+
The MCP server exposes 4 tools:
|
|
215
|
+
|
|
216
|
+
| Tool | Description | Needs API key? |
|
|
217
|
+
|------|-------------|----------------|
|
|
218
|
+
| `socialcrawl_list_platforms` | Discover all 21 platforms with their endpoints and capabilities | No |
|
|
219
|
+
| `socialcrawl_list_endpoints` | See all endpoints, required parameters, and credit costs for a platform | No |
|
|
220
|
+
| `socialcrawl_request` | Make any SocialCrawl API call β profiles, posts, comments, search, analytics | Yes |
|
|
221
|
+
| `socialcrawl_get_docs` | Access detailed API documentation by topic or platform | No |
|
|
222
|
+
|
|
223
|
+
Three of the four tools work without an API key β they query local bundled data. Only `socialcrawl_request` (which makes actual API calls) requires a key.
|
|
224
|
+
|
|
225
|
+
### Smart validation
|
|
226
|
+
|
|
227
|
+
Before making any API call, `socialcrawl_request` validates locally that the platform exists, the endpoint exists, and all required parameters are present. If something is wrong, it tells the agent exactly how to fix it β without consuming any credits.
|
|
228
|
+
|
|
229
|
+
## Supported Platforms
|
|
230
|
+
|
|
231
|
+
| Platform | Endpoints | Data Available |
|
|
232
|
+
|----------|-----------|----------------|
|
|
233
|
+
| **TikTok** | 24 | Profiles, videos, comments, followers, search, trending, live, Shop |
|
|
234
|
+
| **Instagram** | 12 | Profiles, posts, reels, comments, highlights, search |
|
|
235
|
+
| **YouTube** | 11 | Channels, videos, shorts, playlists, comments, trending |
|
|
236
|
+
| **Facebook** | 12 | Profiles, posts, reels, photos, groups, Ad Library |
|
|
237
|
+
| **Twitter/X** | 6 | Profiles, tweets, communities |
|
|
238
|
+
| **LinkedIn** | 6 | Profiles, company pages, posts, Ad Library |
|
|
239
|
+
| **Reddit** | 7 | Subreddits, posts, comments, search, ads |
|
|
240
|
+
| **Threads** | 5 | Profiles, posts, search |
|
|
241
|
+
| **Pinterest** | 4 | Search, pins, boards |
|
|
242
|
+
| **Google** | 4 | Search, Ad Library |
|
|
243
|
+
| **Truth Social** | 3 | Profiles, posts |
|
|
244
|
+
| **Twitch** | 2 | Profiles, clips |
|
|
245
|
+
| **Snapchat** | 1 | Profiles |
|
|
246
|
+
| **Kick** | 1 | Clips |
|
|
247
|
+
| **Amazon** | 1 | Shop pages |
|
|
248
|
+
| **Linktree** | 1 | Link pages |
|
|
249
|
+
| **Linkbio** | 1 | Link pages |
|
|
250
|
+
| **Linkme** | 1 | Link pages |
|
|
251
|
+
| **Komi** | 1 | Link pages |
|
|
252
|
+
| **Pillar** | 1 | Link pages |
|
|
253
|
+
| **Utility** | 1 | Age & gender detection |
|
|
254
|
+
|
|
255
|
+
**Total: 105 endpoints across 21 platforms.**
|
|
256
|
+
|
|
257
|
+
## Error Handling
|
|
258
|
+
|
|
259
|
+
The MCP server handles errors gracefully and gives the agent actionable guidance:
|
|
260
|
+
|
|
261
|
+
| Error | What the agent sees |
|
|
262
|
+
|-------|---------------------|
|
|
263
|
+
| Missing API key | Prompts to set `SOCIALCRAWL_API_KEY` with link to sign up |
|
|
264
|
+
| Invalid API key | Asks to check the key configuration |
|
|
265
|
+
| Insufficient credits | Shows balance and links to billing page |
|
|
266
|
+
| Bad platform/resource | Suggests using discovery tools to find the right endpoint |
|
|
267
|
+
| Missing parameters | Lists exactly what's missing with examples |
|
|
268
|
+
| Platform unavailable | Reports the outage; credits are refunded automatically |
|
|
269
|
+
|
|
270
|
+
## Links
|
|
271
|
+
|
|
272
|
+
- [Get Your API Key](https://socialcrawl.dev/dashboard) β 100 free credits, no credit card required
|
|
273
|
+
- [API Documentation](https://socialcrawl.dev/docs) β full endpoint reference, credits, and error codes
|
|
274
|
+
- [SocialCrawl Website](https://socialcrawl.dev)
|
|
275
|
+
- [npm Package](https://www.npmjs.com/package/socialcrawl-mcp)
|
|
276
|
+
- [MCP Registry](https://registry.modelcontextprotocol.io)
|
|
277
|
+
- [Getting Started Guide](docs/GETTING-STARTED.md)
|
|
278
|
+
- [How It Works](docs/HOW-IT-WORKS.md)
|
|
@@ -49,7 +49,7 @@ describe("API client", () => {
|
|
|
49
49
|
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({ success: false, error: { type: "INSUFFICIENT_CREDITS", message: "No credits" }, credits_remaining: 0 }), { status: 402 }));
|
|
50
50
|
const result = await makeRequest({ platform: "tiktok", resource: "profile", params: { handle: "test" } });
|
|
51
51
|
expect(result).toContain("Insufficient credits");
|
|
52
|
-
expect(result).toContain("socialcrawl.
|
|
52
|
+
expect(result).toContain("socialcrawl.dev/dashboard/billing");
|
|
53
53
|
});
|
|
54
54
|
it("maps 404 to endpoint not found message", async () => {
|
|
55
55
|
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({ success: false, error: { type: "ENDPOINT_NOT_FOUND" } }), { status: 404 }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TIMEOUT_MS, CHARACTER_LIMIT } from "./constants.js";
|
|
2
2
|
function getBaseUrl() {
|
|
3
|
-
return process.env.SOCIALCRAWL_BASE_URL ?? "https://
|
|
3
|
+
return process.env.SOCIALCRAWL_BASE_URL ?? "https://www.socialcrawl.dev";
|
|
4
4
|
}
|
|
5
5
|
function getApiKey() {
|
|
6
6
|
return process.env.SOCIALCRAWL_API_KEY ?? "";
|
|
@@ -8,7 +8,7 @@ function getApiKey() {
|
|
|
8
8
|
export async function makeRequest(options) {
|
|
9
9
|
const apiKey = getApiKey();
|
|
10
10
|
if (!apiKey) {
|
|
11
|
-
return "Error: No API key configured. Set SOCIALCRAWL_API_KEY in your MCP server environment. Get a free key at socialcrawl.
|
|
11
|
+
return "Error: No API key configured. Set SOCIALCRAWL_API_KEY in your MCP server environment. Get a free key at socialcrawl.dev (100 credits, no credit card required).";
|
|
12
12
|
}
|
|
13
13
|
const url = buildUrl(options);
|
|
14
14
|
const controller = new AbortController();
|
|
@@ -62,7 +62,7 @@ function formatHttpError(status, body, options) {
|
|
|
62
62
|
case 401:
|
|
63
63
|
return "Error: Invalid API key. Check your SOCIALCRAWL_API_KEY configuration.";
|
|
64
64
|
case 402:
|
|
65
|
-
return `Error: Insufficient credits (${parsed?.credits_remaining ?? 0} remaining). Top up at socialcrawl.
|
|
65
|
+
return `Error: Insufficient credits (${parsed?.credits_remaining ?? 0} remaining). Top up at socialcrawl.dev/dashboard/billing.`;
|
|
66
66
|
case 400:
|
|
67
67
|
return `Error: ${errorMessage}`;
|
|
68
68
|
case 404:
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7D,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,6BAA6B,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AAC/C,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,iKAAiK,CAAC;IAC3K,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;aACpB;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjE,OAAO,kCAAkC,UAAU,GAAG,IAAI,oDAAoD,CAAC;QACjH,CAAC;QACD,IAAI,KAAK,YAAY,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACzG,OAAO,6CAA6C,UAAU,EAAE,kCAAkC,CAAC;QACrG,CAAC;QACD,OAAO,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/F,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAAuB;IACvC,MAAM,IAAI,GAAG,GAAG,UAAU,EAAE,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,GAAG,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC9C,CAAC;AAOD,SAAS,eAAe,CAAC,MAAc,EAAE,IAAY,EAAE,OAAuB;IAC5E,IAAI,MAAM,GAAuB,IAAI,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;IAEpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,uEAAuE,CAAC;QACjF,KAAK,GAAG;YACN,OAAO,gCAAgC,MAAM,EAAE,iBAAiB,IAAI,CAAC,2DAA2D,CAAC;QACnI,KAAK,GAAG;YACN,OAAO,UAAU,YAAY,EAAE,CAAC;QAClC,KAAK,GAAG;YACN,OAAO,uBAAuB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,6EAA6E,OAAO,CAAC,QAAQ,GAAG,CAAC;QACrK,KAAK,GAAG;YACN,OAAO,mBAAmB,OAAO,CAAC,QAAQ,iDAAiD,CAAC;QAC9F,KAAK,GAAG;YACN,OAAO,uEAAuE,CAAC;QACjF,KAAK,GAAG;YACN,OAAO,mEAAmE,CAAC;QAC7E;YACE,OAAO,UAAU,MAAM,MAAM,SAAS,MAAM,YAAY,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,8BAA8B,eAAe,CAAC,cAAc,EAAE,kCAAkC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC;AACtL,CAAC"}
|