@namzu/sandbox 14.0.0 → 16.0.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 (100) hide show
  1. package/CHANGELOG.md +924 -0
  2. package/README.md +369 -14
  3. package/dist/backends/aci-standby-pool/index.d.ts.map +1 -1
  4. package/dist/backends/aci-standby-pool/index.js +13 -1
  5. package/dist/backends/aci-standby-pool/index.js.map +1 -1
  6. package/dist/backends/docker/index.d.ts +169 -6
  7. package/dist/backends/docker/index.d.ts.map +1 -1
  8. package/dist/backends/docker/index.js +499 -85
  9. package/dist/backends/docker/index.js.map +1 -1
  10. package/dist/backends/firecracker/index.d.ts.map +1 -1
  11. package/dist/backends/firecracker/index.js +12 -2
  12. package/dist/backends/firecracker/index.js.map +1 -1
  13. package/dist/backends/firecracker/protocol.d.ts +459 -8
  14. package/dist/backends/firecracker/protocol.d.ts.map +1 -1
  15. package/dist/backends/firecracker/protocol.js +136 -0
  16. package/dist/backends/firecracker/protocol.js.map +1 -1
  17. package/dist/backends/firecracker/transport.d.ts +539 -6
  18. package/dist/backends/firecracker/transport.d.ts.map +1 -1
  19. package/dist/backends/firecracker/transport.js +1171 -24
  20. package/dist/backends/firecracker/transport.js.map +1 -1
  21. package/dist/backends/kubernetes/egress-policy.d.ts +1181 -13
  22. package/dist/backends/kubernetes/egress-policy.d.ts.map +1 -1
  23. package/dist/backends/kubernetes/egress-policy.js +2350 -31
  24. package/dist/backends/kubernetes/egress-policy.js.map +1 -1
  25. package/dist/backends/kubernetes/identity.d.ts +193 -0
  26. package/dist/backends/kubernetes/identity.d.ts.map +1 -0
  27. package/dist/backends/kubernetes/identity.js +147 -0
  28. package/dist/backends/kubernetes/identity.js.map +1 -0
  29. package/dist/backends/kubernetes/index.d.ts +678 -33
  30. package/dist/backends/kubernetes/index.d.ts.map +1 -1
  31. package/dist/backends/kubernetes/index.js +1180 -95
  32. package/dist/backends/kubernetes/index.js.map +1 -1
  33. package/dist/backends/kubernetes/ingress-policy.d.ts +375 -0
  34. package/dist/backends/kubernetes/ingress-policy.d.ts.map +1 -0
  35. package/dist/backends/kubernetes/ingress-policy.js +1050 -0
  36. package/dist/backends/kubernetes/ingress-policy.js.map +1 -0
  37. package/dist/backends/kubernetes/k8s-client.d.ts +213 -4
  38. package/dist/backends/kubernetes/k8s-client.d.ts.map +1 -1
  39. package/dist/backends/kubernetes/k8s-client.js +359 -52
  40. package/dist/backends/kubernetes/k8s-client.js.map +1 -1
  41. package/dist/backends/kubernetes/lease.d.ts +40 -14
  42. package/dist/backends/kubernetes/lease.d.ts.map +1 -1
  43. package/dist/backends/kubernetes/lease.js +68 -18
  44. package/dist/backends/kubernetes/lease.js.map +1 -1
  45. package/dist/backends/kubernetes/objects.d.ts +423 -3
  46. package/dist/backends/kubernetes/objects.d.ts.map +1 -1
  47. package/dist/backends/kubernetes/objects.js +364 -2
  48. package/dist/backends/kubernetes/objects.js.map +1 -1
  49. package/dist/backends/kubernetes/per-sandbox-policy.d.ts +219 -0
  50. package/dist/backends/kubernetes/per-sandbox-policy.d.ts.map +1 -0
  51. package/dist/backends/kubernetes/per-sandbox-policy.js +375 -0
  52. package/dist/backends/kubernetes/per-sandbox-policy.js.map +1 -0
  53. package/dist/backends/kubernetes/rbac.d.ts +153 -0
  54. package/dist/backends/kubernetes/rbac.d.ts.map +1 -0
  55. package/dist/backends/kubernetes/rbac.js +177 -0
  56. package/dist/backends/kubernetes/rbac.js.map +1 -0
  57. package/dist/backends/kubernetes/sandbox.d.ts +81 -14
  58. package/dist/backends/kubernetes/sandbox.d.ts.map +1 -1
  59. package/dist/backends/kubernetes/sandbox.js +149 -15
  60. package/dist/backends/kubernetes/sandbox.js.map +1 -1
  61. package/dist/backends/kubernetes/transport.d.ts +935 -9
  62. package/dist/backends/kubernetes/transport.d.ts.map +1 -1
  63. package/dist/backends/kubernetes/transport.js +1958 -62
  64. package/dist/backends/kubernetes/transport.js.map +1 -1
  65. package/dist/backends/kubernetes/workspace.d.ts +1149 -18
  66. package/dist/backends/kubernetes/workspace.d.ts.map +1 -1
  67. package/dist/backends/kubernetes/workspace.js +2825 -186
  68. package/dist/backends/kubernetes/workspace.js.map +1 -1
  69. package/dist/backends/remote-execution-controller.d.ts +14 -0
  70. package/dist/backends/remote-execution-controller.d.ts.map +1 -1
  71. package/dist/backends/remote-execution-controller.js.map +1 -1
  72. package/dist/index.d.ts +294 -18
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +280 -10
  75. package/dist/index.js.map +1 -1
  76. package/dist/testing/sandbox-conformance.d.ts +39 -5
  77. package/dist/testing/sandbox-conformance.d.ts.map +1 -1
  78. package/dist/testing/sandbox-conformance.js +436 -5
  79. package/dist/testing/sandbox-conformance.js.map +1 -1
  80. package/package.json +3 -3
  81. package/src/backends/aci-standby-pool/index.ts +16 -1
  82. package/src/backends/docker/index.ts +617 -100
  83. package/src/backends/firecracker/index.ts +14 -2
  84. package/src/backends/firecracker/protocol.ts +514 -6
  85. package/src/backends/firecracker/transport.ts +1492 -40
  86. package/src/backends/kubernetes/egress-policy.ts +3334 -55
  87. package/src/backends/kubernetes/identity.ts +261 -0
  88. package/src/backends/kubernetes/index.ts +1785 -127
  89. package/src/backends/kubernetes/ingress-policy.ts +1344 -0
  90. package/src/backends/kubernetes/k8s-client.ts +444 -54
  91. package/src/backends/kubernetes/lease.ts +75 -19
  92. package/src/backends/kubernetes/objects.ts +626 -6
  93. package/src/backends/kubernetes/per-sandbox-policy.ts +497 -0
  94. package/src/backends/kubernetes/rbac.ts +192 -0
  95. package/src/backends/kubernetes/sandbox.ts +218 -20
  96. package/src/backends/kubernetes/transport.ts +2733 -124
  97. package/src/backends/kubernetes/workspace.ts +4476 -222
  98. package/src/backends/remote-execution-controller.ts +14 -0
  99. package/src/index.ts +668 -19
  100. package/src/testing/sandbox-conformance.ts +540 -5
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import { type ContainerSandboxLayout, type ResolvedContainerSandboxLayout } from '@namzu/sdk';
24
24
  import type { BrokeredCredential, EgressProxyOptions } from '../../egress/index.js';
25
- import { type EgressPolicy, type SandboxBackend } from '../../index.js';
25
+ import { type EgressPolicy, type SandboxBackend, type SandboxBackendOptions } from '../../index.js';
26
26
  /**
27
27
  * Backend-specific tuning. Most hosts use the defaults; advanced
28
28
  * deployments override `image` to point at their own pre-built
@@ -47,13 +47,66 @@ export interface DockerBackendInternalConfig {
47
47
  /**
48
48
  * `--user` value for the container, e.g. `'1000:1000'` or `'nobody'`.
49
49
  *
50
- * Left unset by default because the correct uid depends on the image's
51
- * own filesystem ownership, and forcing one would break every image
52
- * that expects root at startup. Set it whenever the image supports a
53
- * non-root user — a container running as root is one bind-mount
54
- * misconfiguration away from writing the host.
50
+ * Left unset by default because `--user` does not ADD a non-root user, it
51
+ * OVERRIDES the image's own choice of one. The reference image ends with
52
+ * `USER namzu` (uid 1001, its `/workspace` chowned to match), so this
53
+ * backend's default is already non-root for the image it ships — a
54
+ * hard-coded uid here would replace that with a guess, and the guess is
55
+ * wrong for any image whose files are owned by someone else, which
56
+ * surfaces as `EACCES` on a path the workload was told it could write.
57
+ * Set it when the image does not declare a user of its own, or when the
58
+ * host wants a different one than it declares.
55
59
  */
56
60
  readonly runAsUser?: string;
61
+ /**
62
+ * CPU cores the container may use, rendered as `--cpus`. Unset by default.
63
+ *
64
+ * `--memory` and `--pids-limit` bound what a workload can take from the
65
+ * host, and CPU had no equivalent at all — no default, no knob — which
66
+ * reads as an oversight rather than a decision. It stays unset for the
67
+ * same reason neither of those two has a numeric default: the right value
68
+ * is a property of the host's machine and of what the workload is for, and
69
+ * any number this backend picked would silently throttle a run that
70
+ * finishes inside its timeout today. A host that wants the bound says what
71
+ * it is; the value is a decimal (`--cpus 1.5` is one and a half cores'
72
+ * worth of time, not a rounding).
73
+ *
74
+ * It lives on this config rather than beside `memoryLimitMb` on the
75
+ * per-call options because the documented deployment constructs one
76
+ * provider per task, so construction time IS per-task — and a control
77
+ * added to the tier-agnostic per-call shape would have to be refused by
78
+ * the ACI and kubernetes backends, which cannot apply a per-sandbox CPU
79
+ * limit any more than they can apply the memory and process ones.
80
+ */
81
+ readonly cpuLimit?: number;
82
+ /**
83
+ * Mount the container's root filesystem read-only. Default `true`.
84
+ *
85
+ * See {@link HARDENING_ARGS} for why the default is on and
86
+ * {@link renderWritableRootfsArgs} for the paths that stay writable while
87
+ * it is. Set it to `false` to make every path inside the container
88
+ * writable again, which is what a host whose image writes somewhere the
89
+ * writable set cannot describe needs, and which is why the switch exists
90
+ * instead of an unwritten rule that the baseline is absolute. It turns off
91
+ * that one control and nothing else: `--cap-drop=ALL`,
92
+ * `--security-opt=no-new-privileges` and `--ipc private` are applied
93
+ * whatever this says. It is a config field rather than an argument so that
94
+ * turning it off is a line somebody wrote on purpose, and not the default
95
+ * anyone gets by not looking.
96
+ */
97
+ readonly readOnlyRootfs?: boolean;
98
+ /**
99
+ * Extra paths to keep writable under `--read-only`, each mounted `--tmpfs`.
100
+ *
101
+ * The default set ({@link DEFAULT_WRITABLE_ROOTFS_PATHS}) is the reference
102
+ * image's needs, read off its Dockerfile; this is how a host that points
103
+ * `image` somewhere else says what ITS image needs, because the backend
104
+ * cannot read that out of an image and guessing is what these paths would
105
+ * otherwise be. A path the layout already mounts is refused rather than
106
+ * mounted twice (`Duplicate mount point`), and setting this at all beside
107
+ * `readOnlyRootfs: false` is refused as a contradiction.
108
+ */
109
+ readonly writableRootfsPaths?: readonly string[];
57
110
  /**
58
111
  * Credentials the egress proxy stamps on, per host.
59
112
  *
@@ -207,6 +260,116 @@ export declare function assertNetworkCarriesThePolicy(network: string, reachabil
207
260
  * receives is the failure this shape exists to make testable.
208
261
  */
209
262
  export declare function egressProxyOptions(config: Pick<DockerBackendInternalConfig, 'brokeredCredentials' | 'allowInwardFor'>, policy: EgressPolicy): EgressProxyOptions;
263
+ /** The backend config the hardening flags are rendered from. */
264
+ export type DockerHardeningConfig = Pick<DockerBackendInternalConfig, 'cpuLimit' | 'layout' | 'readOnlyRootfs' | 'writableRootfsPaths'>;
265
+ /**
266
+ * Refuse rootfs options that cannot both be honoured.
267
+ *
268
+ * `writableRootfsPaths` beside `readOnlyRootfs: false` is a contradiction: with
269
+ * a writable root filesystem every path is already writable, so the tmpfs
270
+ * mounts would either be dropped (a control accepted and not applied) or take a
271
+ * directory off the image for no reason. Refusing is the honest answer, and it
272
+ * is the same one the sibling backends give a per-sandbox control they cannot
273
+ * express.
274
+ *
275
+ * Called at construction and again where the argv is built, so a config that
276
+ * reaches `create()` by some path other than `buildDockerBackend` is refused
277
+ * too.
278
+ */
279
+ export declare function assertRootfsOptionsAreCoherent(config: DockerHardeningConfig): void;
280
+ /**
281
+ * Refuse a `--cpus` value that cannot mean what it says.
282
+ *
283
+ * This covers non-finite and non-positive values and does NOT claim to cover
284
+ * every bound the daemon would refuse. The difference is worth stating, because
285
+ * the two classes fail in different places and only one of them is decidable
286
+ * here. A negative, `NaN` or `Infinity` renders into the argv as text the
287
+ * daemon either rejects or turns into a bound nobody asked for, and `0` is the
288
+ * opposite of a bound (`NanoCPUs` of zero is how a container says "no CPU
289
+ * limit"), so a host that wrote one of those hears about it during wiring
290
+ * rather than as a container that never came up.
291
+ *
292
+ * The upper bound is not ours to check. Moby's `verifyPlatformContainerResources`
293
+ * refuses `NanoCPUs` above the DAEMON host's CPU count (`"range of CPUs is from
294
+ * 0.01 to N.00, as there are only N CPUs available"`), and the same function
295
+ * deliberately sets no floor of its own on Linux, leaving that to the kernel.
296
+ * Neither number is knowable from here: the `docker` binary this backend drives
297
+ * can be pointed at a daemon on another machine (`DOCKER_HOST`), and even
298
+ * locally `os.cpus().length` is this machine's view rather than the daemon's
299
+ * own `runtime.NumCPU()`. Refusing on a guess at it would break a host whose
300
+ * daemon has more cores than the process driving it, which is a worse failure
301
+ * than the one it would catch — those arrive from the daemon with its own
302
+ * message, at spawn, where every other daemon-side refusal arrives too.
303
+ */
304
+ export declare function assertCpuLimitIsRenderable(cpuLimit: number | undefined): void;
305
+ /**
306
+ * `--tmpfs` flags for the paths that stay writable under `--read-only`.
307
+ *
308
+ * See {@link DEFAULT_WRITABLE_ROOTFS_PATHS} for the paths themselves and why
309
+ * each is there. Returns nothing when the read-only root filesystem is off, and
310
+ * the two ways a host names paths that cannot be mounted — a contradiction with
311
+ * `readOnlyRootfs: false`, or a path the layout already mounts — are refusals
312
+ * rather than a silently shorter list.
313
+ */
314
+ export declare function renderWritableRootfsArgs(config: DockerHardeningConfig): string[];
315
+ /**
316
+ * The confinement preamble for one container, in argv order.
317
+ *
318
+ * A function rather than a bare constant because `--read-only` is switchable
319
+ * and the flags that follow it describe what stays writable while it is on:
320
+ * `readOnlyRootfs: false` removes both the flag and the mounts. That is the only
321
+ * thing it removes. Everything in {@link HARDENING_ARGS} is applied
322
+ * unconditionally and no field can turn one of those off, so the argv for
323
+ * `readOnlyRootfs: false` is the argv this backend produced before any of this
324
+ * existed PLUS `--ipc private` — those two flags are the whole previous argv,
325
+ * and `--ipc private` is now unconditional. `--ipc` is not folded under this
326
+ * switch, because the field names the root filesystem: a host that turned the
327
+ * read-only rootfs off would be turning IPC isolation off as well, silently,
328
+ * for a reason the name of the field does not say. A switch has to mean one
329
+ * thing.
330
+ */
331
+ export declare function renderHardeningArgs(config: DockerHardeningConfig): string[];
332
+ /**
333
+ * Everything {@link buildDockerRunArgs} renders, as a value.
334
+ *
335
+ * The pieces that come from the daemon or from the host are inputs rather than
336
+ * lookups: which network the container attaches to, and whether an egress proxy
337
+ * is listening and on which port. Both are already resolved by the caller, and
338
+ * reading them here would put a daemon call back inside the function whose
339
+ * whole point is that it needs none.
340
+ */
341
+ export interface DockerRunArgvInput {
342
+ readonly config: DockerBackendInternalConfig;
343
+ readonly options: SandboxBackendOptions;
344
+ readonly containerName: string;
345
+ readonly network: string;
346
+ readonly hostReachability: 'host-port' | 'container-network';
347
+ /**
348
+ * Port the host-side egress proxy listens on, when one is running. Absent
349
+ * means no proxy, and no proxy environment is passed in — which is not the
350
+ * same fact as a proxy that was configured and is unreachable.
351
+ */
352
+ readonly egressProxyPort?: number;
353
+ }
354
+ /**
355
+ * The complete `docker run` argv, as a value.
356
+ *
357
+ * Extracted for the same reason {@link resolveNetwork} and
358
+ * {@link egressProxyOptions} were: everything downstream of it needs a running
359
+ * Docker daemon, so a confinement flag that never reached the argv — or one
360
+ * that reached it in an order that cancels another — could only be caught by an
361
+ * operator noticing its effect missing in production. Spawning a fake `docker`
362
+ * and reading back what it was handed proves what the fake was told and nothing
363
+ * about the container the daemon would build. Here the whole baseline is one
364
+ * array, and an edit that drops a flag fails a test rather than a deployment.
365
+ *
366
+ * Order matters in exactly two places, and both are asserted by the test that
367
+ * pins this: the image is the last argument, because everything after it is a
368
+ * command for the container rather than a flag for docker; and every flag that
369
+ * takes a value is pushed as two argv entries rather than one string, so no
370
+ * value is ever re-split by anything downstream.
371
+ */
372
+ export declare function buildDockerRunArgs(input: DockerRunArgvInput): string[];
210
373
  /**
211
374
  * Validate and resolve a {@link ContainerSandboxLayout}. Returns a
212
375
  * {@link ResolvedContainerSandboxLayout} with every container path
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/docker/index.ts"],"names":[],"mappings":"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"}
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,EAmBnC,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACX,kBAAkB,EAClB,kBAAkB,EAElB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,MAAM,gBAAgB,CAAA;AAcvB;;;;;;;;;;;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;IAE9B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAE3B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAEhD;;;;;;;;;OASG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAE5D;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAE3C,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,CAwBtF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,QAAQ,UAAQ,GACd,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAM1F;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAE1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAExE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,WAAW,GAAG,mBAAmB,EAC/C,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,qBAAqB,EAAE,MAAM,GAC3B,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,IAAI,CAAC,2BAA2B,EAAE,qBAAqB,GAAG,gBAAgB,CAAC,EACnF,MAAM,EAAE,YAAY,GAClB,kBAAkB,CASpB;AA2ND,gEAAgE;AAChE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACvC,2BAA2B,EAC3B,UAAU,GAAG,QAAQ,GAAG,gBAAgB,GAAG,qBAAqB,CAChE,CAAA;AAqDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAMlF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAO7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,EAAE,CA0ChF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,gBAAgB,EAAE,WAAW,GAAG,mBAAmB,CAAA;IAC5D;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE,CA+GtE;AAskBD;;;;;;;;;;;;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"}