@warpgogol/forge 1.0.1 → 1.2.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/AGENTS.md CHANGED
@@ -7,7 +7,7 @@ Portable governance skills and command modules extracted from the engine (RFC-03
7
7
  - `src/` — portable, no kernel imports. Contains skill schema, registry, validators, onboarding handlers, config module, canonical types, and utilities.
8
8
  - `os/` — ForgeModule registrations. RFC-0556: `os/compass/` and `os/werkstatt/` are fully autonomous — all command handlers are inlined in `os/*/handlers/` and no longer dynamically import `@warpgogol/*` packages. Other `os/` modules may still use dynamic imports where kernel integration is needed.
9
9
  - `bin/` — CLI entrypoint (`forge` command) for autonomous usage without `@warpgogol/werkstatt`.
10
- - `skills/` — forge-managed skill definitions (38 fo skills + 5 shared + 3 meta = 46 skills). Project-declared skill packs (RFC-0539) live outside forge and are discovered via `discoverPackSkills` from `forge.yaml` `skillPacks` config.
10
+ - `skills/` — forge-managed skill definitions (35 fo skills + 5 shared + 3 meta = 43 skills). Project-declared skill packs (RFC-0539) live outside forge and are discovered via `discoverPackSkills` from `forge.yaml` `skillPacks` config.
11
11
 
12
12
  ## RFC-0855 program control-plane boundary
13
13
 
@@ -105,21 +105,9 @@ skillPacks:
105
105
  - **MUST** use `hasGeneratedMarker()` from `utils/index.ts` for detecting generated file markers — never use raw `content.includes("GENERATED")` which is fragile and breaks if the marker format changes.
106
106
  - **Compass shared flags:** New flags for compass commands MUST be added to the shared `compassScanFlags` object in `os/compass/compass.module.ts`, not to individual command definitions. The `compassScanFlags` object is spread into all compass commands that use `flags: { ...compassScanFlags }`, ensuring the flag is available consistently across the command family. Per-command flags that are unique to one command may be defined inline.
107
107
  - **CLI flags must be wired to behavior.** Every flag declared in a command registration MUST affect the command's output or behavior — not just be read and stored. A flag that is read but never used is dead code and a contract violation. When adding a flag, implement its behavioral effect in the same commit. Verify by searching for the flag variable name in the handler function body.
108
- - **Profile-driven workspace detection is domain-neutral.** `workspaceTypes` from a stack profile must replace hardcoded workspace detection for ALL domains, not just software. Do NOT gate `checkNestedAgentsMd` or `discoverWorkspaces` by `isSoftwareDomain` — that silently skips the check for non-software domains (video, creative, etc.). When `workspaceTypes` is present, it fully replaces hardcoded detection; when absent, hardcoded detection is the fallback for all domains.
108
+ - **Profile-driven workspace detection is domain-neutral.** `workspaceTypes` from a stack profile must replace hardcoded workspace detection for ALL domains, not just software. Do NOT gate `checkNestedAgentsMd` or `discoverWorkspaces` by `isSoftwareDomain` — that silently skips the check for non-software domains (game, creative, etc.). When `workspaceTypes` is present, it fully replaces hardcoded detection; when absent, hardcoded detection is the fallback for all domains.
109
109
  - **`command-registered` probes MUST fall back to command manifest.** The `command-registered` probe in `os/rfc/acceptance.ts` uses `commandRegistry?.listCommands()`, which only sees workspace-scoped commands (forge modules). App-scoped commands from `werkstatt-site/checks` are invisible to the workspace-level registry. Always include a `loadManifestCommandNames(workspaceRoot)` fallback, matching the pattern already used in `os/rfc/handlers/lifecycle.ts`. Without this, `rfc.acceptance.run` and `rfc.verification.emit` will falsely report app-scoped commands as "not registered".
110
110
 
111
- ## Editframe template rules
112
-
113
- - **TimelineRoot MUST NOT be used inside Workbench.** `TimelineRoot` renders a `<div style="display: contents">` wrapper that breaks `EFWorkbenchElement.#initialize()` — it searches for `TemporalElement` among direct children of `ef-canvas`, but the div wrapper makes `ef-timegroup` a grandchild instead of a direct child. The correct structure is `Workbench > Configuration > Timegroup`. `TimelineRoot` is only valid outside `Workbench` (e.g. standalone render compositions without preview).
114
- - **Text content MUST be passed as children, not via `text` prop.** `ef-text` reads text from child text nodes via `#captureRawText()`, not from the `text` attribute. Use `<Text style={{ color: "white" }}>Hello</Text>`, not `<Text text="Hello" color="white" />`.
115
- - **Text styling MUST use the `style` prop or CSS classes, not HTML attributes.** `ef-text` does not read `x`, `y`, `fontSize`, `color`, `textAlign` as attributes. Pass them via `style={{ fontSize: "48px", color: "white" }}` or Tailwind classes.
116
- - **Timegroup inside Workbench MUST have explicit dimensions.** Without `style={{ width, height }}`, `Timegroup` renders as a 0×0 inline element. Set dimensions matching the composition resolution (e.g. `1920px` × `1080px`).
117
- - **main.tsx MUST set `height: 100%` on `html`, `body`, and `#root`** and override `ef-workbench { display: grid }` after importing `@editframe/elements/styles.css`. The document-level `ef-workbench { display: block }` rule overrides the shadow DOM `:host { display: grid }`, breaking the grid layout and making the preview invisible.
118
- - **In `contain` mode, parent duration = max child duration.** If a child `Text` has `duration="5s"` but the parent `Timegroup` has `duration="10s"`, the composition will be 5s, not 10s. Always match child durations to the parent when using `contain` mode, or the composition will be silently shorter than expected.
119
- - **`--ef-progress` CSS variable (0→1) is available on temporal elements** for driving animations. Use it in `style` props: `opacity: "min(1, var(--ef-progress, 0) * 5)"` fades in over the first 20% of the timeline. `transform: "scale(min(1, 0.8 + var(--ef-progress, 0) * 0.2))"` scales from 0.8 to 1.0. The variable is set by the temporal clock and updates during playback and scrubbing.
120
- - **`PlaybackController.play()` after `ended` does NOT seek to 0** — this is a race condition in `@editframe/elements`. To make replay work, patch `play()` in a `useEffect` via a `ref` on the `Workbench` element: query `ef-configuration`, access `.playback`, and wrap `play()` to call `play({ from: 0 })` when `currentTime >= duration`. Also listen for the `playback-attached` event for late-bound controllers.
121
- - **`@editframe/react` TypeScript types do not expose `ref` or accept all CSS string values.** Use `as any` casts (`const EFWorkbench = Workbench as any`, etc.) to bypass type errors without changing runtime behavior. This is required for `ref` on `Workbench` and for CSS function values like `min()` and `var()` in `style` props.
122
-
123
111
  ## RFC frontmatter: commands.changed (RFC-CMD-03)
124
112
 
125
113
  The `commands.changed` field in RFC frontmatter must only list **registered CLI commands** (e.g. `compass.audit.baseline`, `mission.materialize`), not internal functions or handlers (e.g. `acquireLock`, `releaseLock`). `rfc.validate` enforces this via RFC-CMD-03: every entry in `commands.changed` must match a live command in the registry. Internal functions that are not registered as CLI commands must not appear in `commands.changed` — use `packagesImpacted` to indicate which packages were modified.
@@ -163,15 +151,15 @@ Stack profiles are YAML documents under `profiles/` describing a supported stack
163
151
  - **MUST NOT** scaffold into a non-empty directory — no `--force` flag.
164
152
  - **MUST NOT** add stack profiles for stacks forge cannot scaffold end-to-end.
165
153
  - **MUST** reference all template files in `profiles/<profile>-templates/` from the profile YAML (`workspaceTypes[].agentsMdTemplate` or `firstWorkspace.files`) or document them in the `agentsMdTemplate` file. Unreferenced template files are orphan artifacts that operators cannot discover.
166
- - Shipped profiles: `astro-typescript-turborepo`, `phaser-turborepo`, `forge-shell` (minimal — default for `create`), `editframe` (video domain — first non-software profile, RFC-0641, React template RFC-0694).
154
+ - Shipped profiles: `astro-typescript-turborepo`, `phaser-turborepo`, `godot-csharp`, `forge-shell` (minimal — default for `create`).
167
155
  - **MUST** include a `.github/workflows/ci.yml` template in every stack profile's `workspace.files` list. The CI template MUST include `concurrency` (cancel superseded PR runs), `permissions: contents: read` at workflow level, `timeout-minutes` per job, `env: TZ: UTC` per job, `actions/checkout@v5`, and `actions/setup-node@v5` with Node 24. New projects inherit reliable CI from the scaffold — operators should not need to hand-write CI from scratch.
168
156
 
169
157
  ### Domain fields (RFC-0638)
170
158
 
171
159
  The `forge/stack-profile@1` schema includes six optional domain-neutral fields that allow a profile to declare its domain model. All fields are optional — existing profiles without them parse and function identically.
172
160
 
173
- - **`domain`** — string identifying the project domain (e.g. `software`, `video`, `book`, `music`, `game`, `illustration`). Used for profile detection and doctor output.
174
- - **`terminology`** — map of universal concept keys to domain-specific terms (e.g. `artifact: "composition"`). Open vocabulary; universal keys have built-in defaults exported as `TERMINOLOGY_DEFAULTS`. Missing keys fall back to the default term.
161
+ - **`domain`** — string identifying the project domain (e.g. `software`, `game`, `book`, `music`, `illustration`). Used for profile detection and doctor output.
162
+ - **`terminology`** — map of universal concept keys to domain-specific terms (e.g. `artifact: "game"`). Open vocabulary; universal keys have built-in defaults exported as `TERMINOLOGY_DEFAULTS`. Missing keys fall back to the default term.
175
163
  - **`artifacts`** — array of artifact definitions (id, extensions, produce/validate commands, determinism properties). Used by `doctor` for domain-specific health checks in follow-up RFCs.
176
164
  - **`workspaceTypes`** — array of workspace type definitions (id, detection markers, associated skills, AGENTS.md template). Used by `forge.agents.generate` for per-domain workspace detection in follow-up RFCs.
177
165
  - **`invariants`** — array of domain-specific invariant definitions (id matching `^[A-Z]+-\d+$`, rule text, severity). Schema only — enforcement is deferred to follow-up RFCs.
@@ -364,8 +352,8 @@ When publishing `@warpgogol/forge`, npm resolves the auth token from `.npmrc` fi
364
352
  - **Golden fixture for `agents-generate`** — when adding or modifying sections in `agents-generate.ts`, the golden fixture `src/tests/fixtures/agents-generate-business-before.txt` MUST be updated to match the new generated output. The test `agents-generate-domain.test.ts` compares generated content against this fixture with `expect(content).toBe(goldenFixture)` — a mismatch fails the test.
365
353
  - **SKILL-17 brand pattern must be case-sensitive** — the brand regex in `skill-validate.ts` uses a `@`-lookbehind to allow `@warpgogol/<pkg>` npm-scope references in skill instruction lines. Making the regex case-insensitive (`/gi`) defeats the lookbehind and false-flags every `@warpgogol` import as a brand violation. Keep the regex case-sensitive (`/g` only) so the `@`-scope allowance works correctly.
366
354
  - **`vi.resetModules()` before `vi.doMock()` for Node builtins** — when mocking Node built-in modules (e.g. `node:child_process`) in vitest, `vi.resetModules()` MUST be called BEFORE `vi.doMock()`. Without `resetModules()` first, the module cache retains the original module and the mock is not applied on re-import via dynamic `import()`. After the test, call `vi.doUnmock()` and `vi.resetModules()` to restore. Discovered during `upgrade.test.ts` `--update-npm` mock testing.
367
- - **Mock `execSync` for scaffold tests** — `runScaffoldProject` calls `execSync` to run `pnpm add` install commands, which fail in test environments without network access. Mock `node:child_process` with `vi.mock("node:child_process", async (importActual) => { const actual = await importActual(); return { ...actual, execSync: vi.fn(() => Buffer.from("mocked")) }; })` and use dynamic `await import("../onboarding/scaffold-project.ts")` after the mock. Use `vi.importActual` to preserve `execFile` (used by `promisify(execFile)` in forge/os/compass). See `src/tests/editframe-e2e.test.ts` for the reference pattern.
368
- - **`runDoctor` profile resolution in tests** — `runDoctor` calls `resolveForgeRoot(workspaceRoot)` which searches for `packages/forge/` relative to the workspace root. In temp-directory tests, the forge package is not found, so profile-dependent checks (prerequisites, invariants) are silently skipped. Either pass `forgeRoot` in the `ForgeRuntimeContext` (preferred), or create a minimal `packages/forge/profiles/<id>.yaml` inside the temp directory. See `src/tests/editframe-e2e.test.ts` "doctor checks prerequisites" test for the local-profile pattern.
355
+ - **Mock `execSync` for scaffold tests** — `runScaffoldProject` calls `execSync` to run `pnpm add` install commands, which fail in test environments without network access. Mock `node:child_process` with `vi.mock("node:child_process", async (importActual) => { const actual = await importActual(); return { ...actual, execSync: vi.fn(() => Buffer.from("mocked")) }; })` and use dynamic `await import("../onboarding/scaffold-project.ts")` after the mock. Use `vi.importActual` to preserve `execFile` (used by `promisify(execFile)` in forge/os/compass).
356
+ - **`runDoctor` profile resolution in tests** — `runDoctor` calls `resolveForgeRoot(workspaceRoot)` which searches for `packages/forge/` relative to the workspace root. In temp-directory tests, the forge package is not found, so profile-dependent checks (prerequisites, invariants) are silently skipped. Either pass `forgeRoot` in the `ForgeRuntimeContext` (preferred), or create a minimal `packages/forge/profiles/<id>.yaml` inside the temp directory.
369
357
 
370
358
  ## RFC frontmatter: versionBump for prose-only policy RFCs
371
359
 
package/README.md CHANGED
@@ -12,13 +12,49 @@ Forge supports four kinds of projects. You pick one when you start — everythin
12
12
  | --- | --- | --- |
13
13
  | **Website** | A public website or web app — pages, blog, portfolio, landing page, online store | Photography studio site, restaurant website, SaaS landing page |
14
14
  | **Browser game** | An interactive game that runs in a web browser — 2D, arcade, puzzle, adventure | Catch falling stars, tile-matching puzzle, platformer |
15
- | **Video** | A programmatic video composition — animated logo, intro, product showcase, motion design | Brand intro video, product demo, social media ad clip |
16
15
  | **Governance / library** | A code library or governance-only project — no website, no game, no video, just structure and documentation | npm package, internal toolkit, documentation hub |
16
+ | **Godot game** | A desktop or mobile game built with Godot 4.x and C# — 2D, 3D, platformer, RPG | Top-down adventure, 3D platformer, puzzle game |
17
17
 
18
18
  Each project type gets its own scaffold: the right folder structure, the right dependencies, the right tools. You don't need to know what any of those are — Forge sets them up for you.
19
19
 
20
20
  ---
21
21
 
22
+ ## Forge and the Werkstatt engine
23
+
24
+ Forge is the **governance layer** — skills, RFC/ADR workflows, naming conventions, spec vendoring, and the CLI. It is framework-agnostic and has zero runtime dependencies (only `yaml` + `zod`).
25
+
26
+ For full project lifecycle management — missions, releases, deployment, certification, quality checks, content codegen — Forge connects to the **Werkstatt engine** and **stack-specific plugins**. These are separate npm packages installed alongside Forge when you need runtime capabilities beyond governance.
27
+
28
+ | Package | Purpose | Required for |
29
+ | --- | --- | --- |
30
+ | `@warpgogol/werkstatt` | Runtime engine — missions, releases, Leitstand deployment, certification, Bordbuch, artifact store | All project types with lifecycle management |
31
+ | `@warpgogol/werkstatt-shared` | Shared infrastructure — checks, integration, ontology, passport | Installed automatically with the engine |
32
+ | `@warpgogol/werkstatt-site` | Astro site plugin — build pipeline, content checks, codegen, deploy adapters | Website projects (`astro-typescript-turborepo`) |
33
+ | `@warpgogol/werkstatt-game` | Phaser game plugin — game validators, Vite build, deploy adapters | Browser game projects (`phaser-turborepo`) |
34
+ | `@warpgogol/werkstatt-godot` | Godot plugin — scene validators, dotnet build, itch.io deploy, Godot skills | Godot game projects (`godot-csharp`) |
35
+
36
+ ### When you need these packages
37
+
38
+ - **Governance-only projects** (RFCs, ADRs, skills, documentation hubs) — Forge alone is sufficient.
39
+ - **Websites, games, Godot projects** — install `@warpgogol/werkstatt` (the engine) plus the matching stack plugin. The `forge-bootstrap` skill configures bindings automatically; the packages themselves must be installed as devDependencies.
40
+
41
+ ### Installing engine packages
42
+
43
+ ```sh
44
+ # Website project
45
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-site
46
+
47
+ # Browser game project
48
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-game
49
+
50
+ # Godot game project
51
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-godot
52
+ ```
53
+
54
+ > **Note for agents:** When scaffolding a new project with `forge create`, always install the engine and matching stack plugin after the scaffold completes. The `forge.yaml` bindings reference commands from these packages (e.g. `pnpm exec werkstatt run rfc.validate`), and they will fail if the packages are not installed.
55
+
56
+ ---
57
+
22
58
  ## Complete installation guide (from zero)
23
59
 
24
60
  If you've never programmed before, this section takes you from a completely empty computer to a working Forge setup. Follow the steps for your operating system.
@@ -154,43 +190,27 @@ Forge works through conversation with an AI agent. You need an IDE that supports
154
190
 
155
191
  You can also use **Cursor** ([cursor.com](https://cursor.com)) or any IDE that supports AI agent skills.
156
192
 
157
- ### Optional — Install FFmpeg (only for video projects)
193
+ ### Optional — Install Godot and .NET (only for Godot game projects)
158
194
 
159
- If you're planning to create **video** projects (the `editframe` profile), you need **FFmpeg** a free tool for processing video and audio.
195
+ If you're planning to create **Godot game** projects (the `godot-csharp` profile), you need two additional tools:
160
196
 
161
- **Ubuntu:**
197
+ - **Godot 4.x** (with .NET support) — the game engine. Download it from [godotengine.org/download](https://godotengine.org/download). Make sure to choose the ".NET" version (not the standard version).
198
+ - **.NET SDK 8+** — the C# runtime and build tools. Download it from [dotnet.microsoft.com/download](https://dotnet.microsoft.com/download).
199
+
200
+ Verify both are installed:
162
201
 
163
202
  ```sh
164
- sudo apt-get install -y ffmpeg
165
- ffmpeg -version
203
+ godot --version
204
+ dotnet --version
166
205
  ```
167
206
 
168
- **Windows:**
169
-
170
- 1. Go to [ffmpeg.org/download.html](https://ffmpeg.org/download.html) in your browser.
171
- 2. Download a Windows build (look for "Windows builds" — the gyan.dev or BtbN builds are good choices).
172
- 3. Extract the downloaded `.zip` file to a folder, e.g. `C:\ffmpeg`.
173
- 4. Add FFmpeg to your system PATH:
174
- - Open the Start menu, search for "Environment Variables", and click "Edit the system environment variables".
175
- - Click **Environment Variables**.
176
- - Under "System variables" (or "User variables"), find **Path**, select it, and click **Edit**.
177
- - Click **New** and type `C:\ffmpeg\bin` (or wherever you extracted FFmpeg, in the `bin` subfolder).
178
- - Click **OK** on all three windows.
179
- 5. Close and reopen PowerShell, then verify:
180
-
181
- ```sh
182
- ffmpeg -version
183
- ```
184
-
185
- You should see version information, not an error.
186
-
187
207
  ### Troubleshooting
188
208
 
189
209
  - **"command not found" after installing Node.js** — Close and reopen your terminal (Ubuntu) or PowerShell (Windows). The system needs to reload the list of available commands.
190
210
  - **"EACCES permission denied" on Ubuntu when installing Forge globally** — Run `sudo pnpm add -g @warpgogol/forge` instead.
191
211
  - **"corepack: command not found"** — Your Node.js version is too old. Install Node.js 24+ using the steps above.
192
212
  - **Windsurf can't find `forge`** — Close and reopen Windsurf after installing Forge. IDEs need to restart to pick up new global commands.
193
- - **AI agent doesn't know about Forge** — You opened an empty folder, but the AI agent has no Forge context. Run `forge create --name my-project --profile editframe` (or the appropriate profile) in a terminal first, then open the created folder in your IDE. The `forge create` command populates the folder with skills, configuration, and `AGENTS.md` — without it, the AI agent can't discover Forge.
213
+ - **AI agent doesn't know about Forge** — You opened an empty folder, but the AI agent has no Forge context. Run `forge create --name my-project --profile astro-typescript-turborepo` (or the appropriate profile) in a terminal first, then open the created folder in your IDE. The `forge create` command populates the folder with skills, configuration, and `AGENTS.md` — without it, the AI agent can't discover Forge.
194
214
 
195
215
  ---
196
216
 
@@ -205,26 +225,22 @@ You need to run one command in the terminal to create your project. After that,
205
225
  1. **Create a Forge project.** Open a terminal (PowerShell on Windows, Terminal on Ubuntu) and run:
206
226
 
207
227
  ```sh
208
- forge create --name my-brand-video --profile editframe
228
+ forge create --name my-site --profile astro-typescript-turborepo
209
229
  ```
210
230
 
211
- Replace `my-brand-video` with your project name (lowercase letters and hyphens). This creates a new folder with everything Forge needs — skills, configuration, and project structure. For other project types, use a different `--profile`:
231
+ Replace `my-site` with your project name (lowercase letters and hyphens). This creates a new folder with everything Forge needs — skills, configuration, and project structure. For other project types, use a different `--profile`:
212
232
 
213
- | What you want to build | Profile flag |
214
- | ----------------------------------------- | -------------------------------------- |
215
- | Video (brand video, intro, motion design) | `--profile editframe` |
216
- | Website (landing page, blog, portfolio) | `--profile astro-typescript-turborepo` |
217
- | Browser game (2D, arcade, puzzle) | `--profile phaser-turborepo` |
218
- | Library or governance-only project | `--profile forge-shell` |
233
+ | What you want to build | Profile flag |
234
+ | --------------------------------------- | -------------------------------------- |
235
+ | Website (landing page, blog, portfolio) | `--profile astro-typescript-turborepo` |
236
+ | Browser game (2D, arcade, puzzle) | `--profile phaser-turborepo` |
237
+ | Godot game (desktop, mobile, 2D/3D) | `--profile godot-csharp` |
238
+ | Library or governance-only project | `--profile forge-shell` |
219
239
 
220
240
  2. **Open the project folder in your AI IDE.** Open the folder that was created in step 1 in Windsurf or your preferred IDE.
221
241
 
222
242
  3. **Tell the AI agent what you want to build.** Just type it in the chat, in your own words. For example:
223
243
 
224
- > I want to create a brand video for my coffee shop. It should have an animated logo, a short intro, and a product showcase.
225
-
226
- Or:
227
-
228
244
  > I want to build a website for my photography studio.
229
245
 
230
246
  Or:
@@ -236,16 +252,16 @@ You need to run one command in the terminal to create your project. After that,
236
252
  > I want to create a TypeScript library for calculating astrology charts.
237
253
 
238
254
  That's it. The AI agent will do everything else:
239
- - Set up the project structure based on what you described (video, website, game, library, etc.)
255
+ - Set up the project structure based on what you described (website, game, library, etc.)
240
256
  - Configure language preferences and project settings
241
- - Start a live preview so you can see your work (for websites, games, and videos)
257
+ - Start a live preview so you can see your work (for websites and games)
242
258
  - Tell you the URL to open in your browser
243
259
 
244
- 4. **Watch the preview.** For websites, games, and videos, the AI agent will give you a localhost link. Click it — your project is already running. As you describe changes, the agent updates the project and the preview refreshes automatically.
260
+ 4. **Watch the preview.** For websites and games, the AI agent will give you a localhost link. Click it — your project is already running. As you describe changes, the agent updates the project and the preview refreshes automatically.
245
261
 
246
262
  For governance and library projects, there's no visual preview — the agent will set up the project structure and tell you when it's ready.
247
263
 
248
- 5. **Create together.** From here on, you just talk. Want a different color? Want to add a scene? Want to change the music? Want to add a new function to your library? Just say it. The agent handles all the technical work.
264
+ 5. **Create together.** From here on, you just talk. Want a different color? Want to add a scene? Want to add a new function to your library? Just say it. The agent handles all the technical work.
249
265
 
250
266
  #### Bring an existing project into Forge
251
267
 
@@ -264,7 +280,7 @@ If you already have a project somewhere else and want to move it into Forge:
264
280
  > I want to bring my existing project into Forge. It's located at /path/to/my/project.
265
281
 
266
282
  The agent will:
267
- - Detect what kind of project it is (website, video, game, library, etc.)
283
+ - Detect what kind of project it is (website, game, library, etc.)
268
284
  - Move all your files into the new Forge project — including hidden files like `.env`
269
285
  - Optionally bring your git history
270
286
  - Verify everything builds correctly
@@ -287,7 +303,7 @@ forge create --name my-project
287
303
  # With a specific stack profile
288
304
  forge create --name my-site --profile astro-typescript-turborepo
289
305
  forge create --name my-game --profile phaser-turborepo
290
- forge create --name my-video --profile editframe
306
+ forge create --name my-godot-game --profile godot-csharp
291
307
  forge create --name my-library --profile forge-shell
292
308
 
293
309
  ```
@@ -311,7 +327,7 @@ forge create --name my-project
311
327
  # 3. Run the /forge-bootstrap skill and choose "transplant" mode
312
328
  # The skill will:
313
329
  # - Ask for the path to your existing codebase
314
- # - Detect the stack automatically (Astro, Phaser, Editframe, etc.)
330
+ # - Detect the stack automatically (Astro, Phaser, Godot, etc.)
315
331
  # - Migrate all files (including .env and git-ignored files)
316
332
  # - Optionally transfer git history
317
333
  # - Verify the build
@@ -339,16 +355,14 @@ A stack profile defines the project scaffold: directory structure, dependencies,
339
355
  | `forge-shell` | Governance / library | Minimal Forge shell (default) | — | Governance-only projects, libraries, non-web projects |
340
356
  | `astro-typescript-turborepo` | Website | Astro + TypeScript + pnpm + Turborepo | `sites/my-site` | Websites, web apps, content-driven sites |
341
357
  | `phaser-turborepo` | Browser game | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Browser games, interactive experiences |
342
- | `editframe` | Video | Editframe React + Vite + TailwindCSS | `compositions/my-first-video` | Video compositions, brand videos, motion design |
343
-
344
- The `editframe` profile also supports an **HTML template** (instead of React) for users who prefer web components over JSX. Choose between the two during project setup.
358
+ | `godot-csharp` | Godot game | Godot 4.x + C# + pnpm + Turborepo | `games/my-game` | Desktop/mobile games, Godot-based interactive projects |
345
359
 
346
360
  ```sh
347
361
  # List available profiles (after install)
348
362
  forge profile.validate
349
363
  ```
350
364
 
351
- When you bring an existing project through the `/forge-bootstrap` transplant mode, Forge detects the matching profile automatically by checking for marker files (`astro.config.*`, `phaser.config.*`, `editframe.config.*`, etc.).
365
+ When you bring an existing project through the `/forge-bootstrap` transplant mode, Forge detects the matching profile automatically by checking for marker files (`astro.config.*`, `phaser.config.*`, `project.godot`, etc.).
352
366
 
353
367
  ## Upgrade flow
354
368
 
@@ -369,7 +383,7 @@ forge doctor
369
383
 
370
384
  ## What forge gives you
371
385
 
372
- - **44 skills** (fo-pipeline, grilling, preferences, skill authoring, Editframe video composition) — deployed to `.agents/skills/` by `forge create`
386
+ - **44 skills** (fo-pipeline, grilling, preferences, skill authoring) — deployed to `.agents/skills/` by `forge create`
373
387
  - **RFC workflow** — create, validate, list, graph, archive, acceptance probes, decision logs, DNA trace
374
388
  - **ADR workflow** — lightweight architectural decision records
375
389
  - **Spec vendoring** — vendor external spec packages as immutable snapshots with integrity manifests
package/README.uk.md CHANGED
@@ -12,13 +12,49 @@ Forge підтримує чотири типи проєктів. Ви обира
12
12
  | --- | --- | --- |
13
13
  | **Вебсайт** | Публічний сайт або вебзастосунок — сторінки, блог, портфоліо, лендінг, інтернет-магазин | Сайт фотостудії, сайт ресторану, лендінг SaaS |
14
14
  | **Браузерна гра** | Інтерактивна гра, що працює в браузері — 2D, аркада, головоломка, пригода | Лови зірки, головоломка з плитками, платформер |
15
- | **Відео** | Програмна відеокомпозиція — анімований логотип, інтро, презентація продукту, motion-дизайн | Брендове інтро, демо продукту, реклама для соцмереж |
16
15
  | **Управління / бібліотека** | Бібліотека коду або проєкт лише з управлінською структурою — без сайту, без гри, без відео, лише структура та документація | npm-пакет, внутрішній інструмент, центр документації |
16
+ | **Гра Godot** | Десктопна або мобільна гра на Godot 4.x з C# — 2D, 3D, платформер, RPG | Пригода з виглядом зверху, 3D-платформер, головоломка |
17
17
 
18
18
  Кожен тип проєкту отримує власний каркас: правильну структуру папок, правильні залежності, правильні інструменти. Вам не потрібно знати, що це таке — Forge налаштує все за вас.
19
19
 
20
20
  ---
21
21
 
22
+ ## Forge та рушій Werkstatt
23
+
24
+ Forge — це **шар управління**: навички, RFC/ADR робочі процеси, угоди про найменування, вендоринг специфікацій та CLI. Він незалежний від фреймворку та не має Runtime-залежностей (тільки `yaml` + `zod`).
25
+
26
+ Для повного управління життєвим циклом проєкту — місії, релізи, розгортання, сертифікація, перевірки якості, генерація контенту — Forge підключається до **рушія Werkstatt** та **плагінів специфічних для стеку**. Це окремі npm-пакети, які встановлюються разом з Forge, коли потрібні можливості runtime понад управління.
27
+
28
+ | Пакет | Призначення | Потрібен для |
29
+ | --- | --- | --- |
30
+ | `@warpgogol/werkstatt` | Рушій runtime — місії, релізи, розгортання Leitstand, сертифікація, Bordbuch, сховище артефактів | Усі типи проєктів з управлінням життєвим циклом |
31
+ | `@warpgogol/werkstatt-shared` | Спільна інфраструктура — перевірки, інтеграція, онтологія, паспорт | Встановлюється автоматично з рушієм |
32
+ | `@warpgogol/werkstatt-site` | Плагін Astro-сайту — конвеєр збірки, перевірки контенту, codegen, адаптери розгортання | Вебсайт-проєкти (`astro-typescript-turborepo`) |
33
+ | `@warpgogol/werkstatt-game` | Плагін Phaser-гри — валідатори гри, збірка Vite, адаптери розгортання | Проєкти браузерних ігор (`phaser-turborepo`) |
34
+ | `@warpgogol/werkstatt-godot` | Плагін Godot — валідатори сцен, збірка dotnet, розгортання itch.io, навички Godot | Проєкти ігор Godot (`godot-csharp`) |
35
+
36
+ ### Коли потрібні ці пакети
37
+
38
+ - **Проєкти лише з управлінням** (RFC, ADR, навички, центри документації) — Forge сам по собі достатній.
39
+ - **Вебсайти, ігри, проєкти Godot** — встановіть `@warpgogol/werkstatt` (рушій) плюс відповідний плагін стеку. Навичка `forge-bootstrap` налаштовує прив'язки автоматично; самі пакети потрібно встановити як devDependencies.
40
+
41
+ ### Встановлення пакунків рушія
42
+
43
+ ```sh
44
+ # Проєкт вебсайту
45
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-site
46
+
47
+ # Проєкт браузерної гри
48
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-game
49
+
50
+ # Проєкт гри Godot
51
+ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-godot
52
+ ```
53
+
54
+ > **Примітка для агентів:** Після створення проєкту командою `forge create` завжди встановлюйте рушій та відповідний плагін стеку. Прив'язки в `forge.yaml` посилаються на команди з цих пакунків (напр. `pnpm exec werkstatt run rfc.validate`), і вони не працюватимуть, якщо пакунки не встановлені.
55
+
56
+ ---
57
+
22
58
  ## Повний посібник зі встановлення (з нуля)
23
59
 
24
60
  Якщо ви ніколи раніше не програмували, цей розділ проведе вас від абсолютно порожнього комп'ютера до робочого налаштування Forge. Виконайте кроки для вашої операційної системи.
@@ -154,43 +190,27 @@ Forge працює через розмову з ШІ-агентом. Вам по
154
190
 
155
191
  Можете також використовувати **Cursor** ([cursor.com](https://cursor.com)) або будь-яке IDE, що підтримує навички ШІ-агентів.
156
192
 
157
- ### Додатково — Встановлення FFmpeg (лише для відеопроєктів)
193
+ ### Додатково — Встановлення Godot та .NET (лише для проєктів ігор Godot)
158
194
 
159
- Якщо ви плануєте створювати **відеопроєкти** (профіль `editframe`), вам потрібен **FFmpeg** безкоштовний інструмент для обробки відео та аудіо.
195
+ Якщо ви плануєте створювати **ігри Godot** (профіль `godot-csharp`), вам потрібні два додаткові інструменти:
160
196
 
161
- **Ubuntu:**
197
+ - **Godot 4.x** (з підтримкою .NET) — ігровий рушій. Завантажте його з [godotengine.org/download](https://godotengine.org/download). Обов'язково оберіть версію ".NET" (не стандартну версію).
198
+ - **.NET SDK 8+** — runtime C# та інструменти збірки. Завантажте з [dotnet.microsoft.com/download](https://dotnet.microsoft.com/download).
199
+
200
+ Перевірте, що обидва встановлені:
162
201
 
163
202
  ```sh
164
- sudo apt-get install -y ffmpeg
165
- ffmpeg -version
203
+ godot --version
204
+ dotnet --version
166
205
  ```
167
206
 
168
- **Windows:**
169
-
170
- 1. Відкрийте [ffmpeg.org/download.html](https://ffmpeg.org/download.html) у браузері.
171
- 2. Завантажте збірку для Windows (шукайте «Windows builds» — збірки gyan.dev або BtbN — хороші варіанти).
172
- 3. Розпакуйте завантажений `.zip` файл у папку, наприклад `C:\ffmpeg`.
173
- 4. Додайте FFmpeg до системної змінної PATH:
174
- - Відкрийте меню Пуск, знайдіть «Environment Variables» і натисніть «Edit the system environment variables».
175
- - Натисніть **Environment Variables**.
176
- - У розділі «System variables» (або «User variables») знайдіть **Path**, виберіть його та натисніть **Edit**.
177
- - Натисніть **New** і введіть `C:\ffmpeg\bin` (або туди, куди ви розпакували FFmpeg, у підпапку `bin`).
178
- - Натисніть **OK** у всіх трьох вікнах.
179
- 5. Закрийте та знову відкрийте PowerShell, потім перевірте:
180
-
181
- ```sh
182
- ffmpeg -version
183
- ```
184
-
185
- Ви маєте побачити інформацію про версію, а не помилку.
186
-
187
207
  ### Усунення проблем
188
208
 
189
209
  - **«command not found» після встановлення Node.js** — Закрийте та знову відкрийте термінал (Ubuntu) або PowerShell (Windows). Системі потрібно перезавантажити список доступних команд.
190
210
  - **«EACCES permission denied» в Ubuntu під час глобального встановлення Forge** — Виконайте `sudo pnpm add -g @warpgogol/forge`.
191
211
  - **«corepack: command not found»** — Ваша версія Node.js занадто стара. Встановіть Node.js 24+ за кроками вище.
192
212
  - **Windsurf не бачить `forge`** — Закрийте та знову відкрийте Windsurf після встановлення Forge. IDE потрібно перезапустити, щоб підхопити нові глобальні команди.
193
- - **ШІ-агент не знає про Forge** — Ви відкрили порожню папку, але ШІ-агент не має контексту Forge. Спочатку виконайте `forge create --name my-project --profile editframe` (або відповідний профіль) у терміналі, потім відкрийте створену папку в вашому IDE. Команда `forge create` наповнює папку навичками, конфігурацією та `AGENTS.md` — без цього ШІ-агент не може виявити Forge.
213
+ - **ШІ-агент не знає про Forge** — Ви відкрили порожню папку, але ШІ-агент не має контексту Forge. Спочатку виконайте `forge create --name my-project --profile astro-typescript-turborepo` (або відповідний профіль) у терміналі, потім відкрийте створену папку в вашому IDE. Команда `forge create` наповнює папку навичками, конфігурацією та `AGENTS.md` — без цього ШІ-агент не може виявити Forge.
194
214
 
195
215
  ---
196
216
 
@@ -205,26 +225,22 @@ ffmpeg -version
205
225
  1. **Створіть проєкт Forge.** Відкрийте термінал (PowerShell на Windows, Термінал на Ubuntu) і виконайте:
206
226
 
207
227
  ```sh
208
- forge create --name my-brand-video --profile editframe
228
+ forge create --name my-site --profile astro-typescript-turborepo
209
229
  ```
210
230
 
211
- Замініть `my-brand-video` на назву вашого проєкту (малі літери та дефіси). Це створить нову папку з усьом, що потрібно Forge — навичками, конфігурацією та структурою проєкту. Для інших типів проєктів використовуйте інший `--profile`:
231
+ Замініть `my-site` на назву вашого проєкту (малі літери та дефіси). Це створить нову папку з усьом, що потрібно Forge — навичками, конфігурацією та структурою проєкту. Для інших типів проєктів використовуйте інший `--profile`:
212
232
 
213
- | Що ви хочете створити | Прапорець профілю |
214
- | -------------------------------------------- | -------------------------------------- |
215
- | Відео (брендове відео, інтро, motion-дизайн) | `--profile editframe` |
216
- | Вебсайт (лендінг, блог, портфоліо) | `--profile astro-typescript-turborepo` |
217
- | Браузерна гра (2D, аркада, головоломка) | `--profile phaser-turborepo` |
218
- | Бібліотека або проєкт лише з управлінням | `--profile forge-shell` |
233
+ | Що ви хочете створити | Прапорець профілю |
234
+ | ---------------------------------------- | -------------------------------------- |
235
+ | Вебсайт (лендінг, блог, портфоліо) | `--profile astro-typescript-turborepo` |
236
+ | Браузерна гра (2D, аркада, головоломка) | `--profile phaser-turborepo` |
237
+ | Гра Godot (десктоп, мобільний, 2D/3D) | `--profile godot-csharp` |
238
+ | Бібліотека або проєкт лише з управлінням | `--profile forge-shell` |
219
239
 
220
240
  2. **Відкрийте папку проєкту в вашому IDE.** Відкрийте папку, створену на кроці 1, у Windsurf або вашому IDE.
221
241
 
222
242
  3. **Скажіть ШІ-агенту, що ви хочете створити.** Просто напишіть це в чаті своїми словами. Наприклад:
223
243
 
224
- > Я хочу створити брендове відео для своєї кав'ярні. Воно має мати анімований логотип, коротке інтро та презентацію продукту.
225
-
226
- Або:
227
-
228
244
  > Я хочу зробити вебсайт для своєї фотостудії.
229
245
 
230
246
  Або:
@@ -236,16 +252,16 @@ ffmpeg -version
236
252
  > Я хочу створити TypeScript-бібліотеку для розрахунку астрологічних карт.
237
253
 
238
254
  Це все. ШІ-агент зробить усе інше:
239
- - Налаштує структуру проєкту залежно від того, що ви описали (відео, вебсайт, гра, бібліотека тощо)
255
+ - Налаштує структуру проєкту залежно від того, що ви описали (вебсайт, гра, бібліотека тощо)
240
256
  - Налаштує мовні вподобання та параметри проєкту
241
- - Запустить живий попередній перегляд, щоб ви бачили свою роботу (для вебсайтів, ігор та відео)
257
+ - Запустить живий попередній перегляд, щоб ви бачили свою роботу (для вебсайтів та ігор)
242
258
  - Скаже вам URL для відкриття в браузері
243
259
 
244
- 4. **Дивіться попередній перегляд.** Для вебсайтів, ігор та відео ШІ-агент дасть вам посилання localhost. Натисніть його — ваш проєкт уже запущений. Коли ви описуєте зміни, агент оновлює проєкт, а попередній перегляд оновлюється автоматично.
260
+ 4. **Дивіться попередній перегляд.** Для вебсайтів та ігор ШІ-агент дасть вам посилання localhost. Натисніть його — ваш проєкт уже запущений. Коли ви описуєте зміни, агент оновлює проєкт, а попередній перегляд оновлюється автоматично.
245
261
 
246
262
  Для проєктів управління та бібліотек візуального попереднього перегляду немає — агент налаштує структуру проєкту та скаже, коли все готово.
247
263
 
248
- 5. **Створюйте разом.** Далі ви просто розмовляєте. Хочете інший колір? Хочете додати сцену? Хочете змінити музику? Хочете додати нову функцію до бібліотеки? Просто скажіть. Агент виконає всю технічну роботу.
264
+ 5. **Створюйте разом.** Далі ви просто розмовляєте. Хочете інший колір? Хочете додати сцену? Хочете додати нову функцію до бібліотеки? Просто скажіть. Агент виконає всю технічну роботу.
249
265
 
250
266
  #### Перенесення наявного проєкту у Forge
251
267
 
@@ -264,7 +280,7 @@ ffmpeg -version
264
280
  > Я хочу перенести свій наявний проєкт у Forge. Він знаходиться за шляхом /path/to/my/project.
265
281
 
266
282
  Агент:
267
- - Визначить, який це тип проєкту (вебсайт, відео, гра, бібліотека тощо)
283
+ - Визначить, який це тип проєкту (вебсайт, гра, бібліотека тощо)
268
284
  - Перемістить усі ваші файли у новий проєкт Forge — включно з прихованими файлами на кшталт `.env`
269
285
  - За бажанням перенесе вашу історію git
270
286
  - Перевірить, чи все коректно збирається
@@ -287,7 +303,7 @@ forge create --name my-project
287
303
  # З конкретним профілем стеку
288
304
  forge create --name my-site --profile astro-typescript-turborepo
289
305
  forge create --name my-game --profile phaser-turborepo
290
- forge create --name my-video --profile editframe
306
+ forge create --name my-godot-game --profile godot-csharp
291
307
  forge create --name my-library --profile forge-shell
292
308
 
293
309
  ```
@@ -311,7 +327,7 @@ forge create --name my-project
311
327
  # 3. Запустіть навичку /forge-bootstrap і оберіть режим "transplant"
312
328
  # Навичка:
313
329
  # - Запитає шлях до вашого наявного коду
314
- # - Автоматично визначить стек (Astro, Phaser, Editframe тощо)
330
+ # - Автоматично визначить стек (Astro, Phaser, Godot тощо)
315
331
  # - Перенесе всі файли (включно з .env та git-ігнорованими)
316
332
  # - За бажанням перенесе історію git
317
333
  # - Перевірить збірку
@@ -339,16 +355,14 @@ forge skill.list
339
355
  | `forge-shell` | Управління / бібліотека | Мінімальний каркас Forge (за замовчуванням) | — | Проєкти лише з управлінням, бібліотеки, невеб-проєкти |
340
356
  | `astro-typescript-turborepo` | Вебсайт | Astro + TypeScript + pnpm + Turborepo | `sites/my-site` | Вебсайти, вебзастосунки, контентні сайти |
341
357
  | `phaser-turborepo` | Браузерна гра | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Браузерні ігри, інтерактивні досвіди |
342
- | `editframe` | Відео | Editframe React + Vite + TailwindCSS | `compositions/my-first-video` | Відеокомпозиції, брендові відео, motion-дизайн |
343
-
344
- Профіль `editframe` також підтримує **HTML-шаблон** (замість React) для користувачів, які віддають перевагу веб-компонентам замість JSX. Оберіть між ними під час налаштування проєкту.
358
+ | `godot-csharp` | Гра Godot | Godot 4.x + C# + pnpm + Turborepo | `games/my-game` | Десктопні/мобільні ігри, інтерактивні проєкти на Godot |
345
359
 
346
360
  ```sh
347
361
  # Список доступних профілів (після встановлення)
348
362
  forge profile.validate
349
363
  ```
350
364
 
351
- Коли ви переносите наявний проєкт через режим `/forge-bootstrap` transplant, Forge автоматично визначає відповідний профіль, перевіряючи файли-маркери (`astro.config.*`, `phaser.config.*`, `editframe.config.*` тощо).
365
+ Коли ви переносите наявний проєкт через режим `/forge-bootstrap` transplant, Forge автоматично визначає відповідний профіль, перевіряючи файли-маркери (`astro.config.*`, `phaser.config.*`, `project.godot` тощо).
352
366
 
353
367
  ## Процес оновлення
354
368
 
@@ -369,7 +383,7 @@ forge doctor
369
383
 
370
384
  ## Що дає Forge
371
385
 
372
- - **44 навички** (fo-pipeline, grilling, preferences, написання навичок, Editframe відеокомпозиція) — розгортаються у `.agents/skills/` командою `forge create`
386
+ - **44 навички** (fo-pipeline, grilling, preferences, написання навичок) — розгортаються у `.agents/skills/` командою `forge create`
373
387
  - **RFC робочий процес** — створення, валідація, список, граф, архівування, acceptance-зондування, журнали рішень, DNA-трасування
374
388
  - **ADR робочий процес** — легковісні архітектурні записи рішень
375
389
  - **Вендоринг специфікацій** — вендоринг зовнішніх пакетів специфікацій як незмінних знімків з маніфестами цілісності
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AA8GrB,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CAqSnD"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AA8GrB,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CA0SnD"}
@@ -315,7 +315,13 @@ export async function runMissionArchive(input, context) {
315
315
  stdio: ["pipe", "pipe", "pipe"],
316
316
  });
317
317
  for (const m of moved) {
318
- execSync(`git add -A ${JSON.stringify(m.from)} ${JSON.stringify(m.to)}`, {
318
+ execSync(`git add -A ${JSON.stringify(m.to)}`, {
319
+ cwd: workspaceRoot,
320
+ stdio: ["pipe", "pipe", "pipe"],
321
+ });
322
+ if (existsSync(m.from))
323
+ continue;
324
+ execSync(`git rm -r --cached --ignore-unmatch ${JSON.stringify(m.from)}`, {
319
325
  cwd: workspaceRoot,
320
326
  stdio: ["pipe", "pipe", "pipe"],
321
327
  });
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;EAqBE;AAEF,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAM1C,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,GAI1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAEnG,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,MAAM;IACN,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;CACA,CAAC;AAEX,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACrD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAA4B,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD,KAAK,UAAU,cAAc,CAC3B,UAAkB,EAClB,UAAkB,EAClB,eAAuB,EACvB,SAAiB,EACjB,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,SAA4C,EAC5C,MAAe,EACf,MAAqE;IAErE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,8DAA8D;QAC9D,sEAAsE;QACtE,8EAA8E;QAC9E,0EAA0E;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBACxD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,gDAAgD;gBAChD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,CACT,gDAAgD,SAAS,KAAK,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACtI,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kCAAkC,EAAE;iBAChF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,iEAAiE;QACjE,kEAAkE;QAClE,wEAAwE;QACxE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;QACtE,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAwB,EACxB,OAA4B;IAE5B,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACjE,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAuB,CAAC;IAEjE,IAAI,YAAY,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,YAAqB,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CACb,qBAAqB,YAAY,sBAAsB,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,qDAAqD;IACrD,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,cAAc,GAAG,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;YAC1E,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,wCAAwC;SAC7C,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5E,wEAAwE;IACxE,qEAAqE;IACrE,gFAAgF;IAChF,sDAAsD;IACtD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,IAAI;gBACjB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,yBAAyB;aAClC,CAAC,CAAC;YACH,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;SACpF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtB,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS;gBACT,GAAG,EAAE,GAAG,YAAY,IAAI,SAAS,EAAE;gBACnC,MAAM,EAAE,qBAAqB;aAC9B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAC;QAEtE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS;gBACT,GAAG,EAAE,GAAG,YAAY,IAAI,SAAS,EAAE;gBACnC,MAAM,EAAE,SAAS,KAAK,kBAAkB;aACzC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,YAAY,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS;gBACT,GAAG,EAAE,GAAG,YAAY,IAAI,SAAS,EAAE;gBACnC,MAAM,EAAE,SAAS,KAAK,4BAA4B,YAAY,EAAE;aACjE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,gBAAgB,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9E,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC;QAEjD,+DAA+D;QAC/D,kFAAkF;QAClF,IACE,cAAc;YACd,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;YACnC,CAAC,cAAc,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,EACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS;gBACT,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,0CAA0C;aACnD,CAAC,CAAC;YACH,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,SAAS,cAAc,CAAC,CAAC;YAC7D,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,EACd,MAAM,EACN,MAAM,CACP,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,iFAAiF;IACjF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAElF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACjF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE5F,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;gBACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBAEzD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,OAAO,CAAC,IAAI,CAAC;wBACX,SAAS;wBACT,GAAG,EAAE,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,IAAI,SAAS,EAAE;wBACvE,MAAM,EAAE,qBAAqB;qBAC9B,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAC;gBAEtE,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC;wBACX,SAAS;wBACT,GAAG,EAAE,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,IAAI,SAAS,EAAE;wBACvE,MAAM,EAAE,qBAAqB,KAAK,GAAG;qBACtC,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAED,mDAAmD;gBACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,gBAAgB,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAErF,+DAA+D;gBAC/D,kFAAkF;gBAClF,IACE,cAAc;oBACd,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC;oBACnC,CAAC,cAAc,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,EACrD,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC;wBACX,SAAS;wBACT,GAAG,EAAE,SAAS;wBACd,MAAM,EAAE,0CAA0C;qBACnD,CAAC,CAAC;oBACH,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,sBAAsB,SAAS,cAAc,CAAC,CAAC;oBAC7D,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,kBAAkB,EAClB,UAAU,EACV,EAAE,EACF,SAAS,EACT,KAAK,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,MAAM,CACP,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACT,yCAAyC,KAAK,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAC3F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CACZ,0BAA0B,KAAK,CAAC,MAAM,wBAAwB,OAAO,CAAC,MAAM,EAAE,CAC/E,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,EAAE;gBACvB,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,QAAQ,CAAC,uCAAuC,EAAE;gBACvE,GAAG,EAAE,aAAa;gBAClB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,cAAc,EAAE,CAAC;gBACnB,QAAQ,CAAC,wBAAwB,EAAE;oBACjC,GAAG,EAAE,aAAa;oBAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iBAChC,CAAC,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,QAAQ,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qBAChC,CAAC,CAAC;oBACH,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACjC,QAAQ,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE;wBACxE,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qBAChC,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,CACN,iBAAiB,IAAI,CAAC,SAAS,CAAC,wDAAwD,KAAK,CAAC,MAAM,SAAS,CAAC,EAAE,EAChH,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACxD,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,uCAAuC,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,iGAAiG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACzK,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,OAAO;YACP,MAAM;SACP;QACD,OAAO,EAAE,MAAM;YACb,CAAC,CAAC,wBAAwB,KAAK,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,EAAE;YAC3E,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,wBAAwB,OAAO,CAAC,MAAM,EAAE;QACjE,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,4EAA4E;gBACpF,IAAI,EAAE,UAAU;aACjB;SACF;KACF,CAAC;AACJ,CAAC"}