maxsim-flutter 1.30.0 → 1.31.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.
- package/README.md +62 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/version-check.d.ts +1 -0
- package/dist/cli/version-check.d.ts.map +1 -1
- package/dist/cli/version-check.js +1 -1
- package/dist/cli/version-check.js.map +1 -1
- package/dist/plan/skill-generator.d.ts.map +1 -1
- package/dist/plan/skill-generator.js +151 -8
- package/dist/plan/skill-generator.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -142,6 +142,68 @@ Available module identifiers: `auth`, `api`, `theme`, `database`, `i18n`, `push`
|
|
|
142
142
|
|
|
143
143
|
---
|
|
144
144
|
|
|
145
|
+
### `maxsim-flutter plan [app-name]`
|
|
146
|
+
|
|
147
|
+
Bootstrap an AI-guided planning workspace before creating your Flutter app. The `plan` command collects your project name and a short description, then generates three artifacts:
|
|
148
|
+
|
|
149
|
+
| Artifact | Path | Purpose |
|
|
150
|
+
|----------|------|---------|
|
|
151
|
+
| Planning skill | `.claude/skills/plan-app.md` | 9-step Claude Code skill that guides you from vision to PRD |
|
|
152
|
+
| Brief template | `docs/project-brief-template.md` | Structured template for problem statement, user journeys, non-goals |
|
|
153
|
+
| Partial config | `maxsim.config.yaml` | Pre-filled with project name and description |
|
|
154
|
+
|
|
155
|
+
**Arguments**
|
|
156
|
+
|
|
157
|
+
| Argument | Description |
|
|
158
|
+
|----------|-------------|
|
|
159
|
+
| `[app-name]` | Project name in `snake_case` (prompted if omitted) |
|
|
160
|
+
|
|
161
|
+
**Flags**
|
|
162
|
+
|
|
163
|
+
| Flag | Description |
|
|
164
|
+
|------|-------------|
|
|
165
|
+
| `--description <text>` | Short description of the app (1-2 sentences; prompted if omitted) |
|
|
166
|
+
|
|
167
|
+
**Examples**
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Interactive — prompts for name and description
|
|
171
|
+
maxsim-flutter plan
|
|
172
|
+
|
|
173
|
+
# Non-interactive
|
|
174
|
+
maxsim-flutter plan my_team_app --description "A chat app for small teams."
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Workflow**
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# 1. Bootstrap the planning workspace
|
|
181
|
+
maxsim-flutter plan my_app
|
|
182
|
+
|
|
183
|
+
# 2. Navigate to the new directory and open Claude Code
|
|
184
|
+
cd my_app
|
|
185
|
+
claude
|
|
186
|
+
|
|
187
|
+
# 3. Run the AI planning skill (guides you through 9 steps)
|
|
188
|
+
/plan-app
|
|
189
|
+
|
|
190
|
+
# 4. After Claude generates maxsim.config.yaml with your chosen modules, scaffold
|
|
191
|
+
maxsim-flutter create --config maxsim.config.yaml
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The `/plan-app` skill leads Claude through:
|
|
195
|
+
1. Understanding your app's vision and core problem
|
|
196
|
+
2. Defining core features and explicit non-goals
|
|
197
|
+
3. Technical decisions (auth provider, database, platforms)
|
|
198
|
+
4. Context-aware module suggestions (REQUIRED / RECOMMENDED / NICE-TO-HAVE)
|
|
199
|
+
5. Confirmation and approval
|
|
200
|
+
6. Generating `docs/project-brief.md`
|
|
201
|
+
7. Generating `docs/architecture.md` with Riverpod provider tree and go_router navigation flow
|
|
202
|
+
8. Generating complete `maxsim.config.yaml`
|
|
203
|
+
9. Generating `prd.json` v2 with stories derived from user journeys
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
145
207
|
### `maxsim-flutter migrate [path]`
|
|
146
208
|
|
|
147
209
|
Analyses an existing Flutter project and, optionally, migrates it to maxsim conventions. Detected architecture, state management, routing, and dependencies are reported. On confirmation the command writes `maxsim.config.yaml`, generates a `.claude/` directory, and creates a `prd.json` file containing story-by-story migration tasks.
|
package/dist/cli/index.js
CHANGED
|
@@ -7,11 +7,11 @@ import { createMigrateCommand } from './commands/migrate.js';
|
|
|
7
7
|
import { createListCommand } from './commands/list.js';
|
|
8
8
|
import { createUpgradeCommand } from './commands/upgrade.js';
|
|
9
9
|
import { createPlanCommand } from './commands/plan.js';
|
|
10
|
-
import { checkForUpdate } from './version-check.js';
|
|
10
|
+
import { checkForUpdate, getCurrentVersion } from './version-check.js';
|
|
11
11
|
const program = new Command();
|
|
12
12
|
program
|
|
13
13
|
.name('maxsim-flutter')
|
|
14
|
-
.version(
|
|
14
|
+
.version(getCurrentVersion())
|
|
15
15
|
.description('AI-powered Flutter app scaffolding with Clean Architecture, Riverpod, and autonomous development via Ralph')
|
|
16
16
|
.option('--no-update-check', 'Skip the npm update check');
|
|
17
17
|
program.addCommand(createCreateCommand());
|
|
@@ -27,7 +27,7 @@ if (opts.updateCheck !== false) {
|
|
|
27
27
|
checkForUpdate()
|
|
28
28
|
.then((latestVersion) => {
|
|
29
29
|
if (latestVersion) {
|
|
30
|
-
const current = program.version() ??
|
|
30
|
+
const current = program.version() ?? getCurrentVersion();
|
|
31
31
|
console.log(chalk.yellow(`\nUpdate available: ${current} → ${latestVersion}. Run npm install -g maxsim-flutter to update.`));
|
|
32
32
|
}
|
|
33
33
|
})
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,4GAA4G,CAAC;KACzH,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;AAE5D,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAExC,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,gEAAgE;AAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAA4B,CAAC;AACtD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;IAC/B,cAAc,EAAE;SACb,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,uBAAuB,OAAO,MAAM,aAAa,gDAAgD,CAClG,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,kBAAkB;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../src/cli/version-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../src/cli/version-check.ts"],"names":[],"mappings":"AAgBA,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAiCD;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+B7D"}
|
|
@@ -11,7 +11,7 @@ const FETCH_TIMEOUT_MS = 3000; // 3 seconds
|
|
|
11
11
|
const REGISTRY_URL = 'https://registry.npmjs.org/maxsim-flutter/latest';
|
|
12
12
|
const CACHE_DIR = join(homedir(), '.maxsim-flutter');
|
|
13
13
|
const CACHE_FILE = join(CACHE_DIR, 'last-update-check');
|
|
14
|
-
function getCurrentVersion() {
|
|
14
|
+
export function getCurrentVersion() {
|
|
15
15
|
try {
|
|
16
16
|
const pkgPath = join(__dirname, '../../package.json');
|
|
17
17
|
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/cli/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,YAAY;AAC3C,MAAM,YAAY,GAAG,kDAAkD,CAAC;AACxE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAExD,
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/cli/version-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/plan/skill-generator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/plan/skill-generator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CA2Q/D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export function generatePlanAppSkill(input) {
|
|
2
2
|
const name = input?.name ?? 'your_app';
|
|
3
3
|
const description = input?.description ?? 'A Flutter app';
|
|
4
|
+
const ticks = '```';
|
|
4
5
|
return `---
|
|
5
6
|
description: AI-guided planning for ${name}. Leads through vision, features, technical decisions, and PRD generation. Ask questions one at a time.
|
|
6
7
|
model: claude-opus-4-6
|
|
@@ -109,16 +110,158 @@ Summarize all decisions collected in Steps 1-4:
|
|
|
109
110
|
|
|
110
111
|
**Question 5.1** — Does this summary accurately reflect your app? Should we proceed with generating the config and PRD, or would you like to adjust anything?
|
|
111
112
|
|
|
112
|
-
Once the user confirms and approves,
|
|
113
|
+
Once the user confirms and approves, proceed through Steps 6-9.
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Step 6: Generate project-brief.md
|
|
118
|
+
|
|
119
|
+
Synthesize the conversation into a complete \`docs/project-brief.md\` file:
|
|
120
|
+
|
|
121
|
+
${ticks}markdown
|
|
122
|
+
# Project Brief — ${name}
|
|
123
|
+
|
|
124
|
+
## Description
|
|
125
|
+
${description}
|
|
126
|
+
|
|
127
|
+
## Problem Statement
|
|
128
|
+
[from Question 1.1]
|
|
129
|
+
|
|
130
|
+
## Core User Journey
|
|
131
|
+
[from Question 1.2]
|
|
132
|
+
|
|
133
|
+
## Core Features (v1)
|
|
134
|
+
[from Question 2.1]
|
|
135
|
+
|
|
136
|
+
## Non-Goals (v1)
|
|
137
|
+
[from Question 2.2]
|
|
138
|
+
|
|
139
|
+
## Technical Decisions
|
|
140
|
+
- Auth: [result]
|
|
141
|
+
- Database: [result]
|
|
142
|
+
- Platforms: [result]
|
|
143
|
+
- Modules: [final list]
|
|
144
|
+
${ticks}
|
|
145
|
+
|
|
146
|
+
Write this file to: \`docs/project-brief.md\`
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Step 7: Generate architecture.md
|
|
151
|
+
|
|
152
|
+
Create \`docs/architecture.md\` with provider tree and navigation flow ASCII diagrams.
|
|
153
|
+
|
|
154
|
+
### Provider Tree (Riverpod ASCII Diagram)
|
|
155
|
+
|
|
156
|
+
${ticks}
|
|
157
|
+
AppProviders
|
|
158
|
+
├── authStateProvider (StreamProvider)
|
|
159
|
+
│ └── userProvider (derived)
|
|
160
|
+
├── [featureNameProvider] (StateNotifierProvider)
|
|
161
|
+
│ └── [featureNameState]
|
|
162
|
+
└── routerProvider (go_router routing)
|
|
163
|
+
${ticks}
|
|
164
|
+
|
|
165
|
+
### Navigation Flow (go_router ASCII Diagram)
|
|
166
|
+
|
|
167
|
+
${ticks}
|
|
168
|
+
/ (root)
|
|
169
|
+
├── /login
|
|
170
|
+
├── /home
|
|
171
|
+
│ ├── /home/[feature-1]
|
|
172
|
+
│ └── /home/[feature-2]
|
|
173
|
+
└── /settings
|
|
174
|
+
${ticks}
|
|
175
|
+
|
|
176
|
+
### Clean Architecture Layers
|
|
177
|
+
|
|
178
|
+
For each enabled module, describe domain / data / presentation layers.
|
|
179
|
+
|
|
180
|
+
### Database Schema (if database module enabled)
|
|
181
|
+
|
|
182
|
+
Describe key data models and relationships.
|
|
183
|
+
|
|
184
|
+
Write to: \`docs/architecture.md\`
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Step 8: Generate complete maxsim.config.yaml
|
|
189
|
+
|
|
190
|
+
Using all decisions from Steps 1-5, generate a complete \`maxsim.config.yaml\`:
|
|
191
|
+
|
|
192
|
+
${ticks}yaml
|
|
193
|
+
project:
|
|
194
|
+
name: ${name}
|
|
195
|
+
description: >-
|
|
196
|
+
${description}
|
|
197
|
+
orgId: com.example
|
|
198
|
+
|
|
199
|
+
platforms:
|
|
200
|
+
- android
|
|
201
|
+
- ios
|
|
202
|
+
|
|
203
|
+
modules:
|
|
204
|
+
auth:
|
|
205
|
+
enabled: true
|
|
206
|
+
provider: firebase
|
|
207
|
+
# ... other selected modules
|
|
208
|
+
|
|
209
|
+
claude:
|
|
210
|
+
preset: standard
|
|
211
|
+
${ticks}
|
|
212
|
+
|
|
213
|
+
Write to: \`maxsim.config.yaml\` (overwrites the partial config).
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Step 9: Generate prd.json
|
|
218
|
+
|
|
219
|
+
Create \`prd.json\` in v2 format. Derive user stories from the user journeys and core features.
|
|
220
|
+
Organize stories across **4 phases**.
|
|
221
|
+
|
|
222
|
+
${ticks}json
|
|
223
|
+
{
|
|
224
|
+
"version": "2.0.0",
|
|
225
|
+
"project": "${name}",
|
|
226
|
+
"phases": [
|
|
227
|
+
{ "phase": 1, "title": "Core Infrastructure", "description": "Auth, navigation, theme" },
|
|
228
|
+
{ "phase": 2, "title": "Core Features", "description": "Primary user journey features" },
|
|
229
|
+
{ "phase": 3, "title": "Secondary Features", "description": "Additional features" },
|
|
230
|
+
{ "phase": 4, "title": "Polish & Optimization", "description": "Analytics, CI/CD, i18n" }
|
|
231
|
+
],
|
|
232
|
+
"stories": [
|
|
233
|
+
{
|
|
234
|
+
"id": "S-001",
|
|
235
|
+
"phase": 1,
|
|
236
|
+
"priority": "P0",
|
|
237
|
+
"title": "...",
|
|
238
|
+
"description": "As a user, I want to...",
|
|
239
|
+
"storyPoints": 3,
|
|
240
|
+
"dependencies": [],
|
|
241
|
+
"acceptanceCriteria": [{ "description": "..." }],
|
|
242
|
+
"passes": false
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
${ticks}
|
|
247
|
+
|
|
248
|
+
Write to: \`prd.json\`
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Next Steps
|
|
253
|
+
|
|
254
|
+
Once all artifacts are generated, tell the user:
|
|
255
|
+
|
|
256
|
+
${ticks}
|
|
257
|
+
✅ Planning complete! Your planning workspace is ready.
|
|
117
258
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
maxsim-flutter create --config maxsim.config.yaml
|
|
121
|
-
|
|
259
|
+
Next steps:
|
|
260
|
+
1. Review docs/project-brief.md and docs/architecture.md
|
|
261
|
+
2. Run: maxsim-flutter create --config maxsim.config.yaml
|
|
262
|
+
3. Then: cd ${name} && claude
|
|
263
|
+
4. Start implementing stories from prd.json with Ralph
|
|
264
|
+
${ticks}
|
|
122
265
|
`;
|
|
123
266
|
}
|
|
124
267
|
//# sourceMappingURL=skill-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/plan/skill-generator.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,UAAU,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,eAAe,CAAC;IAE1D,OAAO;sCAC6B,IAAI;;;;gBAI1B,IAAI;;;;eAIL,IAAI;mBACA,WAAW;;;;;;;;;;kDAUoB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAiEnB,IAAI
|
|
1
|
+
{"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/plan/skill-generator.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,UAAU,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,eAAe,CAAC;IAE1D,MAAM,KAAK,GAAG,KAAK,CAAC;IAEpB,OAAO;sCAC6B,IAAI;;;;gBAI1B,IAAI;;;;eAIL,IAAI;mBACA,WAAW;;;;;;;;;;kDAUoB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAiEnB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BrC,KAAK;oBACa,IAAI;;;EAGtB,WAAW;;;;;;;;;;;;;;;;;;;EAmBX,KAAK;;;;;;;;;;;;EAYL,KAAK;;;;;;;EAOL,KAAK;;;;EAIL,KAAK;;;;;;;EAOL,KAAK;;;;;;;;;;;;;;;;;;EAkBL,KAAK;;UAEG,IAAI;;MAER,WAAW;;;;;;;;;;;;;;;EAef,KAAK;;;;;;;;;;;EAWL,KAAK;;;gBAGS,IAAI;;;;;;;;;;;;;;;;;;;;;EAqBlB,KAAK;;;;;;;;;;EAUL,KAAK;;;;;;gBAMS,IAAI;;EAElB,KAAK;CACN,CAAC;AACF,CAAC"}
|