@namzu/sandbox 1.1.0

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +474 -0
  2. package/LICENSE.md +110 -0
  3. package/README.md +148 -0
  4. package/dist/backends/aci-standby-pool/index.d.ts +104 -0
  5. package/dist/backends/aci-standby-pool/index.d.ts.map +1 -0
  6. package/dist/backends/aci-standby-pool/index.js +425 -0
  7. package/dist/backends/aci-standby-pool/index.js.map +1 -0
  8. package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.d.ts +40 -0
  9. package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.d.ts.map +1 -0
  10. package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.js +157 -0
  11. package/dist/backends/docker/__tests__/leaf-permissions.smoke.test.js.map +1 -0
  12. package/dist/backends/docker/index.d.ts +118 -0
  13. package/dist/backends/docker/index.d.ts.map +1 -0
  14. package/dist/backends/docker/index.js +645 -0
  15. package/dist/backends/docker/index.js.map +1 -0
  16. package/dist/backends/firecracker/__tests__/backend.test.d.ts +13 -0
  17. package/dist/backends/firecracker/__tests__/backend.test.d.ts.map +1 -0
  18. package/dist/backends/firecracker/__tests__/backend.test.js +353 -0
  19. package/dist/backends/firecracker/__tests__/backend.test.js.map +1 -0
  20. package/dist/backends/firecracker/__tests__/control-plane-mtls.test.d.ts +19 -0
  21. package/dist/backends/firecracker/__tests__/control-plane-mtls.test.d.ts.map +1 -0
  22. package/dist/backends/firecracker/__tests__/control-plane-mtls.test.js +201 -0
  23. package/dist/backends/firecracker/__tests__/control-plane-mtls.test.js.map +1 -0
  24. package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.d.ts +39 -0
  25. package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.d.ts.map +1 -0
  26. package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.js +149 -0
  27. package/dist/backends/firecracker/__tests__/fixtures/mtls-pki.js.map +1 -0
  28. package/dist/backends/firecracker/__tests__/protocol.test.d.ts +6 -0
  29. package/dist/backends/firecracker/__tests__/protocol.test.d.ts.map +1 -0
  30. package/dist/backends/firecracker/__tests__/protocol.test.js +77 -0
  31. package/dist/backends/firecracker/__tests__/protocol.test.js.map +1 -0
  32. package/dist/backends/firecracker/__tests__/transport.test.d.ts +20 -0
  33. package/dist/backends/firecracker/__tests__/transport.test.d.ts.map +1 -0
  34. package/dist/backends/firecracker/__tests__/transport.test.js +449 -0
  35. package/dist/backends/firecracker/__tests__/transport.test.js.map +1 -0
  36. package/dist/backends/firecracker/index.d.ts +124 -0
  37. package/dist/backends/firecracker/index.d.ts.map +1 -0
  38. package/dist/backends/firecracker/index.js +334 -0
  39. package/dist/backends/firecracker/index.js.map +1 -0
  40. package/dist/backends/firecracker/protocol.d.ts +132 -0
  41. package/dist/backends/firecracker/protocol.d.ts.map +1 -0
  42. package/dist/backends/firecracker/protocol.js +112 -0
  43. package/dist/backends/firecracker/protocol.js.map +1 -0
  44. package/dist/backends/firecracker/transport.d.ts +251 -0
  45. package/dist/backends/firecracker/transport.d.ts.map +1 -0
  46. package/dist/backends/firecracker/transport.js +524 -0
  47. package/dist/backends/firecracker/transport.js.map +1 -0
  48. package/dist/index.d.ts +611 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +376 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/index.test.d.ts +28 -0
  53. package/dist/index.test.d.ts.map +1 -0
  54. package/dist/index.test.js +670 -0
  55. package/dist/index.test.js.map +1 -0
  56. package/package.json +54 -0
  57. package/src/backends/aci-standby-pool/index.ts +602 -0
  58. package/src/backends/docker/__tests__/leaf-permissions.smoke.test.ts +169 -0
  59. package/src/backends/docker/index.ts +826 -0
  60. package/src/backends/firecracker/__tests__/backend.test.ts +418 -0
  61. package/src/backends/firecracker/__tests__/control-plane-mtls.test.ts +253 -0
  62. package/src/backends/firecracker/__tests__/fixtures/mtls-pki.ts +166 -0
  63. package/src/backends/firecracker/__tests__/protocol.test.ts +90 -0
  64. package/src/backends/firecracker/__tests__/transport.test.ts +526 -0
  65. package/src/backends/firecracker/index.ts +528 -0
  66. package/src/backends/firecracker/protocol.ts +191 -0
  67. package/src/backends/firecracker/transport.ts +667 -0
  68. package/src/index.test.ts +731 -0
  69. package/src/index.ts +930 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/aci-standby-pool/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Docker smoke test — leaf-mount permission semantics.
3
+ *
4
+ * Concern Codex flagged: the Dockerfile pre-creates only the parent
5
+ * dirs (`/mnt`, `/mnt/user-data`, `/mnt/skills`) as root-owned 0555.
6
+ * The runtime claim is that:
7
+ *
8
+ * 1. When `outputs` IS bound, uid 1001 (the worker user) can write
9
+ * into it.
10
+ * 2. When a leaf path (e.g. `/mnt/user-data/uploads`) is NOT bound,
11
+ * the path simply does not exist — `stat` returns ENOENT, NOT
12
+ * a writable empty dir.
13
+ *
14
+ * Both of those are kernel-level mount-namespace properties, not
15
+ * unit-testable. This file exercises them against a real docker
16
+ * daemon. Run via:
17
+ *
18
+ * pnpm --filter @namzu/sandbox test:smoke
19
+ * # or, from the monorepo root:
20
+ * pnpm sandbox:smoke
21
+ *
22
+ * Excluded from the default `pnpm test` run by `vitest.config.ts`.
23
+ *
24
+ * Pre-requisites:
25
+ * - `docker` CLI on PATH.
26
+ * - A pre-built reference image. By default this test looks for
27
+ * `namzu-sandbox-worker:smoke`. Override with the
28
+ * `NAMZU_SANDBOX_SMOKE_IMAGE` env. Build the image once with:
29
+ * `docker build -t namzu-sandbox-worker:smoke -f packages/sandbox/worker/Dockerfile packages/sandbox`
30
+ * - A host-side scratch directory the test creates and tears down.
31
+ *
32
+ * On a developer machine without docker the test self-skips with a
33
+ * clear message. On CI (`process.env.CI === 'true'`) the same
34
+ * pre-conditions FAIL FAST instead of skipping, so a CI
35
+ * misconfiguration cannot silently mask a regression — see the
36
+ * `.github/workflows/sandbox-smoke.yml` workflow which is meant to
37
+ * always run with docker available.
38
+ */
39
+ export {};
40
+ //# sourceMappingURL=leaf-permissions.smoke.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf-permissions.smoke.test.d.ts","sourceRoot":"","sources":["../../../../src/backends/docker/__tests__/leaf-permissions.smoke.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Docker smoke test — leaf-mount permission semantics.
3
+ *
4
+ * Concern Codex flagged: the Dockerfile pre-creates only the parent
5
+ * dirs (`/mnt`, `/mnt/user-data`, `/mnt/skills`) as root-owned 0555.
6
+ * The runtime claim is that:
7
+ *
8
+ * 1. When `outputs` IS bound, uid 1001 (the worker user) can write
9
+ * into it.
10
+ * 2. When a leaf path (e.g. `/mnt/user-data/uploads`) is NOT bound,
11
+ * the path simply does not exist — `stat` returns ENOENT, NOT
12
+ * a writable empty dir.
13
+ *
14
+ * Both of those are kernel-level mount-namespace properties, not
15
+ * unit-testable. This file exercises them against a real docker
16
+ * daemon. Run via:
17
+ *
18
+ * pnpm --filter @namzu/sandbox test:smoke
19
+ * # or, from the monorepo root:
20
+ * pnpm sandbox:smoke
21
+ *
22
+ * Excluded from the default `pnpm test` run by `vitest.config.ts`.
23
+ *
24
+ * Pre-requisites:
25
+ * - `docker` CLI on PATH.
26
+ * - A pre-built reference image. By default this test looks for
27
+ * `namzu-sandbox-worker:smoke`. Override with the
28
+ * `NAMZU_SANDBOX_SMOKE_IMAGE` env. Build the image once with:
29
+ * `docker build -t namzu-sandbox-worker:smoke -f packages/sandbox/worker/Dockerfile packages/sandbox`
30
+ * - A host-side scratch directory the test creates and tears down.
31
+ *
32
+ * On a developer machine without docker the test self-skips with a
33
+ * clear message. On CI (`process.env.CI === 'true'`) the same
34
+ * pre-conditions FAIL FAST instead of skipping, so a CI
35
+ * misconfiguration cannot silently mask a regression — see the
36
+ * `.github/workflows/sandbox-smoke.yml` workflow which is meant to
37
+ * always run with docker available.
38
+ */
39
+ import { spawnSync } from 'node:child_process';
40
+ import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
41
+ import { tmpdir } from 'node:os';
42
+ import { join } from 'node:path';
43
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
44
+ import { createSandboxProvider } from '../../../index.js';
45
+ const IMAGE = process.env.NAMZU_SANDBOX_SMOKE_IMAGE ?? 'namzu-sandbox-worker:smoke';
46
+ const IS_CI = process.env.CI === 'true';
47
+ function dockerAvailable() {
48
+ const probe = spawnSync('docker', ['version', '--format', '{{.Server.Version}}'], {
49
+ stdio: 'ignore',
50
+ });
51
+ return probe.status === 0;
52
+ }
53
+ function imagePresent(image) {
54
+ const probe = spawnSync('docker', ['image', 'inspect', image], { stdio: 'ignore' });
55
+ return probe.status === 0;
56
+ }
57
+ const skipReason = !dockerAvailable()
58
+ ? 'docker daemon not reachable — skipping smoke test'
59
+ : !imagePresent(IMAGE)
60
+ ? `image ${IMAGE} not present — build it with \`docker build -t ${IMAGE} -f packages/sandbox/worker/Dockerfile packages/sandbox\` and re-run`
61
+ : null;
62
+ // CI fail-fast: the smoke workflow is meant to always have docker +
63
+ // the reference image. Skipping silently in that environment would
64
+ // let a regression land without the test even attempting to run.
65
+ // Locally (no `CI=true`) skipping with a hint is the right behaviour
66
+ // for a developer who hasn't built the image yet.
67
+ if (IS_CI && skipReason) {
68
+ throw new Error(`smoke test pre-condition not satisfied on CI: ${skipReason}. Configure the workflow to install docker and build the reference image before running.`);
69
+ }
70
+ describe.skipIf(skipReason !== null)('docker smoke — leaf permissions', () => {
71
+ let outputsHost;
72
+ beforeAll(() => {
73
+ outputsHost = mkdtempSync(join(tmpdir(), 'namzu-sandbox-smoke-out-'));
74
+ });
75
+ afterAll(() => {
76
+ if (outputsHost) {
77
+ rmSync(outputsHost, { recursive: true, force: true });
78
+ }
79
+ });
80
+ it('uid 1001 can write to the outputs bind, and the host sees the file', async () => {
81
+ const provider = createSandboxProvider({
82
+ backend: { tier: 'container', image: IMAGE },
83
+ layout: {
84
+ outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
85
+ },
86
+ });
87
+ const sandbox = await provider.create();
88
+ try {
89
+ const result = await sandbox.exec('sh', [
90
+ '-c',
91
+ 'id -u && echo "smoke" > /mnt/user-data/outputs/hello.txt',
92
+ ]);
93
+ expect(result.exitCode).toBe(0);
94
+ expect(result.stdout.trim()).toBe('1001');
95
+ // Host-side read confirms the bind round-trips.
96
+ const hostContent = readFileSync(join(outputsHost, 'hello.txt'), 'utf8');
97
+ expect(hostContent.trim()).toBe('smoke');
98
+ }
99
+ finally {
100
+ await sandbox.destroy();
101
+ }
102
+ }, 60_000);
103
+ it('unbound leaves do not exist — uploads/transcripts/tool_results are ENOENT, not empty', async () => {
104
+ const provider = createSandboxProvider({
105
+ backend: { tier: 'container', image: IMAGE },
106
+ layout: {
107
+ outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
108
+ // Intentionally leave uploads / toolResults / transcripts
109
+ // unbound. The Dockerfile pre-creates only the parents
110
+ // (`/mnt/user-data`, `/mnt/skills`); leaves should not
111
+ // exist and `stat` should fail.
112
+ },
113
+ });
114
+ const sandbox = await provider.create();
115
+ try {
116
+ for (const leafPath of [
117
+ '/mnt/user-data/uploads',
118
+ '/mnt/user-data/tool_results',
119
+ '/mnt/transcripts',
120
+ ]) {
121
+ const result = await sandbox.exec('sh', ['-c', `stat ${leafPath} 2>&1; echo --rc=$?`]);
122
+ // `stat` returns non-zero on ENOENT; the rc line carries
123
+ // the failure. Either is the contract; we accept either
124
+ // "No such file" or "cannot stat" wording across distros.
125
+ expect(result.stdout).toMatch(/--rc=[1-9]/);
126
+ expect(result.stdout.toLowerCase()).toMatch(/no such file|cannot stat|does not exist/);
127
+ }
128
+ }
129
+ finally {
130
+ await sandbox.destroy();
131
+ }
132
+ }, 60_000);
133
+ it('uid 1001 cannot mkdir into the root-owned 0555 parent /mnt/user-data', async () => {
134
+ const provider = createSandboxProvider({
135
+ backend: { tier: 'container', image: IMAGE },
136
+ layout: {
137
+ outputs: { source: { type: 'hostDir', hostPath: outputsHost } },
138
+ },
139
+ });
140
+ const sandbox = await provider.create();
141
+ try {
142
+ // The model trying to "create the missing leaf dir" hits
143
+ // the 0555 root-owned parent and is denied — exactly what
144
+ // distinguishes "not bound" from "writable empty dir".
145
+ const result = await sandbox.exec('sh', [
146
+ '-c',
147
+ 'mkdir /mnt/user-data/fake 2>&1; echo --rc=$?',
148
+ ]);
149
+ expect(result.stdout).toMatch(/--rc=[1-9]/);
150
+ expect(result.stdout.toLowerCase()).toMatch(/permission denied/);
151
+ }
152
+ finally {
153
+ await sandbox.destroy();
154
+ }
155
+ }, 60_000);
156
+ });
157
+ //# sourceMappingURL=leaf-permissions.smoke.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf-permissions.smoke.test.js","sourceRoot":"","sources":["../../../../src/backends/docker/__tests__/leaf-permissions.smoke.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * `container:docker` backend.
3
+ *
4
+ * Spawns one Docker container per `Sandbox` instance via the
5
+ * `docker` CLI (no node-docker SDK dependency — keeps the package
6
+ * thin). The container runs the small HTTP worker shipped under
7
+ * `packages/sandbox/worker/server.js`; the host adapter talks to
8
+ * it on `127.0.0.1:<random-port>`.
9
+ *
10
+ * One container per sandbox, not one per `exec` call: keeps cold-
11
+ * start out of the hot path. The container goes away in
12
+ * `destroy()`.
13
+ *
14
+ * Trust model:
15
+ * - Container is the trust boundary; everything inside is treated
16
+ * as untrusted code.
17
+ * - Worker only listens on loopback inside its own netns; the
18
+ * host adapter reaches it via Docker's port-forward.
19
+ * - Outbound network from the worker is restricted by host-side
20
+ * firewall config (see {@link DockerBackendConfig.network}) plus
21
+ * the egress proxy when one is configured (P3.2).
22
+ */
23
+ import { type ContainerSandboxLayout, type ResolvedContainerSandboxLayout } from '@namzu/sdk';
24
+ import { type SandboxBackend } from '../../index.js';
25
+ /**
26
+ * Backend-specific tuning. Most hosts use the defaults; advanced
27
+ * deployments override `image` to point at their own pre-built
28
+ * image, or pin `dockerBinary` for non-standard installs.
29
+ *
30
+ * The container's mount layout is baked in at provider construction
31
+ * via {@link DockerBackendInternalConfig.layout} — every `create()`
32
+ * call inherits the same layout. This is by design: per-task hosts
33
+ * call `createSandboxProvider` once per task, with that task's
34
+ * layout. There is no per-call layout argument, so the SDK runtime
35
+ * cannot accidentally call a docker provider without one.
36
+ */
37
+ export interface DockerBackendInternalConfig {
38
+ readonly image: string;
39
+ /**
40
+ * Pre-resolved layout. Construction-time `resolveLayout` validates
41
+ * and applies defaults; the docker backend renders mount flags
42
+ * directly from this without re-validating.
43
+ */
44
+ readonly layout: ResolvedContainerSandboxLayout;
45
+ readonly dockerBinary?: string;
46
+ readonly network?: 'none' | 'bridge' | string;
47
+ readonly readyPollIntervalMs?: number;
48
+ readonly readyTimeoutMs?: number;
49
+ /**
50
+ * Docker runtime to launch the container under. Default `runc`
51
+ * (vanilla Docker namespaces, what Docker Desktop ships). Linux
52
+ * production deployments that have registered gVisor on the host
53
+ * daemon can pass `runsc` to upgrade to a userspace-kernel trust
54
+ * boundary — same primitive Modal Labs and OpenAI Code Interpreter
55
+ * ship. Hosts can also pass a custom runtime name registered in
56
+ * `daemon.json`. macOS Docker Desktop has no `runsc` runtime, so
57
+ * the default `runc` is the only option there; that's documented
58
+ * as the local-dev tier in the package README.
59
+ */
60
+ readonly runtime?: 'runc' | 'runsc' | string;
61
+ /**
62
+ * How the SDK consumer reaches the in-container worker:
63
+ *
64
+ * - `'host-port'` (default): publish the worker port on the
65
+ * host loopback (`127.0.0.1::<random>`) and connect by host
66
+ * port. Works when the SDK runs ON the docker host (CLI,
67
+ * direct dev). Backward-compatible — the original behaviour.
68
+ *
69
+ * - `'container-network'`: skip `--publish` entirely, attach
70
+ * the spawned container to a shared docker bridge that the
71
+ * SDK consumer is also on, and connect by container DNS name
72
+ * (`http://<containerName>:2024`). Required when the SDK
73
+ * runs INSIDE a container (e.g. Vandal's app container
74
+ * spawning sibling sandbox containers via the host's Docker
75
+ * daemon — `127.0.0.1` inside the app is the app, not the
76
+ * sandbox). The shared bridge name comes from `config.network`.
77
+ */
78
+ readonly hostReachability?: 'host-port' | 'container-network';
79
+ /**
80
+ * Optional `--label key=value` pairs applied to the spawned
81
+ * container at `docker run` time. Used by hosts that need to
82
+ * find their containers from out-of-band code paths (reaper jobs,
83
+ * monitoring filters) via `docker ps --filter label=…`. Keys
84
+ * containing `=` or empty names throw at spawn time — the docker
85
+ * CLI accepts them but the resulting label split is ambiguous.
86
+ */
87
+ readonly labels?: Readonly<Record<string, string>>;
88
+ }
89
+ /**
90
+ * Build a {@link SandboxBackend} backed by Docker. Construction is
91
+ * synchronous; the actual container spawns on the first
92
+ * `create()` call.
93
+ */
94
+ export declare function buildDockerBackend(config: DockerBackendInternalConfig): SandboxBackend;
95
+ /**
96
+ * Validate and resolve a {@link ContainerSandboxLayout}. Returns a
97
+ * {@link ResolvedContainerSandboxLayout} with every container path
98
+ * filled in; throws {@link ContainerSandboxLayoutValidationError}
99
+ * collecting every violation in one pass.
100
+ *
101
+ * Called once at provider construction (`createSandboxProvider`).
102
+ * Validation surfaces synchronously during host wiring; nothing
103
+ * downstream re-validates per `provider.create()` call.
104
+ *
105
+ * Exported for tests so the validation rules are pinned by golden-
106
+ * value assertions rather than only exercised through the spawn path.
107
+ */
108
+ export declare function resolveLayout(layout: ContainerSandboxLayout): ResolvedContainerSandboxLayout;
109
+ export declare function renderLayoutMountArgs(layout: ResolvedContainerSandboxLayout): string[];
110
+ export declare function renderLayoutReadRootsEnv(layout: ResolvedContainerSandboxLayout): string;
111
+ /**
112
+ * Writable container roots. Only the RW mounts go here — uploads,
113
+ * tool-results, transcripts, and skills are read-only and must stay
114
+ * out of WRITE_ROOTS or the agent's `write`/`append` could clobber
115
+ * source files the host considers immutable.
116
+ */
117
+ export declare function renderLayoutWriteRootsEnv(layout: ResolvedContainerSandboxLayout): string;
118
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/docker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EACN,KAAK,sBAAsB,EAE3B,KAAK,8BAA8B,EAcnC,MAAM,YAAY,CAAA;AAEnB,OAAO,EAEN,KAAK,cAAc,EAEnB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAA;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC7C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAAA;IAC7D;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD;AAOD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,2BAA2B,GAAG,cAAc,CAQtF;AA0cD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,8BAA8B,CAmI5F;AAkCD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,EAAE,CA+BtF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,CAUvF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,8BAA8B,GAAG,MAAM,CAKxF"}