@ticktockbent/rogue-ts 0.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/dist/armor.d.ts +18 -0
  4. package/dist/armor.d.ts.map +1 -0
  5. package/dist/armor.js +84 -0
  6. package/dist/armor.js.map +1 -0
  7. package/dist/chase.d.ts +15 -0
  8. package/dist/chase.d.ts.map +1 -0
  9. package/dist/chase.js +152 -0
  10. package/dist/chase.js.map +1 -0
  11. package/dist/command.d.ts +12 -0
  12. package/dist/command.d.ts.map +1 -0
  13. package/dist/command.js +761 -0
  14. package/dist/command.js.map +1 -0
  15. package/dist/curses.d.ts +102 -0
  16. package/dist/curses.d.ts.map +1 -0
  17. package/dist/curses.js +47 -0
  18. package/dist/curses.js.map +1 -0
  19. package/dist/daemon.d.ts +43 -0
  20. package/dist/daemon.d.ts.map +1 -0
  21. package/dist/daemon.js +116 -0
  22. package/dist/daemon.js.map +1 -0
  23. package/dist/daemons.d.ts +47 -0
  24. package/dist/daemons.d.ts.map +1 -0
  25. package/dist/daemons.js +194 -0
  26. package/dist/daemons.js.map +1 -0
  27. package/dist/fight.d.ts +52 -0
  28. package/dist/fight.d.ts.map +1 -0
  29. package/dist/fight.js +508 -0
  30. package/dist/fight.js.map +1 -0
  31. package/dist/globals.d.ts +387 -0
  32. package/dist/globals.d.ts.map +1 -0
  33. package/dist/globals.js +935 -0
  34. package/dist/globals.js.map +1 -0
  35. package/dist/index.d.ts +11 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +9 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/init.d.ts +30 -0
  40. package/dist/init.d.ts.map +1 -0
  41. package/dist/init.js +159 -0
  42. package/dist/init.js.map +1 -0
  43. package/dist/io.d.ts +48 -0
  44. package/dist/io.d.ts.map +1 -0
  45. package/dist/io.js +248 -0
  46. package/dist/io.js.map +1 -0
  47. package/dist/list.d.ts +37 -0
  48. package/dist/list.d.ts.map +1 -0
  49. package/dist/list.js +109 -0
  50. package/dist/list.js.map +1 -0
  51. package/dist/main.d.ts +23 -0
  52. package/dist/main.d.ts.map +1 -0
  53. package/dist/main.js +207 -0
  54. package/dist/main.js.map +1 -0
  55. package/dist/misc.d.ts +53 -0
  56. package/dist/misc.d.ts.map +1 -0
  57. package/dist/misc.js +296 -0
  58. package/dist/misc.js.map +1 -0
  59. package/dist/monsters.d.ts +55 -0
  60. package/dist/monsters.d.ts.map +1 -0
  61. package/dist/monsters.js +211 -0
  62. package/dist/monsters.js.map +1 -0
  63. package/dist/move.d.ts +23 -0
  64. package/dist/move.d.ts.map +1 -0
  65. package/dist/move.js +270 -0
  66. package/dist/move.js.map +1 -0
  67. package/dist/new_level.d.ts +17 -0
  68. package/dist/new_level.d.ts.map +1 -0
  69. package/dist/new_level.js +173 -0
  70. package/dist/new_level.js.map +1 -0
  71. package/dist/pack.d.ts +47 -0
  72. package/dist/pack.d.ts.map +1 -0
  73. package/dist/pack.js +359 -0
  74. package/dist/pack.js.map +1 -0
  75. package/dist/passages.d.ts +23 -0
  76. package/dist/passages.d.ts.map +1 -0
  77. package/dist/passages.js +277 -0
  78. package/dist/passages.js.map +1 -0
  79. package/dist/potions.d.ts +13 -0
  80. package/dist/potions.d.ts.map +1 -0
  81. package/dist/potions.js +239 -0
  82. package/dist/potions.js.map +1 -0
  83. package/dist/rings.d.ts +13 -0
  84. package/dist/rings.d.ts.map +1 -0
  85. package/dist/rings.js +173 -0
  86. package/dist/rings.js.map +1 -0
  87. package/dist/rip.d.ts +22 -0
  88. package/dist/rip.d.ts.map +1 -0
  89. package/dist/rip.js +216 -0
  90. package/dist/rip.js.map +1 -0
  91. package/dist/rooms.d.ts +62 -0
  92. package/dist/rooms.d.ts.map +1 -0
  93. package/dist/rooms.js +432 -0
  94. package/dist/rooms.js.map +1 -0
  95. package/dist/save.d.ts +25 -0
  96. package/dist/save.d.ts.map +1 -0
  97. package/dist/save.js +565 -0
  98. package/dist/save.js.map +1 -0
  99. package/dist/scrolls.d.ts +13 -0
  100. package/dist/scrolls.d.ts.map +1 -0
  101. package/dist/scrolls.js +305 -0
  102. package/dist/scrolls.js.map +1 -0
  103. package/dist/sticks.d.ts +9 -0
  104. package/dist/sticks.d.ts.map +1 -0
  105. package/dist/sticks.js +379 -0
  106. package/dist/sticks.js.map +1 -0
  107. package/dist/things.d.ts +28 -0
  108. package/dist/things.d.ts.map +1 -0
  109. package/dist/things.js +307 -0
  110. package/dist/things.js.map +1 -0
  111. package/dist/types.d.ts +113 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +10 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/util.d.ts +36 -0
  116. package/dist/util.d.ts.map +1 -0
  117. package/dist/util.js +198 -0
  118. package/dist/util.js.map +1 -0
  119. package/dist/weapons.d.ts +22 -0
  120. package/dist/weapons.d.ts.map +1 -0
  121. package/dist/weapons.js +185 -0
  122. package/dist/weapons.js.map +1 -0
  123. package/package.json +31 -0
package/dist/sticks.js ADDED
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Wand/Staff functions.
3
+ * Ported from sticks.c
4
+ */
5
+ import { state, STICK, ws_info, WS_LIGHT, WS_INVIS, WS_ELECT, WS_FIRE, WS_COLD, WS_POLYMORPH, WS_MISSILE, WS_HASTE_M, WS_SLOW_M, WS_DRAIN, WS_NOP, WS_TELAWAY, WS_TELTO, WS_CANCEL, NUMLINES, NUMCOLS, BOLT_LENGTH, ISDARK, ISGONE, ISRUN, ISHASTE, ISSLOW, ISINVIS, ISCANC, ISHUH, FLOOR, PASSAGE, DOOR, chat, moat, setMoat, monsters as monsterTemplates, } from "./globals.js";
6
+ import { rnd, roll } from "./util.js";
7
+ import { msg, getBackend } from "./io.js";
8
+ import { get_item } from "./pack.js";
9
+ import { get_dir, see_monst, cansee } from "./misc.js";
10
+ import { find_floor, roomin } from "./rooms.js";
11
+ import { randmonster, save_throw } from "./monsters.js";
12
+ /**
13
+ * do_zap: Zap a wand/staff in a direction.
14
+ */
15
+ export async function do_zap() {
16
+ if (!await get_dir())
17
+ return;
18
+ const obj = await get_item("zap", STICK.charCodeAt(0));
19
+ if (obj === null)
20
+ return;
21
+ if (obj.o_type !== STICK.charCodeAt(0)) {
22
+ await msg("you can't zap with that");
23
+ return;
24
+ }
25
+ if (obj.o_arm <= 0) { // charges
26
+ await msg("nothing happens");
27
+ return;
28
+ }
29
+ obj.o_arm--; // use a charge
30
+ switch (obj.o_which) {
31
+ case WS_LIGHT:
32
+ await ws_light();
33
+ break;
34
+ case WS_INVIS:
35
+ await ws_effect_on_monster(obj, (tp) => {
36
+ tp.t_flags |= ISINVIS;
37
+ if (cansee(tp.t_pos.y, tp.t_pos.x)) {
38
+ const backend = getBackend();
39
+ backend.mvaddch(tp.t_pos.y, tp.t_pos.x, tp.t_oldch.charCodeAt(0));
40
+ }
41
+ return "the monster seems to have disappeared";
42
+ });
43
+ break;
44
+ case WS_ELECT:
45
+ case WS_FIRE:
46
+ case WS_COLD:
47
+ await bolt(obj);
48
+ break;
49
+ case WS_POLYMORPH:
50
+ await ws_effect_on_monster(obj, (tp) => {
51
+ const newType = randmonster(false);
52
+ const monsterIndex = newType.charCodeAt(0) - "A".charCodeAt(0);
53
+ const mp = monsterTemplates[monsterIndex];
54
+ tp.t_type = newType;
55
+ tp.t_disguise = newType;
56
+ tp.t_stats.s_dmg = mp.m_stats.s_dmg;
57
+ tp.t_stats.s_hpt = roll(mp.m_stats.s_lvl, 8);
58
+ tp.t_stats.s_maxhp = tp.t_stats.s_hpt;
59
+ tp.t_stats.s_lvl = mp.m_stats.s_lvl;
60
+ tp.t_stats.s_arm = mp.m_stats.s_arm;
61
+ tp.t_stats.s_exp = mp.m_stats.s_exp;
62
+ // C original: tp->t_flags = mp->m_flags | ISRUN
63
+ tp.t_flags = mp.m_flags | ISRUN;
64
+ if (see_monst(tp)) {
65
+ const backend = getBackend();
66
+ backend.mvaddch(tp.t_pos.y, tp.t_pos.x, newType.charCodeAt(0));
67
+ }
68
+ return null; // no message
69
+ });
70
+ break;
71
+ case WS_MISSILE:
72
+ await missile(obj);
73
+ break;
74
+ case WS_HASTE_M:
75
+ await ws_effect_on_monster(obj, (tp) => {
76
+ tp.t_flags |= ISHASTE;
77
+ return "the monster starts moving faster";
78
+ });
79
+ break;
80
+ case WS_SLOW_M:
81
+ await ws_effect_on_monster(obj, (tp) => {
82
+ if (tp.t_flags & ISHASTE) {
83
+ tp.t_flags &= ~ISHASTE;
84
+ }
85
+ else {
86
+ tp.t_flags |= ISSLOW;
87
+ }
88
+ tp.t_turn = true;
89
+ return "the monster starts moving slower";
90
+ });
91
+ break;
92
+ case WS_DRAIN:
93
+ // Drain life — C original: halve player HP, then divide among room monsters
94
+ {
95
+ if (state.player.t_stats.s_hpt < 2) {
96
+ await msg("you are too weak to use it");
97
+ break;
98
+ }
99
+ // Count monsters in the same room
100
+ const playerRoom = state.player.t_room;
101
+ let cnt = 0;
102
+ let monsterItem = state.mlist;
103
+ while (monsterItem !== null) {
104
+ if (monsterItem._kind === "monster" && monsterItem.t_room === playerRoom) {
105
+ cnt++;
106
+ }
107
+ monsterItem = monsterItem.l_next;
108
+ }
109
+ if (cnt === 0) {
110
+ await msg("you have a tingling feeling");
111
+ break;
112
+ }
113
+ state.player.t_stats.s_hpt = Math.floor(state.player.t_stats.s_hpt / 2);
114
+ const drain = Math.floor(state.player.t_stats.s_hpt / cnt);
115
+ monsterItem = state.mlist;
116
+ while (monsterItem !== null) {
117
+ const next = monsterItem.l_next;
118
+ if (monsterItem._kind === "monster" && monsterItem.t_room === playerRoom) {
119
+ monsterItem.t_stats.s_hpt -= drain;
120
+ if (monsterItem.t_stats.s_hpt <= 0) {
121
+ const { killed } = await import("./fight.js");
122
+ await killed(monsterItem, true);
123
+ }
124
+ }
125
+ monsterItem = next;
126
+ }
127
+ }
128
+ break;
129
+ case WS_NOP:
130
+ await msg("nothing happens");
131
+ break;
132
+ case WS_TELAWAY:
133
+ await ws_effect_on_monster(obj, (tp) => {
134
+ const newPos = { y: 0, x: 0 };
135
+ if (find_floor(null, newPos, false, true)) {
136
+ const backend = getBackend();
137
+ if (see_monst(tp)) {
138
+ backend.mvaddch(tp.t_pos.y, tp.t_pos.x, tp.t_oldch.charCodeAt(0));
139
+ }
140
+ setMoat(tp.t_pos.y, tp.t_pos.x, null);
141
+ tp.t_pos.y = newPos.y;
142
+ tp.t_pos.x = newPos.x;
143
+ tp.t_room = roomin(tp.t_pos);
144
+ backend.move(newPos.y, newPos.x);
145
+ tp.t_oldch = String.fromCharCode(backend.inch() & 0xff);
146
+ setMoat(newPos.y, newPos.x, tp);
147
+ if (see_monst(tp)) {
148
+ backend.mvaddch(newPos.y, newPos.x, tp.t_disguise.charCodeAt(0));
149
+ }
150
+ }
151
+ return null;
152
+ });
153
+ break;
154
+ case WS_TELTO:
155
+ // Teleport monster to player
156
+ await ws_effect_on_monster(obj, (tp) => {
157
+ const heroPos = state.player.t_pos;
158
+ // Find an adjacent spot
159
+ for (let dy = -1; dy <= 1; dy++) {
160
+ for (let dx = -1; dx <= 1; dx++) {
161
+ if (dy === 0 && dx === 0)
162
+ continue;
163
+ const ny = heroPos.y + dy;
164
+ const nx = heroPos.x + dx;
165
+ if (ny <= 0 || ny >= NUMLINES - 1 || nx < 0 || nx >= NUMCOLS)
166
+ continue;
167
+ const ch = chat(ny, nx);
168
+ if ((ch === FLOOR || ch === PASSAGE || ch === DOOR) && moat(ny, nx) === null) {
169
+ const backend = getBackend();
170
+ if (see_monst(tp)) {
171
+ backend.mvaddch(tp.t_pos.y, tp.t_pos.x, tp.t_oldch.charCodeAt(0));
172
+ }
173
+ setMoat(tp.t_pos.y, tp.t_pos.x, null);
174
+ tp.t_pos.y = ny;
175
+ tp.t_pos.x = nx;
176
+ tp.t_room = roomin(tp.t_pos);
177
+ backend.move(ny, nx);
178
+ tp.t_oldch = String.fromCharCode(backend.inch() & 0xff);
179
+ setMoat(ny, nx, tp);
180
+ if (see_monst(tp)) {
181
+ backend.mvaddch(ny, nx, tp.t_disguise.charCodeAt(0));
182
+ }
183
+ return null;
184
+ }
185
+ }
186
+ }
187
+ return null;
188
+ });
189
+ break;
190
+ case WS_CANCEL:
191
+ await ws_effect_on_monster(obj, (tp) => {
192
+ tp.t_flags |= ISCANC;
193
+ tp.t_flags &= ~(ISINVIS | ISHUH);
194
+ tp.t_disguise = tp.t_type;
195
+ if (see_monst(tp)) {
196
+ const backend = getBackend();
197
+ backend.mvaddch(tp.t_pos.y, tp.t_pos.x, tp.t_type.charCodeAt(0));
198
+ }
199
+ return null;
200
+ });
201
+ break;
202
+ }
203
+ ws_info[obj.o_which].oi_know = true;
204
+ }
205
+ /**
206
+ * ws_light: Light up the room or show passage.
207
+ */
208
+ async function ws_light() {
209
+ const playerRoom = state.player.t_room;
210
+ if (playerRoom === null) {
211
+ await msg("the corridor glows and then fades");
212
+ return;
213
+ }
214
+ if (playerRoom.r_flags & ISGONE) {
215
+ await msg("the corridor glows and then fades");
216
+ return;
217
+ }
218
+ playerRoom.r_flags &= ~ISDARK;
219
+ const backend = getBackend();
220
+ // Light up the room
221
+ for (let y = playerRoom.r_pos.y; y < playerRoom.r_pos.y + playerRoom.r_max.y; y++) {
222
+ for (let x = playerRoom.r_pos.x; x < playerRoom.r_pos.x + playerRoom.r_max.x; x++) {
223
+ if (y < 0 || y >= NUMLINES || x < 0 || x >= NUMCOLS)
224
+ continue;
225
+ const ch = chat(y, x);
226
+ const mon = moat(y, x);
227
+ if (mon !== null && mon._kind === "monster") {
228
+ if (see_monst(mon)) {
229
+ backend.mvaddch(y, x, mon.t_disguise.charCodeAt(0));
230
+ }
231
+ }
232
+ else if (ch !== " ") {
233
+ backend.mvaddch(y, x, ch.charCodeAt(0));
234
+ }
235
+ }
236
+ }
237
+ await msg("the room is lit by a shimmering %s light", rnd(2) === 0 ? "blue" : "gold");
238
+ }
239
+ /**
240
+ * ws_effect_on_monster: Find a monster in the zap direction and apply an effect.
241
+ */
242
+ async function ws_effect_on_monster(obj, effect) {
243
+ // Trace from hero in the direction
244
+ let y = state.player.t_pos.y;
245
+ let x = state.player.t_pos.x;
246
+ for (;;) {
247
+ y += state.delta.y;
248
+ x += state.delta.x;
249
+ if (y <= 0 || y >= NUMLINES - 1 || x < 0 || x >= NUMCOLS)
250
+ break;
251
+ const ch = chat(y, x);
252
+ if (ch === " " || ch === "|" || ch === "-")
253
+ break;
254
+ const tp = moat(y, x);
255
+ if (tp !== null && tp._kind === "monster") {
256
+ const msgText = effect(tp);
257
+ if (msgText !== null) {
258
+ await msg(msgText);
259
+ }
260
+ return;
261
+ }
262
+ }
263
+ await msg("the bolt vanishes with a puff of smoke");
264
+ }
265
+ /**
266
+ * missile: Fire a magic missile using roll_em for damage.
267
+ * C original: creates a temporary Thing with "1x4" damage and uses fight system.
268
+ */
269
+ async function missile(obj) {
270
+ let y = state.player.t_pos.y;
271
+ let x = state.player.t_pos.x;
272
+ for (;;) {
273
+ y += state.delta.y;
274
+ x += state.delta.x;
275
+ if (y <= 0 || y >= NUMLINES - 1 || x < 0 || x >= NUMCOLS)
276
+ break;
277
+ const ch = chat(y, x);
278
+ if (ch === " " || ch === "|" || ch === "-")
279
+ break;
280
+ const tp = moat(y, x);
281
+ if (tp !== null && tp._kind === "monster") {
282
+ // C original: uses roll_em with "1x4" damage string
283
+ const damage = roll(1, 4);
284
+ if (!save_throw(3, tp)) {
285
+ tp.t_stats.s_hpt -= damage;
286
+ if (tp.t_stats.s_hpt <= 0) {
287
+ const { killed } = await import("./fight.js");
288
+ await killed(tp, true);
289
+ }
290
+ else {
291
+ await msg("the missile hits the monster");
292
+ }
293
+ }
294
+ else {
295
+ await msg("the missile misses the monster");
296
+ }
297
+ return;
298
+ }
299
+ }
300
+ await msg("the missile vanishes with a puff of smoke");
301
+ }
302
+ /**
303
+ * bolt: Fire a bolt (lightning, fire, cold) in a direction.
304
+ * C original: bolt bounces off walls by reversing direction.
305
+ */
306
+ async function bolt(obj) {
307
+ let y = state.player.t_pos.y;
308
+ let x = state.player.t_pos.x;
309
+ let dirY = state.delta.y;
310
+ let dirX = state.delta.x;
311
+ let bounced = false;
312
+ const boltName = ws_info[obj.o_which]?.oi_name || "bolt";
313
+ for (let i = 0; i < BOLT_LENGTH; i++) {
314
+ y += dirY;
315
+ x += dirX;
316
+ if (y <= 0 || y >= NUMLINES - 1 || x < 0 || x >= NUMCOLS) {
317
+ // Bounce off edge
318
+ if (!bounced) {
319
+ bounced = true;
320
+ dirY = -dirY;
321
+ dirX = -dirX;
322
+ y += dirY;
323
+ x += dirX;
324
+ continue;
325
+ }
326
+ break;
327
+ }
328
+ const ch = chat(y, x);
329
+ if (ch === " " || ch === "|" || ch === "-") {
330
+ // Bounce off wall
331
+ if (!bounced) {
332
+ bounced = true;
333
+ dirY = -dirY;
334
+ dirX = -dirX;
335
+ y += dirY;
336
+ x += dirX;
337
+ continue;
338
+ }
339
+ break;
340
+ }
341
+ // Check if bolt hits the player (bounced bolt)
342
+ if (y === state.player.t_pos.y && x === state.player.t_pos.x) {
343
+ const damage = roll(6, 6);
344
+ if (!save_throw(3, state.player)) {
345
+ state.player.t_stats.s_hpt -= damage;
346
+ await msg("your own bolt of %s hits you", boltName);
347
+ if (state.player.t_stats.s_hpt <= 0) {
348
+ const { death } = await import("./rip.js");
349
+ await death("b");
350
+ }
351
+ }
352
+ else {
353
+ await msg("your bolt of %s whizzes by you", boltName);
354
+ }
355
+ return;
356
+ }
357
+ const tp = moat(y, x);
358
+ if (tp !== null && tp._kind === "monster") {
359
+ const damage = roll(6, 6);
360
+ if (!save_throw(3, tp)) {
361
+ tp.t_stats.s_hpt -= damage;
362
+ if (tp.t_stats.s_hpt <= 0) {
363
+ const { killed } = await import("./fight.js");
364
+ await killed(tp, true);
365
+ }
366
+ else {
367
+ await msg("the bolt of %s hits the monster", boltName);
368
+ }
369
+ }
370
+ else {
371
+ await msg("the bolt of %s barely misses the monster", boltName);
372
+ }
373
+ return;
374
+ }
375
+ }
376
+ // Bolt fizzled without hitting anything
377
+ await msg("the bolt of %s bounces off the wall", boltName);
378
+ }
379
+ //# sourceMappingURL=sticks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sticks.js","sourceRoot":"","sources":["../src/sticks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Item creation and naming.
3
+ * Ported from things.c
4
+ */
5
+ import type { GameObj, ObjInfo } from "./types.js";
6
+ /**
7
+ * pick_one: Pick an item out of a list of nitems possible objects.
8
+ * Uses cumulative probability (after init_probs has been called).
9
+ */
10
+ export declare function pick_one(info: ObjInfo[], nitems: number): number;
11
+ /**
12
+ * new_thing: Return a new thing.
13
+ */
14
+ export declare function new_thing(): GameObj;
15
+ /**
16
+ * fix_stick: Set up stick charges.
17
+ */
18
+ export declare function fix_stick(cur: GameObj): void;
19
+ /**
20
+ * inv_name: Return the name of something as it would appear in inventory.
21
+ * Simplified for now — full implementation in Phase 7.
22
+ */
23
+ export declare function inv_name(obj: GameObj, drop: boolean): string;
24
+ /**
25
+ * vowelstr: Return "An" or "A" depending on whether the string starts with a vowel.
26
+ */
27
+ export declare function vowelstr(str: string): string;
28
+ //# sourceMappingURL=things.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"things.d.ts","sourceRoot":"","sources":["../src/things.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAS,MAAM,YAAY,CAAC;AAc1D;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAShE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAgFnC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAiB5C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CA6I5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM5C"}