@birdcc/lsp 0.0.1-alpha.1 → 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 (86) hide show
  1. package/README.md +25 -23
  2. package/dist/asn-completion.d.ts +21 -0
  3. package/dist/asn-completion.d.ts.map +1 -0
  4. package/dist/asn-completion.js +42 -0
  5. package/dist/asn-completion.js.map +1 -0
  6. package/dist/asn-context.d.ts +9 -0
  7. package/dist/asn-context.d.ts.map +1 -0
  8. package/dist/asn-context.js +203 -0
  9. package/dist/asn-context.js.map +1 -0
  10. package/dist/asn-hover.d.ts +11 -0
  11. package/dist/asn-hover.d.ts.map +1 -0
  12. package/dist/asn-hover.js +33 -0
  13. package/dist/asn-hover.js.map +1 -0
  14. package/dist/asn-inlay-hints.d.ts +13 -0
  15. package/dist/asn-inlay-hints.d.ts.map +1 -0
  16. package/dist/asn-inlay-hints.js +47 -0
  17. package/dist/asn-inlay-hints.js.map +1 -0
  18. package/dist/diagnostic.d.ts.map +1 -1
  19. package/dist/diagnostic.js +2 -10
  20. package/dist/diagnostic.js.map +1 -1
  21. package/dist/document-symbol.js +1 -1
  22. package/dist/document-symbol.js.map +1 -1
  23. package/dist/hover-context.d.ts +31 -0
  24. package/dist/hover-context.d.ts.map +1 -0
  25. package/dist/hover-context.js +125 -0
  26. package/dist/hover-context.js.map +1 -0
  27. package/dist/hover-docs/00-base.yaml +5 -0
  28. package/dist/hover-docs/10-global-options.yaml +442 -0
  29. package/dist/hover-docs/20-filter-language.yaml +209 -0
  30. package/dist/hover-docs/30-channel-options.yaml +244 -0
  31. package/dist/hover-docs/40-protocol-common.yaml +59 -0
  32. package/dist/hover-docs/41-protocol-igp.yaml +305 -0
  33. package/dist/hover-docs/42-protocol-kernel-static.yaml +220 -0
  34. package/dist/hover-docs/43-protocol-mpls.yaml +40 -0
  35. package/dist/hover-docs/44-protocol-extended.yaml +635 -0
  36. package/dist/hover-docs/50-protocol-bgp.yaml +482 -0
  37. package/dist/hover-docs/60-protocol-ospf.yaml +527 -0
  38. package/dist/hover-docs.d.ts +5 -1
  39. package/dist/hover-docs.d.ts.map +1 -1
  40. package/dist/hover-docs.js +376 -51
  41. package/dist/hover-docs.js.map +1 -1
  42. package/dist/hover-usage/00-base.yaml +2 -0
  43. package/dist/hover-usage/10-global-usage.yaml +73 -0
  44. package/dist/hover-usage/20-filter-usage.yaml +41 -0
  45. package/dist/hover-usage/30-channel-usage.yaml +41 -0
  46. package/dist/hover-usage/40-protocol-usage.yaml +258 -0
  47. package/dist/hover-usage/50-bgp-usage.yaml +254 -0
  48. package/dist/hover-usage/60-ospf-usage.yaml +340 -0
  49. package/dist/hover.d.ts +10 -0
  50. package/dist/hover.d.ts.map +1 -1
  51. package/dist/hover.js +152 -46
  52. package/dist/hover.js.map +1 -1
  53. package/dist/index.d.ts +7 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +6 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/init/workspace-init.d.ts +28 -0
  58. package/dist/init/workspace-init.d.ts.map +1 -0
  59. package/dist/init/workspace-init.js +72 -0
  60. package/dist/init/workspace-init.js.map +1 -0
  61. package/dist/lsp-server.d.ts +7 -1
  62. package/dist/lsp-server.d.ts.map +1 -1
  63. package/dist/lsp-server.js +277 -65
  64. package/dist/lsp-server.js.map +1 -1
  65. package/dist/project-config.d.ts +22 -0
  66. package/dist/project-config.d.ts.map +1 -0
  67. package/dist/project-config.js +307 -0
  68. package/dist/project-config.js.map +1 -0
  69. package/dist/shared.d.ts +1 -0
  70. package/dist/shared.d.ts.map +1 -1
  71. package/dist/shared.js +4 -24
  72. package/dist/shared.js.map +1 -1
  73. package/dist/symbol-utils.d.ts +6 -6
  74. package/dist/symbol-utils.d.ts.map +1 -1
  75. package/dist/symbol-utils.js +24 -25
  76. package/dist/symbol-utils.js.map +1 -1
  77. package/dist/type-hint-inlay.d.ts +4 -0
  78. package/dist/type-hint-inlay.d.ts.map +1 -0
  79. package/dist/type-hint-inlay.js +27 -0
  80. package/dist/type-hint-inlay.js.map +1 -0
  81. package/dist/utils.d.ts +65 -0
  82. package/dist/utils.d.ts.map +1 -0
  83. package/dist/utils.js +97 -0
  84. package/dist/utils.js.map +1 -0
  85. package/package.json +11 -7
  86. package/dist/hover-docs.yaml +0 -600
@@ -0,0 +1,527 @@
1
+ entries:
2
+ - keyword: area
3
+ description: OSPF area block
4
+ detail: Define an OSPF area and nested interface or area-scoped options.
5
+ diff: same
6
+ version: v2+
7
+ anchor: proto-ospf
8
+ path: protocol.ospf
9
+ usage: area 0 { interface "eth*" { cost 10; hello 10; dead 40; }; };
10
+ related:
11
+ - ospf
12
+ - interface
13
+ - external
14
+ parameters:
15
+ - name: area-id
16
+ description: Area identifier such as 0 or 0.0.0.0.
17
+ required: true
18
+ - keyword: external
19
+ description: OSPF external LSAs block
20
+ detail: Configure generation and handling of external LSAs for OSPF.
21
+ diff: same
22
+ version: v2+
23
+ anchor: proto-ospf
24
+ path: protocol.ospf.area
25
+ usage: external { type 1; };
26
+ related:
27
+ - ospf
28
+ - area
29
+ - type
30
+ parameters:
31
+ - name: type
32
+ description: External LSA type (typically 1 or 2).
33
+ - keyword: cost
34
+ description: OSPF interface cost
35
+ detail: Set the OSPF metric for an interface within an area block.
36
+ diff: same
37
+ version: v2+
38
+ anchor: proto-ospf
39
+ path:
40
+ - protocol.ospf.area.interface
41
+ - protocol.ospf.interface
42
+ usage: cost 10;
43
+ related:
44
+ - interface
45
+ - area
46
+ - keyword: dead
47
+ description: OSPF dead interval
48
+ detail: Set dead interval in seconds before considering a neighbor down.
49
+ diff: same
50
+ version: v2+
51
+ anchor: proto-ospf
52
+ path:
53
+ - protocol.ospf.area.interface
54
+ - protocol.ospf.interface
55
+ usage: dead 40;
56
+ related:
57
+ - hello
58
+ - interface
59
+ - keyword: interface
60
+ description: Configure protocol interfaces
61
+ detail: Define which interfaces this protocol operates on and their specific settings.
62
+ diff: same
63
+ version: v2+
64
+ anchor: proto-iface
65
+ - keyword: interface
66
+ description: OSPF interface block
67
+ detail: Define per-interface OSPF behavior inside an OSPF area.
68
+ diff: same
69
+ version: v2+
70
+ anchor: proto-ospf
71
+ path: protocol.ospf.area
72
+ usage: interface "eth*" { cost 10; hello 10; dead 40; type broadcast; };
73
+ related:
74
+ - ospf
75
+ - area
76
+ parameters:
77
+ - name: cost
78
+ description: Interface metric used by SPF calculation.
79
+ - name: hello
80
+ description: Hello interval in seconds.
81
+ - name: dead
82
+ description: Dead interval in seconds.
83
+ - name: type
84
+ description: Network type such as broadcast or ptp.
85
+ - keyword: hello
86
+ description: OSPF hello interval
87
+ detail: Configure hello packet interval in seconds for OSPF neighbors.
88
+ diff: same
89
+ version: v2+
90
+ anchor: proto-ospf
91
+ path:
92
+ - protocol.ospf.area.interface
93
+ - protocol.ospf.interface
94
+ usage: hello 10;
95
+ related:
96
+ - dead
97
+ - interface
98
+ - keyword: ospf
99
+ description: OSPF protocol
100
+ detail: Open Shortest Path First - a link-state interior gateway protocol.
101
+ diff: same
102
+ version: v2+
103
+ anchor: proto-ospf
104
+ path: protocol
105
+ usage: protocol ospf v2 <name> { area 0 { interface "eth*" { cost 10; }; }; };
106
+ related:
107
+ - area
108
+ - interface
109
+ - external
110
+ - password
111
+ parameters:
112
+ - name: instance-name
113
+ description: Protocol instance name.
114
+ required: true
115
+ - keyword: password
116
+ description: Configure protocol authentication
117
+ detail: Set authentication password for protocols that support it (BGP, OSPF).
118
+ diff: same
119
+ version: v2+
120
+ anchor: proto-password
121
+ path:
122
+ - protocol.ospf.authentication
123
+ - protocol.bgp
124
+ related:
125
+ - ospf
126
+ - neighbor
127
+ parameters:
128
+ - name: secret
129
+ description: Authentication secret or key reference.
130
+ - keyword: type
131
+ description: OSPF interface network type
132
+ detail: Define OSPF interface type such as broadcast, ptp, or nbma.
133
+ diff: same
134
+ version: v2+
135
+ anchor: proto-ospf
136
+ path:
137
+ - protocol.ospf.area.interface
138
+ - protocol.ospf.interface
139
+ - protocol.ospf.area.external
140
+ usage: type broadcast;
141
+ related:
142
+ - interface
143
+ - external
144
+ - keyword: rfc1583compat
145
+ description: RFC 1583 compatible routing
146
+ detail: Enable RFC 1583 compatible route table calculation for backward compatibility with older OSPF implementations.
147
+ diff: same
148
+ version: v2+
149
+ anchor: proto-ospf
150
+ path: protocol.ospf
151
+ related:
152
+ - ospf
153
+ parameters:
154
+ - name: switch
155
+ description: Enable or disable RFC 1583 compatibility (default no).
156
+ - keyword: stub router
157
+ description: OSPF stub router mode
158
+ detail: Configure the router as an OSPF stub router (RFC 6987), making transit traffic avoid this node.
159
+ diff: same
160
+ version: v2+
161
+ anchor: proto-ospf
162
+ path: protocol.ospf
163
+ related:
164
+ - ospf
165
+ parameters:
166
+ - name: switch
167
+ description: Enable stub router mode.
168
+ - keyword: tick
169
+ description: OSPF routing table recalculation timer
170
+ detail: Set the interval for periodic SPF recalculation and LSA database cleanup.
171
+ diff: same
172
+ version: v2+
173
+ anchor: proto-ospf
174
+ path: protocol.ospf
175
+ related:
176
+ - ospf
177
+ parameters:
178
+ - name: seconds
179
+ description: Timer interval in seconds (default 1).
180
+ - keyword: ecmp
181
+ description: OSPF equal-cost multipath
182
+ detail: Enable ECMP routing to distribute traffic across multiple equal-cost paths.
183
+ diff: same
184
+ version: v2+
185
+ anchor: proto-ospf
186
+ path: protocol.ospf
187
+ related:
188
+ - ecmp weight
189
+ - ospf
190
+ parameters:
191
+ - name: switch
192
+ description: Enable or disable ECMP.
193
+ - name: limit
194
+ description: Maximum number of ECMP next hops (default 16).
195
+ - keyword: merge external
196
+ description: Merge external OSPF routes
197
+ detail: Merge equal-cost external routes from different ASBR routers for ECMP.
198
+ diff: same
199
+ version: v2+
200
+ anchor: proto-ospf
201
+ path: protocol.ospf
202
+ related:
203
+ - ecmp
204
+ - ospf
205
+ parameters:
206
+ - name: switch
207
+ description: Enable merging of external routes (default no).
208
+ - keyword: instance id
209
+ description: OSPFv3 instance ID
210
+ detail: Set the OSPF instance identifier for running multiple OSPFv3 instances on the same link.
211
+ diff: same
212
+ version: v2+
213
+ anchor: proto-ospf
214
+ path: protocol.ospf
215
+ related:
216
+ - rfc5838
217
+ - ospf
218
+ parameters:
219
+ - name: number
220
+ description: Instance ID number (default 0).
221
+ - keyword: graceful restart
222
+ description: OSPF graceful restart
223
+ detail: Enable graceful restart capability for seamless OSPF recovery after failure.
224
+ diff: same
225
+ version: v2+
226
+ anchor: proto-ospf
227
+ path: protocol.ospf
228
+ related:
229
+ - graceful restart time
230
+ - ospf
231
+ parameters:
232
+ - name: mode
233
+ description: "Disable, enable, or set to aware mode (default aware)."
234
+ - keyword: graceful restart time
235
+ description: OSPF graceful restart timer
236
+ detail: Set the restart time advertised in Grace-LSA for OSPF graceful restart.
237
+ diff: same
238
+ version: v2+
239
+ anchor: proto-ospf
240
+ path: protocol.ospf
241
+ related:
242
+ - graceful restart
243
+ parameters:
244
+ - name: seconds
245
+ description: Restart time in seconds (default 120).
246
+ - keyword: stub
247
+ description: OSPF stub area
248
+ detail: Configure an OSPF area as a stub area, which does not receive external LSAs.
249
+ diff: same
250
+ version: v2+
251
+ anchor: proto-ospf
252
+ path: protocol.ospf.area
253
+ related:
254
+ - area
255
+ - nssa
256
+ - summary
257
+ - default cost
258
+ parameters:
259
+ - name: switch
260
+ description: Enable stub area mode.
261
+ - keyword: nssa
262
+ description: OSPF not-so-stubby area
263
+ detail: Configure an OSPF area as NSSA, allowing limited external route injection via type-7 LSAs.
264
+ diff: same
265
+ version: v2+
266
+ anchor: proto-ospf
267
+ path: protocol.ospf.area
268
+ related:
269
+ - area
270
+ - stub
271
+ - default nssa
272
+ - translator
273
+ - external
274
+ parameters:
275
+ - name: switch
276
+ description: Enable NSSA mode.
277
+ - keyword: summary
278
+ description: OSPF summary LSA control
279
+ detail: Control propagation of inter-area summary LSAs into stub or NSSA areas.
280
+ diff: same
281
+ version: v2+
282
+ anchor: proto-ospf
283
+ path: protocol.ospf.area
284
+ related:
285
+ - stub
286
+ - nssa
287
+ - area
288
+ parameters:
289
+ - name: switch
290
+ description: Enable or disable summary LSA injection (default no).
291
+ - keyword: default cost
292
+ description: OSPF stub/NSSA default route cost
293
+ detail: Set the cost of the default route injected into a stub or NSSA area.
294
+ diff: same
295
+ version: v2+
296
+ anchor: proto-ospf
297
+ path: protocol.ospf.area
298
+ related:
299
+ - stub
300
+ - nssa
301
+ - area
302
+ parameters:
303
+ - name: number
304
+ description: Default route cost metric (default 1000).
305
+ - keyword: default nssa
306
+ description: NSSA default route injection
307
+ detail: Enable injection of a default route into an NSSA area via a type-7 NSSA-LSA.
308
+ diff: same
309
+ version: v2+
310
+ anchor: proto-ospf
311
+ path: protocol.ospf.area
312
+ related:
313
+ - nssa
314
+ - default cost
315
+ - area
316
+ parameters:
317
+ - name: switch
318
+ description: Enable default NSSA route generation (default no).
319
+ - keyword: translator
320
+ description: NSSA translator mode
321
+ detail: Unconditionally translate type-7 NSSA-LSAs into type-5 external LSAs at the ABR.
322
+ diff: same
323
+ version: v2+
324
+ anchor: proto-ospf
325
+ path: protocol.ospf.area
326
+ related:
327
+ - nssa
328
+ - area
329
+ parameters:
330
+ - name: switch
331
+ description: Force NSSA translation (default no).
332
+ - keyword: networks
333
+ description: OSPF area network ranges
334
+ detail: Define IP ranges belonging to this OSPF area for summary LSA generation and aggregation.
335
+ diff: same
336
+ version: v2+
337
+ anchor: proto-ospf
338
+ path: protocol.ospf.area
339
+ related:
340
+ - area
341
+ - stubnet
342
+ - ospf
343
+ parameters:
344
+ - name: prefix
345
+ description: IP prefix ranges with optional hidden flag.
346
+ - keyword: stubnet
347
+ description: OSPF stub network
348
+ detail: Advertise a stub network into the OSPF domain without running OSPF on that interface.
349
+ diff: same
350
+ version: v2+
351
+ anchor: proto-ospf
352
+ path: protocol.ospf.area
353
+ related:
354
+ - networks
355
+ - area
356
+ parameters:
357
+ - name: prefix
358
+ description: Stub network IP prefix.
359
+ - name: cost
360
+ description: Metric for the stub network.
361
+ - keyword: virtual link
362
+ description: OSPF virtual link
363
+ detail: Create a virtual link through a transit area to connect a non-backbone area to area 0.
364
+ diff: same
365
+ version: v2+
366
+ anchor: proto-ospf
367
+ path: protocol.ospf.area
368
+ related:
369
+ - area
370
+ - ospf
371
+ parameters:
372
+ - name: router-id
373
+ description: Router ID of the remote ABR endpoint.
374
+ required: true
375
+ - keyword: priority
376
+ description: OSPF DR/BDR election priority
377
+ detail: Set the router priority for Designated Router and Backup DR election on this interface.
378
+ diff: same
379
+ version: v2+
380
+ anchor: proto-ospf
381
+ path:
382
+ - protocol.ospf.area.interface
383
+ - protocol.ospf.interface
384
+ related:
385
+ - interface
386
+ - type
387
+ parameters:
388
+ - name: number
389
+ description: Priority value (0 means not eligible, default 1).
390
+ - keyword: retransmit
391
+ description: OSPF retransmit interval
392
+ detail: Set the interval for retransmitting unacknowledged LSA updates.
393
+ diff: same
394
+ version: v2+
395
+ anchor: proto-ospf
396
+ path:
397
+ - protocol.ospf.area.interface
398
+ - protocol.ospf.interface
399
+ related:
400
+ - transmit delay
401
+ - interface
402
+ parameters:
403
+ - name: seconds
404
+ description: Retransmit interval in seconds (default 5).
405
+ - keyword: transmit delay
406
+ description: OSPF transmit delay
407
+ detail: Estimated time to transmit a link state update packet on this interface.
408
+ diff: same
409
+ version: v2+
410
+ anchor: proto-ospf
411
+ path:
412
+ - protocol.ospf.area.interface
413
+ - protocol.ospf.interface
414
+ related:
415
+ - retransmit
416
+ - interface
417
+ parameters:
418
+ - name: seconds
419
+ description: Transmit delay in seconds (default 1).
420
+ - keyword: wait
421
+ description: OSPF wait timer
422
+ detail: Time to wait after interface activation before electing a Designated Router.
423
+ diff: same
424
+ version: v2+
425
+ anchor: proto-ospf
426
+ path:
427
+ - protocol.ospf.area.interface
428
+ - protocol.ospf.interface
429
+ related:
430
+ - hello
431
+ - dead
432
+ - interface
433
+ parameters:
434
+ - name: seconds
435
+ description: Wait time in seconds (default 4 times hello interval).
436
+ - keyword: dead count
437
+ description: OSPF dead count multiplier
438
+ detail: Set neighbor dead interval as a multiple of the hello interval.
439
+ diff: same
440
+ version: v2+
441
+ anchor: proto-ospf
442
+ path:
443
+ - protocol.ospf.area.interface
444
+ - protocol.ospf.interface
445
+ related:
446
+ - dead
447
+ - hello
448
+ - interface
449
+ parameters:
450
+ - name: number
451
+ description: Dead count multiplier (default 4).
452
+ - keyword: poll
453
+ description: OSPF NBMA poll interval
454
+ detail: Hello interval for inactive NBMA neighbors, longer than the regular hello interval.
455
+ diff: same
456
+ version: v2+
457
+ anchor: proto-ospf
458
+ path:
459
+ - protocol.ospf.area.interface
460
+ - protocol.ospf.interface
461
+ related:
462
+ - hello
463
+ - type
464
+ - interface
465
+ parameters:
466
+ - name: seconds
467
+ description: Poll interval in seconds (default 20).
468
+ - keyword: bfd
469
+ description: Enable BFD for OSPF interface
470
+ detail: Use Bidirectional Forwarding Detection for fast neighbor failure detection on this OSPF interface.
471
+ diff: same
472
+ version: v2+
473
+ anchor: proto-ospf
474
+ path:
475
+ - protocol.ospf.area.interface
476
+ - protocol.ospf.interface
477
+ related:
478
+ - hello
479
+ - dead
480
+ - interface
481
+ parameters:
482
+ - name: switch
483
+ description: Enable BFD.
484
+ - keyword: authentication
485
+ description: OSPF interface authentication
486
+ detail: Configure authentication method for OSPF packets on this interface.
487
+ diff: same
488
+ version: v2+
489
+ anchor: proto-ospf
490
+ path:
491
+ - protocol.ospf.area.interface
492
+ - protocol.ospf.interface
493
+ related:
494
+ - password
495
+ - interface
496
+ parameters:
497
+ - name: method
498
+ description: "Authentication method: none, simple, or cryptographic."
499
+ - keyword: ecmp weight
500
+ description: OSPF ECMP weight
501
+ detail: Set the relative ECMP weight for this interface, controlling load distribution.
502
+ diff: same
503
+ version: v2+
504
+ anchor: proto-ospf
505
+ path:
506
+ - protocol.ospf.area.interface
507
+ - protocol.ospf.interface
508
+ related:
509
+ - ecmp
510
+ - interface
511
+ parameters:
512
+ - name: number
513
+ description: ECMP weight value (1-256, default 1).
514
+ - keyword: ttl security
515
+ description: OSPF TTL security
516
+ detail: Enable GTSM-like TTL protection for OSPF packets on this interface.
517
+ diff: same
518
+ version: v2+
519
+ anchor: proto-ospf
520
+ path:
521
+ - protocol.ospf.area.interface
522
+ - protocol.ospf.interface
523
+ related:
524
+ - interface
525
+ parameters:
526
+ - name: mode
527
+ description: "Enable TTL security: on, off, or tx only."
@@ -1,5 +1,9 @@
1
1
  export type HoverDocDiffType = "same" | "added" | "modified" | "removed";
2
2
  export type HoverDocVersionTag = "v2+" | "v3+" | "v2" | "v2-v3";
3
- export declare const HOVER_KEYWORD_DOCS: Record<string, string>;
3
+ export interface HoverDocResolutionOptions {
4
+ readonly contextPath?: readonly string[];
5
+ }
6
+ export declare const resolveHoverKeywordDoc: (keyword: string, options?: HoverDocResolutionOptions) => string | undefined;
4
7
  export declare const HOVER_KEYWORDS: readonly string[];
8
+ export declare const HOVER_KEYWORD_DOCS: Record<string, string>;
5
9
  //# sourceMappingURL=hover-docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hover-docs.d.ts","sourceRoot":"","sources":["../src/hover-docs.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;AAiNhE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAErD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAE3C,CAAC"}
1
+ {"version":3,"file":"hover-docs.d.ts","sourceRoot":"","sources":["../src/hover-docs.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;AA0EhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAgkBD,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,UAAU,yBAAyB,KAClC,MAAM,GAAG,SA8BX,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAE1C,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASrD,CAAC"}