@stll/anonymize-wasm 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,23 @@
1
+ import { t as __exportAll } from "./rolldown-runtime.mjs";
1
2
  //#region src/data/address-street-types.json
3
+ var address_street_types_exports = /* @__PURE__ */ __exportAll({
4
+ _comment: () => _comment,
5
+ cs: () => cs,
6
+ de: () => de,
7
+ default: () => address_street_types_default,
8
+ en: () => en,
9
+ es: () => es,
10
+ fr: () => fr,
11
+ hu: () => hu,
12
+ it: () => it,
13
+ nl: () => nl,
14
+ pl: () => pl,
15
+ pt: () => pt,
16
+ "pt-br": () => pt_br,
17
+ ro: () => ro,
18
+ sk: () => sk,
19
+ sv: () => sv
20
+ });
2
21
  var _comment = "Street type words by language. Used by address seed detector to identify street names via Aho-Corasick.";
3
22
  var cs = [
4
23
  "alej",
@@ -220,6 +239,6 @@ var address_street_types_default = {
220
239
  sv
221
240
  };
222
241
  //#endregion
223
- export { _comment, cs, de, address_street_types_default as default, en, es, fr, hu, it, nl, pl, pt, pt_br as "pt-br", ro, sk, sv };
242
+ export { address_street_types_exports as n, address_street_types_default as t };
224
243
 
225
244
  //# sourceMappingURL=address-street-types.mjs.map
@@ -17,6 +17,7 @@ var allow_list_default = {
17
17
  "bic",
18
18
  "board",
19
19
  "bonus",
20
+ "branch",
20
21
  "business",
21
22
  "capital",
22
23
  "case",
@@ -59,6 +60,8 @@ var allow_list_default = {
59
60
  "expense",
60
61
  "fair",
61
62
  "federal",
63
+ "fee",
64
+ "fees",
62
65
  "final",
63
66
  "flood",
64
67
  "force",
@@ -77,9 +80,11 @@ var allow_list_default = {
77
80
  "insurance",
78
81
  "interest",
79
82
  "law",
83
+ "laws",
80
84
  "ldn",
81
85
  "lease",
82
86
  "letter",
87
+ "letters",
83
88
  "lien",
84
89
  "loan",
85
90
  "loss",
@@ -87,6 +92,8 @@ var allow_list_default = {
87
92
  "mark",
88
93
  "material",
89
94
  "matters",
95
+ "measure",
96
+ "measures",
90
97
  "merit",
91
98
  "mfčr",
92
99
  "minor",
@@ -99,6 +106,7 @@ var allow_list_default = {
99
106
  "note",
100
107
  "notice",
101
108
  "officer",
109
+ "oil",
102
110
  "option",
103
111
  "order",
104
112
  "otter",
@@ -134,6 +142,7 @@ var allow_list_default = {
134
142
  "review",
135
143
  "right",
136
144
  "risk",
145
+ "road",
137
146
  "rule",
138
147
  "salary",
139
148
  "sale",
@@ -147,6 +156,7 @@ var allow_list_default = {
147
156
  "service",
148
157
  "severance",
149
158
  "share",
159
+ "shares",
150
160
  "short",
151
161
  "single",
152
162
  "sleva",
@@ -173,6 +183,8 @@ var allow_list_default = {
173
183
  "trust",
174
184
  "value",
175
185
  "vice",
186
+ "vote",
187
+ "votes",
176
188
  "warrant",
177
189
  "will"
178
190
  ]
@@ -1,42 +1,478 @@
1
+ import { t as __exportAll } from "./rolldown-runtime.mjs";
1
2
  //#region src/data/amount-words.json
3
+ var amount_words_exports = /* @__PURE__ */ __exportAll({
4
+ _comment: () => _comment,
5
+ default: () => amount_words_default,
6
+ magnitudeSuffixes: () => magnitudeSuffixes,
7
+ patterns: () => patterns,
8
+ percentages: () => percentages,
9
+ shareQuantityTerms: () => shareQuantityTerms
10
+ });
11
+ var _comment = "Patterns for written-out monetary amounts, magnitude suffixes, share-quantity guards, and numeric percentage phrases, by language.";
12
+ var patterns = [
13
+ {
14
+ "lang": "cs",
15
+ "keywords": ["slovy", "slovně"]
16
+ },
17
+ {
18
+ "lang": "sk",
19
+ "keywords": ["slovom", "slovami"]
20
+ },
21
+ {
22
+ "lang": "de",
23
+ "keywords": ["in Worten", "in Buchstaben"]
24
+ },
25
+ {
26
+ "lang": "en",
27
+ "keywords": ["in words", "in letters"]
28
+ },
29
+ {
30
+ "lang": "fr",
31
+ "keywords": ["en lettres", "en toutes lettres"]
32
+ },
33
+ {
34
+ "lang": "pl",
35
+ "keywords": ["słownie"]
36
+ },
37
+ {
38
+ "lang": "it",
39
+ "keywords": ["in lettere"]
40
+ },
41
+ {
42
+ "lang": "es",
43
+ "keywords": ["en letras"]
44
+ }
45
+ ];
46
+ var percentages = [{
47
+ "lang": "en",
48
+ "keywords": ["percent"],
49
+ "standalone": ["zero", "one hundred"],
50
+ "ones": [
51
+ "one",
52
+ "two",
53
+ "three",
54
+ "four",
55
+ "five",
56
+ "six",
57
+ "seven",
58
+ "eight",
59
+ "nine"
60
+ ],
61
+ "teens": [
62
+ "ten",
63
+ "eleven",
64
+ "twelve",
65
+ "thirteen",
66
+ "fourteen",
67
+ "fifteen",
68
+ "sixteen",
69
+ "seventeen",
70
+ "eighteen",
71
+ "nineteen"
72
+ ],
73
+ "tens": [
74
+ "twenty",
75
+ "thirty",
76
+ "forty",
77
+ "fifty",
78
+ "sixty",
79
+ "seventy",
80
+ "eighty",
81
+ "ninety"
82
+ ],
83
+ "allowSpaceCompoundSeparator": true
84
+ }];
85
+ var magnitudeSuffixes = [
86
+ {
87
+ "lang": "cs",
88
+ "words": [
89
+ "sto",
90
+ "sta",
91
+ "stě",
92
+ "sty",
93
+ "stovka",
94
+ "stovky",
95
+ "stovek",
96
+ "tisíc",
97
+ "tisíce",
98
+ "tisíců",
99
+ "milion",
100
+ "miliony",
101
+ "milionů",
102
+ "miliarda",
103
+ "miliardy",
104
+ "miliard",
105
+ "bilion",
106
+ "biliony",
107
+ "bilionů"
108
+ ],
109
+ "abbreviationsCaseInsensitive": ["mld"],
110
+ "abbreviationsCaseSensitive": ["K", "M"]
111
+ },
112
+ {
113
+ "lang": "de",
114
+ "words": [
115
+ "hundert",
116
+ "hunderte",
117
+ "hunderten",
118
+ "tausend",
119
+ "million",
120
+ "millionen",
121
+ "milliarde",
122
+ "milliarden",
123
+ "billion",
124
+ "billionen"
125
+ ],
126
+ "abbreviationsCaseInsensitive": ["mio", "mrd"],
127
+ "abbreviationsCaseSensitive": ["K", "M"]
128
+ },
129
+ {
130
+ "lang": "en",
131
+ "words": [
132
+ "hundred",
133
+ "hundreds",
134
+ "thousand",
135
+ "thousands",
136
+ "million",
137
+ "millions",
138
+ "billion",
139
+ "billions",
140
+ "trillion",
141
+ "trillions",
142
+ "quadrillion",
143
+ "quadrillions"
144
+ ],
145
+ "abbreviationsCaseInsensitive": [
146
+ "bn",
147
+ "bln",
148
+ "tn",
149
+ "trn"
150
+ ],
151
+ "abbreviationsCaseSensitive": ["K", "M"]
152
+ },
153
+ {
154
+ "lang": "es",
155
+ "words": [
156
+ "cien",
157
+ "ciento",
158
+ "cientos",
159
+ "millón",
160
+ "millones",
161
+ "billón",
162
+ "billones"
163
+ ],
164
+ "abbreviationsCaseInsensitive": ["mln"],
165
+ "abbreviationsCaseSensitive": ["K", "M"]
166
+ },
167
+ {
168
+ "lang": "fr",
169
+ "words": [
170
+ "cent",
171
+ "cents",
172
+ "centaine",
173
+ "centaines",
174
+ "mille",
175
+ "million",
176
+ "millions",
177
+ "milliard",
178
+ "milliards",
179
+ "billion",
180
+ "billions"
181
+ ],
182
+ "abbreviationsCaseInsensitive": [
183
+ "mio",
184
+ "md",
185
+ "mrd"
186
+ ],
187
+ "abbreviationsCaseSensitive": ["K", "M"]
188
+ },
189
+ {
190
+ "lang": "it",
191
+ "words": [
192
+ "cento",
193
+ "centinaio",
194
+ "centinaia",
195
+ "mille",
196
+ "milione",
197
+ "milioni",
198
+ "miliardo",
199
+ "miliardi",
200
+ "bilione",
201
+ "bilioni"
202
+ ],
203
+ "abbreviationsCaseInsensitive": ["mln", "mld"],
204
+ "abbreviationsCaseSensitive": ["K", "M"]
205
+ },
206
+ {
207
+ "lang": "pl",
208
+ "words": [
209
+ "sto",
210
+ "sta",
211
+ "stów",
212
+ "stoma",
213
+ "setki",
214
+ "setek",
215
+ "tysiąc",
216
+ "tysiące",
217
+ "tysięcy",
218
+ "milion",
219
+ "miliony",
220
+ "milionów",
221
+ "miliard",
222
+ "miliardy",
223
+ "miliardów",
224
+ "bilion",
225
+ "biliony",
226
+ "bilionów"
227
+ ],
228
+ "abbreviationsCaseInsensitive": ["mln", "mld"],
229
+ "abbreviationsCaseSensitive": ["K", "M"]
230
+ },
231
+ {
232
+ "lang": "pt-br",
233
+ "words": [
234
+ "cem",
235
+ "cento",
236
+ "centena",
237
+ "centenas",
238
+ "milhão",
239
+ "milhões",
240
+ "bilhão",
241
+ "bilhões",
242
+ "trilhão",
243
+ "trilhões"
244
+ ],
245
+ "abbreviationsCaseInsensitive": [],
246
+ "abbreviationsCaseSensitive": ["K", "M"]
247
+ },
248
+ {
249
+ "lang": "sk",
250
+ "words": [
251
+ "sto",
252
+ "sta",
253
+ "stoviek",
254
+ "stovka",
255
+ "stovky",
256
+ "tisíc",
257
+ "tisíce",
258
+ "tisícov",
259
+ "milión",
260
+ "milióny",
261
+ "miliónov",
262
+ "milion",
263
+ "miliony",
264
+ "milionov",
265
+ "miliarda",
266
+ "miliardy",
267
+ "miliárd",
268
+ "bilión",
269
+ "bilióny",
270
+ "biliónov"
271
+ ],
272
+ "abbreviationsCaseInsensitive": ["mld"],
273
+ "abbreviationsCaseSensitive": ["K", "M"]
274
+ }
275
+ ];
276
+ var shareQuantityTerms = [
277
+ {
278
+ "lang": "cs",
279
+ "modifiers": [
280
+ "kmenové",
281
+ "obyčejné",
282
+ "prioritní",
283
+ "registrované",
284
+ "vlastní",
285
+ "hlasovací",
286
+ "nehlasovací",
287
+ "omezené",
288
+ "třída",
289
+ "série"
290
+ ],
291
+ "nouns": [
292
+ "akcie",
293
+ "cenné papíry",
294
+ "podíly",
295
+ "jednotky"
296
+ ]
297
+ },
298
+ {
299
+ "lang": "de",
300
+ "modifiers": [
301
+ "stamm",
302
+ "vorzugs",
303
+ "namens",
304
+ "eigene",
305
+ "stimmberechtigte",
306
+ "stimmrechtslose",
307
+ "beschränkte",
308
+ "klasse",
309
+ "serie"
310
+ ],
311
+ "nouns": [
312
+ "aktien",
313
+ "wertpapiere",
314
+ "anteile",
315
+ "einheiten"
316
+ ]
317
+ },
318
+ {
319
+ "lang": "en",
320
+ "modifiers": [
321
+ "ordinary",
322
+ "common",
323
+ "preferred",
324
+ "registered",
325
+ "treasury",
326
+ "voting",
327
+ "non-voting",
328
+ "restricted",
329
+ "class",
330
+ "series"
331
+ ],
332
+ "nouns": [
333
+ "share",
334
+ "shares",
335
+ "stock",
336
+ "stocks",
337
+ "security",
338
+ "securities",
339
+ "unit",
340
+ "units"
341
+ ]
342
+ },
343
+ {
344
+ "lang": "es",
345
+ "modifiers": [
346
+ "ordinarias",
347
+ "comunes",
348
+ "preferentes",
349
+ "nominativas",
350
+ "propias",
351
+ "con derecho a voto",
352
+ "sin derecho a voto",
353
+ "restringidas",
354
+ "clase",
355
+ "serie"
356
+ ],
357
+ "nouns": [
358
+ "acciones",
359
+ "valores",
360
+ "participaciones",
361
+ "unidades"
362
+ ]
363
+ },
364
+ {
365
+ "lang": "fr",
366
+ "modifiers": [
367
+ "ordinaires",
368
+ "communes",
369
+ "privilégiées",
370
+ "nominatives",
371
+ "propres",
372
+ "votantes",
373
+ "sans droit de vote",
374
+ "restreintes",
375
+ "classe",
376
+ "série"
377
+ ],
378
+ "nouns": [
379
+ "actions",
380
+ "titres",
381
+ "unités"
382
+ ]
383
+ },
384
+ {
385
+ "lang": "it",
386
+ "modifiers": [
387
+ "ordinarie",
388
+ "comuni",
389
+ "privilegiate",
390
+ "nominative",
391
+ "proprie",
392
+ "votanti",
393
+ "senza diritto di voto",
394
+ "vincolate",
395
+ "classe",
396
+ "serie"
397
+ ],
398
+ "nouns": [
399
+ "azioni",
400
+ "titoli",
401
+ "quote",
402
+ "unità"
403
+ ]
404
+ },
405
+ {
406
+ "lang": "pl",
407
+ "modifiers": [
408
+ "zwykłe",
409
+ "imienne",
410
+ "uprzywilejowane",
411
+ "własne",
412
+ "głosujące",
413
+ "nieme",
414
+ "ograniczone",
415
+ "klasa",
416
+ "seria"
417
+ ],
418
+ "nouns": [
419
+ "akcje",
420
+ "papiery wartościowe",
421
+ "udziały",
422
+ "jednostki"
423
+ ]
424
+ },
425
+ {
426
+ "lang": "pt-br",
427
+ "modifiers": [
428
+ "ordinárias",
429
+ "comuns",
430
+ "preferenciais",
431
+ "nominativas",
432
+ "próprias",
433
+ "votantes",
434
+ "sem direito a voto",
435
+ "restritas",
436
+ "classe",
437
+ "série"
438
+ ],
439
+ "nouns": [
440
+ "ações",
441
+ "valores mobiliários",
442
+ "participações",
443
+ "unidades"
444
+ ]
445
+ },
446
+ {
447
+ "lang": "sk",
448
+ "modifiers": [
449
+ "kmeňové",
450
+ "obyčajné",
451
+ "prioritné",
452
+ "registrované",
453
+ "vlastné",
454
+ "hlasovacie",
455
+ "nehlasovacie",
456
+ "obmedzené",
457
+ "trieda",
458
+ "séria"
459
+ ],
460
+ "nouns": [
461
+ "akcie",
462
+ "cenné papiere",
463
+ "podiely",
464
+ "jednotky"
465
+ ]
466
+ }
467
+ ];
2
468
  var amount_words_default = {
3
- _comment: "Patterns for written-out monetary amounts in parentheses, by language.",
4
- patterns: [
5
- {
6
- "lang": "cs",
7
- "keywords": ["slovy", "slovně"]
8
- },
9
- {
10
- "lang": "sk",
11
- "keywords": ["slovom", "slovami"]
12
- },
13
- {
14
- "lang": "de",
15
- "keywords": ["in Worten", "in Buchstaben"]
16
- },
17
- {
18
- "lang": "en",
19
- "keywords": ["in words", "in letters"]
20
- },
21
- {
22
- "lang": "fr",
23
- "keywords": ["en lettres", "en toutes lettres"]
24
- },
25
- {
26
- "lang": "pl",
27
- "keywords": ["słownie"]
28
- },
29
- {
30
- "lang": "it",
31
- "keywords": ["in lettere"]
32
- },
33
- {
34
- "lang": "es",
35
- "keywords": ["en letras"]
36
- }
37
- ]
469
+ _comment,
470
+ patterns,
471
+ percentages,
472
+ magnitudeSuffixes,
473
+ shareQuantityTerms
38
474
  };
39
475
  //#endregion
40
- export { amount_words_default as default };
476
+ export { amount_words_exports as n, amount_words_default as t };
41
477
 
42
478
  //# sourceMappingURL=amount-words.mjs.map
@@ -0,0 +1,2 @@
1
+ import { a as OPERATOR_TYPES, i as DetectionSource, n as DETECTION_SOURCES, o as OperatorType, r as DETECTOR_PRIORITY, t as DEFAULT_ENTITY_LABELS } from "./constants2.mjs";
2
+ export { DEFAULT_ENTITY_LABELS, DETECTION_SOURCES, DETECTOR_PRIORITY, DetectionSource, OPERATOR_TYPES, OperatorType };
@@ -0,0 +1,85 @@
1
+ //#region src/constants.ts
2
+ /**
3
+ * Runtime-free constants for the anonymization pipeline.
4
+ *
5
+ * This module is the SSR-safe / browser-safe entrypoint:
6
+ * importing it must not pull in `@stll/text-search`,
7
+ * `@stll/anonymize-wasm`, or any other runtime-bearing
8
+ * module. Consumers that only need the static label list,
9
+ * detection-source identifiers, or operator names import
10
+ * from `@stll/anonymize/constants` (or
11
+ * `@stll/anonymize-wasm/constants`) without paying the
12
+ * wasm / regex-set startup cost.
13
+ *
14
+ * `types.ts` re-exports these for back-compat, so existing
15
+ * `import { DEFAULT_ENTITY_LABELS } from "@stll/anonymize"`
16
+ * call sites keep working.
17
+ */
18
+ /**
19
+ * Source of a detected entity span.
20
+ * Ordered by detection layer in the pipeline.
21
+ */
22
+ const DETECTION_SOURCES = {
23
+ TRIGGER: "trigger",
24
+ REGEX: "regex",
25
+ DENY_LIST: "deny-list",
26
+ LEGAL_FORM: "legal-form",
27
+ GAZETTEER: "gazetteer",
28
+ NER: "ner",
29
+ COREFERENCE: "coreference"
30
+ };
31
+ /**
32
+ * Priority levels for detection sources.
33
+ * Higher = more structurally reliable. Used during
34
+ * overlap resolution so deterministic detectors beat
35
+ * probabilistic ones regardless of raw score.
36
+ */
37
+ const DETECTOR_PRIORITY = {
38
+ [DETECTION_SOURCES.GAZETTEER]: 5,
39
+ [DETECTION_SOURCES.TRIGGER]: 4,
40
+ [DETECTION_SOURCES.LEGAL_FORM]: 3,
41
+ [DETECTION_SOURCES.REGEX]: 3,
42
+ [DETECTION_SOURCES.DENY_LIST]: 2,
43
+ [DETECTION_SOURCES.COREFERENCE]: 2,
44
+ [DETECTION_SOURCES.NER]: 1
45
+ };
46
+ /**
47
+ * Anonymization operator types. Each operator defines
48
+ * how a confirmed entity is replaced in the output.
49
+ */
50
+ const OPERATOR_TYPES = ["replace", "redact"];
51
+ /**
52
+ * Canonical entity labels used across the pipeline.
53
+ * NER models may use different native labels; the bench
54
+ * NER wrapper maps model output to these canonical names.
55
+ *
56
+ * These labels are ephemeral: entities are regenerated on
57
+ * every pipeline run and never persisted to the database.
58
+ * Renaming a label here requires no migration.
59
+ */
60
+ const DEFAULT_ENTITY_LABELS = [
61
+ "person",
62
+ "organization",
63
+ "phone number",
64
+ "address",
65
+ "email address",
66
+ "date",
67
+ "date of birth",
68
+ "bank account number",
69
+ "iban",
70
+ "tax identification number",
71
+ "identity card number",
72
+ "birth number",
73
+ "national identification number",
74
+ "social security number",
75
+ "registration number",
76
+ "credit card number",
77
+ "passport number",
78
+ "monetary amount",
79
+ "land parcel",
80
+ "misc"
81
+ ];
82
+ //#endregion
83
+ export { DEFAULT_ENTITY_LABELS, DETECTION_SOURCES, DETECTOR_PRIORITY, OPERATOR_TYPES };
84
+
85
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["/**\n * Runtime-free constants for the anonymization pipeline.\n *\n * This module is the SSR-safe / browser-safe entrypoint:\n * importing it must not pull in `@stll/text-search`,\n * `@stll/anonymize-wasm`, or any other runtime-bearing\n * module. Consumers that only need the static label list,\n * detection-source identifiers, or operator names import\n * from `@stll/anonymize/constants` (or\n * `@stll/anonymize-wasm/constants`) without paying the\n * wasm / regex-set startup cost.\n *\n * `types.ts` re-exports these for back-compat, so existing\n * `import { DEFAULT_ENTITY_LABELS } from \"@stll/anonymize\"`\n * call sites keep working.\n */\n\n/**\n * Source of a detected entity span.\n * Ordered by detection layer in the pipeline.\n */\nexport const DETECTION_SOURCES = {\n TRIGGER: \"trigger\",\n REGEX: \"regex\",\n DENY_LIST: \"deny-list\",\n LEGAL_FORM: \"legal-form\",\n GAZETTEER: \"gazetteer\",\n NER: \"ner\",\n COREFERENCE: \"coreference\",\n} as const;\n\nexport type DetectionSource =\n (typeof DETECTION_SOURCES)[keyof typeof DETECTION_SOURCES];\n\n/**\n * Priority levels for detection sources.\n * Higher = more structurally reliable. Used during\n * overlap resolution so deterministic detectors beat\n * probabilistic ones regardless of raw score.\n */\nexport const DETECTOR_PRIORITY = {\n [DETECTION_SOURCES.GAZETTEER]: 5,\n [DETECTION_SOURCES.TRIGGER]: 4,\n [DETECTION_SOURCES.LEGAL_FORM]: 3,\n [DETECTION_SOURCES.REGEX]: 3,\n [DETECTION_SOURCES.DENY_LIST]: 2,\n [DETECTION_SOURCES.COREFERENCE]: 2,\n [DETECTION_SOURCES.NER]: 1,\n} as const satisfies Record<DetectionSource, number>;\n\n/**\n * Anonymization operator types. Each operator defines\n * how a confirmed entity is replaced in the output.\n */\nexport const OPERATOR_TYPES = [\"replace\", \"redact\"] as const;\n\nexport type OperatorType = (typeof OPERATOR_TYPES)[number];\n\n/**\n * Canonical entity labels used across the pipeline.\n * NER models may use different native labels; the bench\n * NER wrapper maps model output to these canonical names.\n *\n * These labels are ephemeral: entities are regenerated on\n * every pipeline run and never persisted to the database.\n * Renaming a label here requires no migration.\n */\nexport const DEFAULT_ENTITY_LABELS = [\n \"person\",\n \"organization\",\n \"phone number\",\n \"address\",\n \"email address\",\n \"date\",\n \"date of birth\",\n \"bank account number\",\n \"iban\",\n \"tax identification number\",\n \"identity card number\",\n \"birth number\",\n \"national identification number\",\n \"social security number\",\n \"registration number\",\n \"credit card number\",\n \"passport number\",\n \"monetary amount\",\n \"land parcel\",\n \"misc\",\n] as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,oBAAoB;CAC/B,SAAS;CACT,OAAO;CACP,WAAW;CACX,YAAY;CACZ,WAAW;CACX,KAAK;CACL,aAAa;CACd;;;;;;;AAWD,MAAa,oBAAoB;EAC9B,kBAAkB,YAAY;EAC9B,kBAAkB,UAAU;EAC5B,kBAAkB,aAAa;EAC/B,kBAAkB,QAAQ;EAC1B,kBAAkB,YAAY;EAC9B,kBAAkB,cAAc;EAChC,kBAAkB,MAAM;CAC1B;;;;;AAMD,MAAa,iBAAiB,CAAC,WAAW,SAAS;;;;;;;;;;AAanD,MAAa,wBAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}