@dwk/solid-pod 0.1.0-beta.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 (68) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +108 -0
  3. package/dist/auth.d.ts +33 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +160 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/config.d.ts +181 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +74 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/encoding.d.ts +13 -0
  12. package/dist/encoding.d.ts.map +1 -0
  13. package/dist/encoding.js +31 -0
  14. package/dist/encoding.js.map +1 -0
  15. package/dist/gc.d.ts +22 -0
  16. package/dist/gc.d.ts.map +1 -0
  17. package/dist/gc.js +33 -0
  18. package/dist/gc.js.map +1 -0
  19. package/dist/handler.d.ts +20 -0
  20. package/dist/handler.d.ts.map +1 -0
  21. package/dist/handler.js +155 -0
  22. package/dist/handler.js.map +1 -0
  23. package/dist/index.d.ts +24 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +23 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/jwt.d.ts +36 -0
  28. package/dist/jwt.d.ts.map +1 -0
  29. package/dist/jwt.js +120 -0
  30. package/dist/jwt.js.map +1 -0
  31. package/dist/ldp.d.ts +37 -0
  32. package/dist/ldp.d.ts.map +1 -0
  33. package/dist/ldp.js +85 -0
  34. package/dist/ldp.js.map +1 -0
  35. package/dist/log.d.ts +55 -0
  36. package/dist/log.d.ts.map +1 -0
  37. package/dist/log.js +51 -0
  38. package/dist/log.js.map +1 -0
  39. package/dist/negotiation.d.ts +23 -0
  40. package/dist/negotiation.d.ts.map +1 -0
  41. package/dist/negotiation.js +80 -0
  42. package/dist/negotiation.js.map +1 -0
  43. package/dist/patch.d.ts +80 -0
  44. package/dist/patch.d.ts.map +1 -0
  45. package/dist/patch.js +425 -0
  46. package/dist/patch.js.map +1 -0
  47. package/dist/pod.d.ts +20 -0
  48. package/dist/pod.d.ts.map +1 -0
  49. package/dist/pod.js +860 -0
  50. package/dist/pod.js.map +1 -0
  51. package/dist/wac.d.ts +33 -0
  52. package/dist/wac.d.ts.map +1 -0
  53. package/dist/wac.js +84 -0
  54. package/dist/wac.js.map +1 -0
  55. package/package.json +55 -0
  56. package/src/auth.ts +203 -0
  57. package/src/config.ts +254 -0
  58. package/src/encoding.ts +32 -0
  59. package/src/gc.ts +47 -0
  60. package/src/handler.ts +199 -0
  61. package/src/index.ts +32 -0
  62. package/src/jwt.ts +166 -0
  63. package/src/ldp.ts +99 -0
  64. package/src/log.ts +59 -0
  65. package/src/negotiation.ts +97 -0
  66. package/src/patch.ts +539 -0
  67. package/src/pod.ts +1195 -0
  68. package/src/wac.ts +119 -0
package/dist/patch.js ADDED
@@ -0,0 +1,425 @@
1
+ /**
2
+ * N3 Patch (`text/n3`) and a minimal `application/sparql-update` parser, plus
3
+ * the deliberately-small `solid:where` matcher.
4
+ *
5
+ * This is **not** a SPARQL engine. `solid:where` is a conjunctive basic graph
6
+ * pattern matched against the resource's current triples; the patch applies
7
+ * only when the pattern binds to **exactly one** solution (per the Solid
8
+ * Protocol's N3 Patch rules). Variables in `solid:deletes` / `solid:inserts`
9
+ * are then instantiated from that single binding. Anything richer (`OPTIONAL`,
10
+ * `FILTER`, property paths, multiple solutions) is out of scope and surfaces as
11
+ * a `409`.
12
+ */
13
+ import { parseTurtle, } from "@dwk/rdf";
14
+ const SOLID = "http://www.w3.org/ns/solid/terms#";
15
+ const RDF_TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
16
+ const INSERT_DELETE_PATCH = `${SOLID}InsertDeletePatch`;
17
+ const XSD_STRING = "http://www.w3.org/2001/XMLSchema#string";
18
+ const DEFAULT_GRAPH = { termType: "DefaultGraph", value: "" };
19
+ export class PatchProblem extends Error {
20
+ code;
21
+ constructor(code) {
22
+ super(`@dwk/solid-pod: patch ${code}`);
23
+ this.code = code;
24
+ this.name = "PatchProblem";
25
+ }
26
+ }
27
+ /**
28
+ * Thrown when a patch document does not satisfy the N3 Patch document
29
+ * constraints. Kept distinct from {@link PatchProblem} so the handler can map it
30
+ * to `422` while binding/state failures stay `409`.
31
+ */
32
+ export class PatchConstraintError extends Error {
33
+ code;
34
+ constructor(code) {
35
+ super(`@dwk/solid-pod: patch constraint ${code}`);
36
+ this.code = code;
37
+ this.name = "PatchConstraintError";
38
+ }
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Term conversion
42
+ // ---------------------------------------------------------------------------
43
+ /** Normalize an N3 term into a {@link PatchTerm}. */
44
+ function fromN3Term(term) {
45
+ switch (term.termType) {
46
+ case "Variable":
47
+ return { kind: "var", name: term.value };
48
+ case "NamedNode":
49
+ return {
50
+ kind: "term",
51
+ term: { termType: "NamedNode", value: term.value },
52
+ };
53
+ case "BlankNode":
54
+ return {
55
+ kind: "term",
56
+ term: { termType: "BlankNode", value: term.value },
57
+ };
58
+ case "Literal": {
59
+ const literal = term;
60
+ if (literal.language) {
61
+ return {
62
+ kind: "term",
63
+ term: {
64
+ termType: "Literal",
65
+ value: literal.value,
66
+ language: literal.language,
67
+ },
68
+ };
69
+ }
70
+ return {
71
+ kind: "term",
72
+ term: {
73
+ termType: "Literal",
74
+ value: literal.value,
75
+ datatype: literal.datatype.value,
76
+ },
77
+ };
78
+ }
79
+ default:
80
+ throw new PatchProblem("parse_error");
81
+ }
82
+ }
83
+ function tripleFromQuad(quad) {
84
+ return {
85
+ subject: fromN3Term(quad.subject),
86
+ predicate: fromN3Term(quad.predicate),
87
+ object: fromN3Term(quad.object),
88
+ };
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // N3 Patch parsing
92
+ // ---------------------------------------------------------------------------
93
+ /**
94
+ * Collect the inner triples of the formula referenced by `(subject, predicate)`.
95
+ *
96
+ * Each of `solid:where` / `solid:inserts` / `solid:deletes` MUST appear at most
97
+ * once (Solid Protocol §5.3.1); more than one such statement is a document
98
+ * constraint violation (`#server-patch-n3-invalid`), reported as
99
+ * {@link PatchConstraintError} `duplicate_predicate`.
100
+ */
101
+ function formulaTriples(quads, predicateIri) {
102
+ // The statement `_:patch solid:<predicate> { … }` references the formula as a
103
+ // blank-node graph; N3.js emits the formula's triples with that graph term.
104
+ const graphValues = new Set();
105
+ let statementCount = 0;
106
+ for (const q of quads) {
107
+ if (q.predicate.value === predicateIri &&
108
+ q.graph.termType === "DefaultGraph") {
109
+ statementCount++;
110
+ if (q.object.termType === "BlankNode")
111
+ graphValues.add(q.object.value);
112
+ }
113
+ }
114
+ if (statementCount > 1) {
115
+ throw new PatchConstraintError("duplicate_predicate");
116
+ }
117
+ const triples = [];
118
+ for (const q of quads) {
119
+ if (q.graph.termType !== "DefaultGraph" && graphValues.has(q.graph.value)) {
120
+ triples.push(tripleFromQuad(q));
121
+ }
122
+ }
123
+ return triples;
124
+ }
125
+ /** Whether any term of a triple is a blank node. */
126
+ function tripleHasBlankNode(triple) {
127
+ return [triple.subject, triple.predicate, triple.object].some((t) => t.kind === "term" && t.term.termType === "BlankNode");
128
+ }
129
+ /** Collect the variable names a triple references. */
130
+ function collectVars(triple, into) {
131
+ for (const term of [triple.subject, triple.predicate, triple.object]) {
132
+ if (term.kind === "var")
133
+ into.add(term.name);
134
+ }
135
+ }
136
+ /** Parse an N3 Patch document (`text/n3`) and enforce its document constraints. */
137
+ function parseN3Patch(body, baseIRI) {
138
+ let quads;
139
+ try {
140
+ quads = parseTurtle(body, { format: "text/n3", baseIRI });
141
+ }
142
+ catch {
143
+ throw new PatchConstraintError("parse_error");
144
+ }
145
+ // `#server-patch-n3-simple-type`: the patch document MUST contain exactly one
146
+ // `?patch rdf:type solid:InsertDeletePatch` statement in the default graph.
147
+ const hasType = quads.some((q) => q.graph.termType === "DefaultGraph" &&
148
+ q.predicate.value === RDF_TYPE &&
149
+ q.object.termType === "NamedNode" &&
150
+ q.object.value === INSERT_DELETE_PATCH);
151
+ if (!hasType) {
152
+ throw new PatchConstraintError("missing_type");
153
+ }
154
+ const patch = {
155
+ where: formulaTriples(quads, `${SOLID}where`),
156
+ deletes: formulaTriples(quads, `${SOLID}deletes`),
157
+ inserts: formulaTriples(quads, `${SOLID}inserts`),
158
+ };
159
+ // `#server-patch-n3-blank-nodes`: the inserts/deletes formulae MUST NOT
160
+ // contain blank nodes.
161
+ if (patch.inserts.some(tripleHasBlankNode) ||
162
+ patch.deletes.some(tripleHasBlankNode)) {
163
+ throw new PatchConstraintError("blank_node_in_template");
164
+ }
165
+ // `#server-patch-n3-variables`: every variable used in inserts/deletes MUST
166
+ // occur in `where`. Detect this statically so a template using an unbound
167
+ // variable is a document constraint violation (422), not a runtime miss.
168
+ const whereVars = new Set();
169
+ for (const t of patch.where)
170
+ collectVars(t, whereVars);
171
+ const templateVars = new Set();
172
+ for (const t of patch.inserts)
173
+ collectVars(t, templateVars);
174
+ for (const t of patch.deletes)
175
+ collectVars(t, templateVars);
176
+ for (const name of templateVars) {
177
+ if (!whereVars.has(name)) {
178
+ throw new PatchConstraintError("unbound_template_variable");
179
+ }
180
+ }
181
+ return patch;
182
+ }
183
+ // ---------------------------------------------------------------------------
184
+ // Minimal SPARQL Update parsing
185
+ // ---------------------------------------------------------------------------
186
+ /**
187
+ * Extract `PREFIX`/`BASE` (and `@prefix`/`@base`) declaration lines verbatim.
188
+ *
189
+ * Turtle 1.1 (which N3.js parses) accepts SPARQL-style `PREFIX`/`BASE` without
190
+ * the leading `@` or a trailing `.`, so the lines are passed through as-is and
191
+ * prepended to each pattern block before parsing.
192
+ */
193
+ function prologue(body) {
194
+ const matches = body.match(/^[ \t]*(?:PREFIX|BASE|@prefix|@base)\b[^\n]*$/gim);
195
+ return matches ? matches.join("\n") : "";
196
+ }
197
+ /** Pull the contents of the first `KEYWORD { … }` block (brace-matched). */
198
+ function block(body, keyword) {
199
+ const m = keyword.exec(body);
200
+ if (!m)
201
+ return null;
202
+ const open = body.indexOf("{", m.index + m[0].length - 1);
203
+ if (open < 0)
204
+ return null;
205
+ let depth = 0;
206
+ for (let i = open; i < body.length; i++) {
207
+ const ch = body[i];
208
+ if (ch === "{")
209
+ depth++;
210
+ else if (ch === "}" && --depth === 0)
211
+ return body.slice(open + 1, i);
212
+ }
213
+ return null;
214
+ }
215
+ function parsePatternBlock(content, prefixes, baseIRI) {
216
+ try {
217
+ const quads = parseTurtle(`${prefixes}\n${content}`, {
218
+ format: "text/n3",
219
+ baseIRI,
220
+ });
221
+ return quads
222
+ .filter((q) => q.graph.termType === "DefaultGraph")
223
+ .map(tripleFromQuad);
224
+ }
225
+ catch {
226
+ throw new PatchProblem("parse_error");
227
+ }
228
+ }
229
+ /** Parse the supported subset of `application/sparql-update`. */
230
+ function parseSparqlUpdate(body, baseIRI) {
231
+ const prefixes = prologue(body);
232
+ const insertData = block(body, /INSERT\s+DATA\s*/i);
233
+ const deleteData = block(body, /DELETE\s+DATA\s*/i);
234
+ if (insertData !== null || deleteData !== null) {
235
+ return {
236
+ where: [],
237
+ inserts: insertData
238
+ ? parsePatternBlock(insertData, prefixes, baseIRI)
239
+ : [],
240
+ deletes: deleteData
241
+ ? parsePatternBlock(deleteData, prefixes, baseIRI)
242
+ : [],
243
+ };
244
+ }
245
+ const where = block(body, /WHERE\s*/i);
246
+ const deletes = block(body, /DELETE\s*/i);
247
+ const inserts = block(body, /INSERT\s*/i);
248
+ if (where === null && deletes === null && inserts === null) {
249
+ throw new PatchProblem("parse_error");
250
+ }
251
+ return {
252
+ where: where ? parsePatternBlock(where, prefixes, baseIRI) : [],
253
+ deletes: deletes ? parsePatternBlock(deletes, prefixes, baseIRI) : [],
254
+ inserts: inserts ? parsePatternBlock(inserts, prefixes, baseIRI) : [],
255
+ };
256
+ }
257
+ /** Parse a patch body by its `Content-Type`. */
258
+ export function parsePatch(body, contentType, baseIRI) {
259
+ const essence = contentType.split(";")[0]?.trim().toLowerCase();
260
+ if (essence === "text/n3" || essence === "application/n3") {
261
+ return parseN3Patch(body, baseIRI);
262
+ }
263
+ if (essence === "application/sparql-update" ||
264
+ essence === "application/sparql-update; charset=utf-8") {
265
+ return parseSparqlUpdate(body, baseIRI);
266
+ }
267
+ throw new PatchProblem("unsupported_media_type");
268
+ }
269
+ /**
270
+ * DoS guards for the `where` solver. This is a minimal conjunctive matcher, not
271
+ * a SPARQL engine, and it runs inside the single-threaded per-pod Durable
272
+ * Object — so a crafted patch with several all-variable `where` triples against
273
+ * a large resource could otherwise build an N^k cartesian product and exhaust
274
+ * the CPU budget, stalling every request that serializes through that pod.
275
+ *
276
+ * `MAX_WHERE_TRIPLES` caps the pattern size, and `MAX_SOLVE_WORK` caps the
277
+ * total candidate-match attempts across all triples — together they bound the
278
+ * solver's cost regardless of resource size. Exceeding either is reported as
279
+ * {@link PatchProblem} `where_too_complex`.
280
+ */
281
+ const MAX_WHERE_TRIPLES = 25;
282
+ const MAX_SOLVE_WORK = 1_000_000;
283
+ /** Normalize a literal's datatype: an untyped, non-language literal is xsd:string. */
284
+ function effectiveDatatype(term) {
285
+ if (term.termType !== "Literal")
286
+ return undefined;
287
+ if (term.language)
288
+ return undefined;
289
+ return term.datatype ?? XSD_STRING;
290
+ }
291
+ /** Strict term equality, normalizing the implicit xsd:string datatype. */
292
+ function termsEqual(a, b) {
293
+ if (a.termType !== b.termType || a.value !== b.value)
294
+ return false;
295
+ if (a.termType === "Literal") {
296
+ return ((a.language ?? "") === (b.language ?? "") &&
297
+ effectiveDatatype(a) === effectiveDatatype(b));
298
+ }
299
+ return true;
300
+ }
301
+ /** Match one pattern term against a concrete term under `bindings`. */
302
+ function matchTerm(pattern, value, bindings) {
303
+ if (pattern.kind === "var") {
304
+ const bound = bindings.get(pattern.name);
305
+ if (bound)
306
+ return termsEqual(bound, value);
307
+ bindings.set(pattern.name, value);
308
+ return true;
309
+ }
310
+ return termsEqual(pattern.term, value);
311
+ }
312
+ /**
313
+ * Find solutions of the conjunctive `where` pattern against `current`, via
314
+ * straightforward backtracking. Each solution is a complete variable binding.
315
+ *
316
+ * Bounded against pattern-driven CPU exhaustion (see {@link MAX_WHERE_TRIPLES}
317
+ * and {@link MAX_SOLVE_WORK}): an over-large pattern, or one whose intermediate
318
+ * cartesian product blows the work budget, throws `where_too_complex` rather
319
+ * than enumerating it. Resolution only needs to distinguish "no bind", "exactly
320
+ * one bind", and "more than one bind", so the result is capped at two solutions
321
+ * — that is enough to detect ambiguity without materializing every binding.
322
+ */
323
+ function solve(where, current) {
324
+ if (where.length === 0)
325
+ return [new Map()];
326
+ if (where.length > MAX_WHERE_TRIPLES) {
327
+ throw new PatchProblem("where_too_complex");
328
+ }
329
+ let work = 0;
330
+ let solutions = [new Map()];
331
+ for (let i = 0; i < where.length; i++) {
332
+ const triple = where[i];
333
+ const last = i === where.length - 1;
334
+ const next = [];
335
+ for (const partial of solutions) {
336
+ // The variables this triple would newly bind in `partial`. `matchTerm`
337
+ // binds into the map it is given, so we match against `partial` directly
338
+ // and roll these back after each quad — cloning a fresh candidate per
339
+ // quad would, on the abort path, allocate up to MAX_SOLVE_WORK maps and
340
+ // thrash GC inside the single-threaded DO. Only successful matches clone.
341
+ const newVars = [];
342
+ for (const term of [triple.subject, triple.predicate, triple.object]) {
343
+ if (term.kind === "var" && !partial.has(term.name)) {
344
+ newVars.push(term.name);
345
+ }
346
+ }
347
+ for (const quad of current) {
348
+ if (++work > MAX_SOLVE_WORK) {
349
+ throw new PatchProblem("where_too_complex");
350
+ }
351
+ if (matchTerm(triple.subject, quad.subject, partial) &&
352
+ matchTerm(triple.predicate, quad.predicate, partial) &&
353
+ matchTerm(triple.object, quad.object, partial)) {
354
+ next.push(new Map(partial));
355
+ // On the final triple, two complete solutions already prove the
356
+ // match is ambiguous; stop before enumerating the rest.
357
+ if (last && next.length > 1)
358
+ return next;
359
+ }
360
+ for (const name of newVars)
361
+ partial.delete(name);
362
+ }
363
+ }
364
+ if (next.length === 0)
365
+ return [];
366
+ solutions = next;
367
+ }
368
+ return solutions;
369
+ }
370
+ /** Instantiate a template term under a binding into a concrete {@link StoredTerm}. */
371
+ function instantiate(term, bindings) {
372
+ if (term.kind === "var") {
373
+ const bound = bindings.get(term.name);
374
+ // N3 patches are checked statically in `parseN3Patch`; this backstops the
375
+ // SPARQL path, where an unbound template variable is also a document
376
+ // constraint violation (422).
377
+ if (!bound)
378
+ throw new PatchConstraintError("unbound_template_variable");
379
+ return bound;
380
+ }
381
+ return term.term;
382
+ }
383
+ function instantiateTriple(triple, bindings) {
384
+ return {
385
+ subject: instantiate(triple.subject, bindings),
386
+ predicate: instantiate(triple.predicate, bindings),
387
+ object: instantiate(triple.object, bindings),
388
+ graph: DEFAULT_GRAPH,
389
+ };
390
+ }
391
+ /** Whether `current` contains a quad equal to `target` (default graph). */
392
+ function contains(current, target) {
393
+ return current.some((q) => termsEqual(q.subject, target.subject) &&
394
+ termsEqual(q.predicate, target.predicate) &&
395
+ termsEqual(q.object, target.object));
396
+ }
397
+ /**
398
+ * Resolve a parsed {@link Patch} against the resource's `current` quads into a
399
+ * concrete delete/insert pair.
400
+ *
401
+ * @throws {PatchProblem}
402
+ * - `no_match` when `where` binds to no solution;
403
+ * - `ambiguous_match` when it binds to more than one;
404
+ * - `delete_not_found` when a resolved delete triple is absent;
405
+ * - `where_too_complex` when the `where` pattern exceeds the solver's bounds.
406
+ * @throws {PatchConstraintError}
407
+ * - `unbound_template_variable` when a template uses an unbound variable
408
+ * (backstop for the SPARQL path; N3 patches are checked at parse time).
409
+ */
410
+ export function resolvePatch(patch, current) {
411
+ const solutions = solve(patch.where, current);
412
+ if (solutions.length === 0)
413
+ throw new PatchProblem("no_match");
414
+ if (solutions.length > 1)
415
+ throw new PatchProblem("ambiguous_match");
416
+ const bindings = solutions[0];
417
+ const deletes = patch.deletes.map((t) => instantiateTriple(t, bindings));
418
+ const inserts = patch.inserts.map((t) => instantiateTriple(t, bindings));
419
+ for (const d of deletes) {
420
+ if (!contains(current, d))
421
+ throw new PatchProblem("delete_not_found");
422
+ }
423
+ return { deletes, inserts, insertOnly: deletes.length === 0 };
424
+ }
425
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../src/patch.ts"],"names":[],"mappings":"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"}
package/dist/pod.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The per-pod Durable Object: the single-threaded consistency, authz, and
3
+ * notification authority for one Solid Pod.
4
+ *
5
+ * The stateless front door (`handler.ts`) authenticates at the edge and hands
6
+ * the verified agent facts to this object via internal headers; everything that
7
+ * must be strongly consistent — LDP verbs, WAC, N3 Patch, `If-Match` writes,
8
+ * DPoP `jti` replay, R2 copy-on-write through `@dwk/store`, and WebSocket
9
+ * notifications — happens here, where Cloudflare guarantees a single thread per
10
+ * pod. Consumers bind this class as a Durable Object namespace.
11
+ */
12
+ import { DurableObject } from "cloudflare:workers";
13
+ import { type SolidPodEnv } from "./config";
14
+ export declare class SolidPodObject extends DurableObject<SolidPodEnv> {
15
+ #private;
16
+ constructor(state: DurableObjectState, env: SolidPodEnv);
17
+ fetch(request: Request): Promise<Response>;
18
+ webSocketMessage(ws: WebSocket, message: string | ArrayBuffer): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=pod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod.d.ts","sourceRoot":"","sources":["../src/pod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAwBnD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AA0F9D,qBAAa,cAAe,SAAQ,aAAa,CAAC,WAAW,CAAC;;gBAQhD,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IAuBxC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IA2wB1C,gBAAgB,CAC7B,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,MAAM,GAAG,WAAW,GAC5B,OAAO,CAAC,IAAI,CAAC;CAyBjB"}