d2r-saver 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 (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +126 -0
  3. package/data/data.json +1 -0
  4. package/data/strings.json +1 -0
  5. package/dist/core/binary-reader.d.ts +43 -0
  6. package/dist/core/binary-reader.d.ts.map +1 -0
  7. package/dist/core/binary-reader.js +130 -0
  8. package/dist/core/binary-reader.js.map +1 -0
  9. package/dist/core/binary-writer.d.ts +49 -0
  10. package/dist/core/binary-writer.d.ts.map +1 -0
  11. package/dist/core/binary-writer.js +156 -0
  12. package/dist/core/binary-writer.js.map +1 -0
  13. package/dist/core/checksum.d.ts +28 -0
  14. package/dist/core/checksum.d.ts.map +1 -0
  15. package/dist/core/checksum.js +62 -0
  16. package/dist/core/checksum.js.map +1 -0
  17. package/dist/core/huffman.d.ts +22 -0
  18. package/dist/core/huffman.d.ts.map +1 -0
  19. package/dist/core/huffman.js +66 -0
  20. package/dist/core/huffman.js.map +1 -0
  21. package/dist/core/index.d.ts +5 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/index.js +5 -0
  24. package/dist/core/index.js.map +1 -0
  25. package/dist/formats/d2i-reader.d.ts +53 -0
  26. package/dist/formats/d2i-reader.d.ts.map +1 -0
  27. package/dist/formats/d2i-reader.js +208 -0
  28. package/dist/formats/d2i-reader.js.map +1 -0
  29. package/dist/formats/d2i-writer.d.ts +63 -0
  30. package/dist/formats/d2i-writer.d.ts.map +1 -0
  31. package/dist/formats/d2i-writer.js +229 -0
  32. package/dist/formats/d2i-writer.js.map +1 -0
  33. package/dist/formats/d2s-reader.d.ts +104 -0
  34. package/dist/formats/d2s-reader.d.ts.map +1 -0
  35. package/dist/formats/d2s-reader.js +257 -0
  36. package/dist/formats/d2s-reader.js.map +1 -0
  37. package/dist/formats/d2s-writer.d.ts +52 -0
  38. package/dist/formats/d2s-writer.d.ts.map +1 -0
  39. package/dist/formats/d2s-writer.js +407 -0
  40. package/dist/formats/d2s-writer.js.map +1 -0
  41. package/dist/formats/detect.d.ts +18 -0
  42. package/dist/formats/detect.d.ts.map +1 -0
  43. package/dist/formats/detect.js +40 -0
  44. package/dist/formats/detect.js.map +1 -0
  45. package/dist/formats/index.d.ts +8 -0
  46. package/dist/formats/index.d.ts.map +1 -0
  47. package/dist/formats/index.js +8 -0
  48. package/dist/formats/index.js.map +1 -0
  49. package/dist/formats/item-parser.d.ts +97 -0
  50. package/dist/formats/item-parser.d.ts.map +1 -0
  51. package/dist/formats/item-parser.js +627 -0
  52. package/dist/formats/item-parser.js.map +1 -0
  53. package/dist/formats/item-writer.d.ts +55 -0
  54. package/dist/formats/item-writer.d.ts.map +1 -0
  55. package/dist/formats/item-writer.js +514 -0
  56. package/dist/formats/item-writer.js.map +1 -0
  57. package/dist/game-data/game-data.d.ts +90 -0
  58. package/dist/game-data/game-data.d.ts.map +1 -0
  59. package/dist/game-data/game-data.js +355 -0
  60. package/dist/game-data/game-data.js.map +1 -0
  61. package/dist/game-data/index.d.ts +4 -0
  62. package/dist/game-data/index.d.ts.map +1 -0
  63. package/dist/game-data/index.js +3 -0
  64. package/dist/game-data/index.js.map +1 -0
  65. package/dist/game-data/loader.d.ts +23 -0
  66. package/dist/game-data/loader.d.ts.map +1 -0
  67. package/dist/game-data/loader.js +32 -0
  68. package/dist/game-data/loader.js.map +1 -0
  69. package/dist/game-data/types.d.ts +428 -0
  70. package/dist/game-data/types.d.ts.map +1 -0
  71. package/dist/game-data/types.js +10 -0
  72. package/dist/game-data/types.js.map +1 -0
  73. package/dist/index.d.ts +166 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +197 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/inventory/dimensions.d.ts +42 -0
  78. package/dist/inventory/dimensions.d.ts.map +1 -0
  79. package/dist/inventory/dimensions.js +30 -0
  80. package/dist/inventory/dimensions.js.map +1 -0
  81. package/dist/inventory/grid.d.ts +53 -0
  82. package/dist/inventory/grid.d.ts.map +1 -0
  83. package/dist/inventory/grid.js +117 -0
  84. package/dist/inventory/grid.js.map +1 -0
  85. package/dist/inventory/index.d.ts +4 -0
  86. package/dist/inventory/index.d.ts.map +1 -0
  87. package/dist/inventory/index.js +4 -0
  88. package/dist/inventory/index.js.map +1 -0
  89. package/dist/inventory/placement.d.ts +68 -0
  90. package/dist/inventory/placement.d.ts.map +1 -0
  91. package/dist/inventory/placement.js +90 -0
  92. package/dist/inventory/placement.js.map +1 -0
  93. package/dist/items/index.d.ts +7 -0
  94. package/dist/items/index.d.ts.map +1 -0
  95. package/dist/items/index.js +7 -0
  96. package/dist/items/index.js.map +1 -0
  97. package/dist/items/item-dto.d.ts +47 -0
  98. package/dist/items/item-dto.d.ts.map +1 -0
  99. package/dist/items/item-dto.js +124 -0
  100. package/dist/items/item-dto.js.map +1 -0
  101. package/dist/items/item-icon.d.ts +27 -0
  102. package/dist/items/item-icon.d.ts.map +1 -0
  103. package/dist/items/item-icon.js +103 -0
  104. package/dist/items/item-icon.js.map +1 -0
  105. package/dist/items/item-serializer.d.ts +38 -0
  106. package/dist/items/item-serializer.d.ts.map +1 -0
  107. package/dist/items/item-serializer.js +92 -0
  108. package/dist/items/item-serializer.js.map +1 -0
  109. package/dist/items/item-stats-parser.d.ts +52 -0
  110. package/dist/items/item-stats-parser.d.ts.map +1 -0
  111. package/dist/items/item-stats-parser.js +671 -0
  112. package/dist/items/item-stats-parser.js.map +1 -0
  113. package/dist/items/item-types.d.ts +40 -0
  114. package/dist/items/item-types.d.ts.map +1 -0
  115. package/dist/items/item-types.js +198 -0
  116. package/dist/items/item-types.js.map +1 -0
  117. package/dist/items/item.d.ts +61 -0
  118. package/dist/items/item.d.ts.map +1 -0
  119. package/dist/items/item.js +335 -0
  120. package/dist/items/item.js.map +1 -0
  121. package/dist/operations/extract-item.d.ts +39 -0
  122. package/dist/operations/extract-item.d.ts.map +1 -0
  123. package/dist/operations/extract-item.js +204 -0
  124. package/dist/operations/extract-item.js.map +1 -0
  125. package/dist/operations/index.d.ts +4 -0
  126. package/dist/operations/index.d.ts.map +1 -0
  127. package/dist/operations/index.js +4 -0
  128. package/dist/operations/index.js.map +1 -0
  129. package/dist/operations/insert-item.d.ts +59 -0
  130. package/dist/operations/insert-item.d.ts.map +1 -0
  131. package/dist/operations/insert-item.js +210 -0
  132. package/dist/operations/insert-item.js.map +1 -0
  133. package/dist/operations/read-save.d.ts +25 -0
  134. package/dist/operations/read-save.d.ts.map +1 -0
  135. package/dist/operations/read-save.js +27 -0
  136. package/dist/operations/read-save.js.map +1 -0
  137. package/dist/types/constants.d.ts +76 -0
  138. package/dist/types/constants.d.ts.map +1 -0
  139. package/dist/types/constants.js +96 -0
  140. package/dist/types/constants.js.map +1 -0
  141. package/dist/types/errors.d.ts +47 -0
  142. package/dist/types/errors.d.ts.map +1 -0
  143. package/dist/types/errors.js +53 -0
  144. package/dist/types/errors.js.map +1 -0
  145. package/dist/types/index.d.ts +5 -0
  146. package/dist/types/index.d.ts.map +1 -0
  147. package/dist/types/index.js +3 -0
  148. package/dist/types/index.js.map +1 -0
  149. package/dist/types/item.d.ts +112 -0
  150. package/dist/types/item.d.ts.map +1 -0
  151. package/dist/types/item.js +6 -0
  152. package/dist/types/item.js.map +1 -0
  153. package/dist/types/save-file.d.ts +74 -0
  154. package/dist/types/save-file.d.ts.map +1 -0
  155. package/dist/types/save-file.js +5 -0
  156. package/dist/types/save-file.js.map +1 -0
  157. package/dist/types/trade-item.d.ts +37 -0
  158. package/dist/types/trade-item.d.ts.map +1 -0
  159. package/dist/types/trade-item.js +5 -0
  160. package/dist/types/trade-item.js.map +1 -0
  161. package/package.json +70 -0
@@ -0,0 +1,428 @@
1
+ /**
2
+ * TypeScript types for the game data tables loaded from data.json / strings.json.
3
+ *
4
+ * These types describe the shape of entries in the ~45 data tables
5
+ * that d2planner produces from Blizzless game files.
6
+ *
7
+ * Note: many fields are optional because the TSV source is sparse.
8
+ */
9
+ /** Common fields shared by armor, weapons, and misc items. */
10
+ export interface BaseItemEntry {
11
+ name: string;
12
+ code: string;
13
+ namestr: string;
14
+ invfile: string;
15
+ uniqueinvfile?: string;
16
+ setinvfile?: string;
17
+ type: string;
18
+ spawnable: number;
19
+ version: number;
20
+ level: number;
21
+ levelreq: number;
22
+ cost: number;
23
+ invwidth: number;
24
+ invheight: number;
25
+ hasinv: number;
26
+ gemsockets: number;
27
+ gemapplytype: number;
28
+ bitfield1: number;
29
+ unique: number;
30
+ invtrans: number;
31
+ skipname?: number;
32
+ hd: string;
33
+ nodurability?: number;
34
+ durability?: number;
35
+ stackable?: number;
36
+ minstack?: number;
37
+ maxstack?: number;
38
+ autoprefix?: number;
39
+ quest?: number;
40
+ }
41
+ export interface ArmorEntry extends BaseItemEntry {
42
+ normcode: string;
43
+ ubercode: string;
44
+ ultracode: string;
45
+ speed: number;
46
+ minac: number;
47
+ maxac: number;
48
+ reqstr: number;
49
+ block: number;
50
+ belt?: number;
51
+ mindam?: number;
52
+ maxdam?: number;
53
+ strbonus?: number;
54
+ gamblecost?: number;
55
+ }
56
+ export interface WeaponEntry extends BaseItemEntry {
57
+ normcode: string;
58
+ ubercode: string;
59
+ ultracode: string;
60
+ wclass: string;
61
+ '2handedwclass'?: string;
62
+ mindam: number;
63
+ maxdam: number;
64
+ '2handmindam'?: number;
65
+ '2handmaxdam'?: number;
66
+ minmisdam?: number;
67
+ maxmisdam?: number;
68
+ strbonus?: number;
69
+ speed?: number;
70
+ rangeadder?: number;
71
+ reqstr?: number;
72
+ reqdex?: number;
73
+ missiletype?: number;
74
+ '1or2handed'?: number;
75
+ '2handed'?: number;
76
+ gamblecost?: number;
77
+ }
78
+ export interface MiscEntry extends BaseItemEntry {
79
+ stat1?: string;
80
+ stat2?: string;
81
+ calc1?: number;
82
+ calc2?: number;
83
+ belt?: number;
84
+ useable?: number;
85
+ spelldesc?: string;
86
+ spelldesccalc?: string;
87
+ spelldescstr?: string;
88
+ }
89
+ /** Unified item entry — union of all three base item categories. */
90
+ export type ItemEntry = ArmorEntry | WeaponEntry | MiscEntry;
91
+ export interface ItemStatCostEntry {
92
+ id: number;
93
+ stat?: string;
94
+ descstrpos?: string;
95
+ descstrneg?: string;
96
+ descstr2?: string;
97
+ descpriority: number;
98
+ descfunc?: number;
99
+ descval?: number;
100
+ savebits: number;
101
+ saveadd: number;
102
+ saveparambits?: number;
103
+ csvbits?: number;
104
+ add?: number;
105
+ multiply?: number;
106
+ damagerelated?: number;
107
+ op?: number;
108
+ opbase?: string;
109
+ opparam?: number;
110
+ opstat1?: string;
111
+ opstat2?: string;
112
+ opstat3?: string;
113
+ encode?: number;
114
+ [key: string]: unknown;
115
+ }
116
+ export interface ItemTypeEntry {
117
+ equiv1?: string;
118
+ equiv2?: string;
119
+ bodyloc1?: string;
120
+ bodyloc2?: string;
121
+ body: number;
122
+ throwable: number;
123
+ rare: number;
124
+ normal: number;
125
+ magic?: number;
126
+ beltable: number;
127
+ maxsock1: number;
128
+ maxsock25: number;
129
+ maxsock40: number;
130
+ varinvgfx: number;
131
+ treasureclass: number;
132
+ staffmods?: string;
133
+ class?: string;
134
+ shoots?: string;
135
+ quiver?: string;
136
+ invgfx1?: string;
137
+ invgfx2?: string;
138
+ invgfx3?: string;
139
+ invgfx4?: string;
140
+ invgfx5?: string;
141
+ invgfx6?: string;
142
+ [key: string]: unknown;
143
+ }
144
+ export interface UniqueItemEntry {
145
+ index: string;
146
+ code: string;
147
+ invfile?: string;
148
+ invtransform?: number;
149
+ hd: string;
150
+ version: number;
151
+ lvl: number;
152
+ lvlreq: number;
153
+ enabled: number;
154
+ rarity: number;
155
+ costmult?: number;
156
+ costadd?: number;
157
+ carry?: number;
158
+ [key: string]: unknown;
159
+ }
160
+ export interface SetItemEntry {
161
+ index: string;
162
+ set: string;
163
+ item: string;
164
+ invtransform?: number;
165
+ hd: string;
166
+ lvl: number;
167
+ lvlreq: number;
168
+ costmult?: number;
169
+ costadd?: number;
170
+ rarity?: number;
171
+ addfunc?: number;
172
+ [key: string]: unknown;
173
+ }
174
+ export interface SetEntry {
175
+ index: string;
176
+ name: string;
177
+ version: number;
178
+ [key: string]: unknown;
179
+ }
180
+ export interface RunewordEntry {
181
+ name: string;
182
+ itype1?: string;
183
+ itype2?: string;
184
+ itype3?: string;
185
+ etype1?: string;
186
+ etype2?: string;
187
+ rune1?: string;
188
+ rune2?: string;
189
+ rune3?: string;
190
+ rune4?: string;
191
+ rune5?: string;
192
+ rune6?: string;
193
+ [key: string]: unknown;
194
+ }
195
+ export interface MagicAffixEntry {
196
+ name: string;
197
+ version: number;
198
+ rare?: number;
199
+ level: number;
200
+ levelreq: number;
201
+ group?: number;
202
+ multiply?: number;
203
+ add?: number;
204
+ frequency?: number;
205
+ classspecific?: string;
206
+ class?: string;
207
+ classlevelreq?: number;
208
+ transformcolor?: number;
209
+ itype1?: string;
210
+ itype2?: string;
211
+ itype3?: string;
212
+ itype4?: string;
213
+ itype5?: string;
214
+ itype6?: string;
215
+ itype7?: string;
216
+ etype1?: string;
217
+ etype2?: string;
218
+ etype3?: string;
219
+ etype4?: string;
220
+ etype5?: string;
221
+ mod1code?: string;
222
+ mod1param?: number;
223
+ mod1min?: number;
224
+ mod1max?: number;
225
+ mod2code?: string;
226
+ mod2param?: number;
227
+ mod2min?: number;
228
+ mod2max?: number;
229
+ mod3code?: string;
230
+ mod3param?: number;
231
+ mod3min?: number;
232
+ mod3max?: number;
233
+ [key: string]: unknown;
234
+ }
235
+ export interface GemEntry {
236
+ transform?: number;
237
+ weaponmod1code?: string;
238
+ weaponmod1param?: number;
239
+ weaponmod1min?: number;
240
+ weaponmod1max?: number;
241
+ weaponmod2code?: string;
242
+ weaponmod2param?: number;
243
+ weaponmod2min?: number;
244
+ weaponmod2max?: number;
245
+ weaponmod3code?: string;
246
+ weaponmod3param?: number;
247
+ weaponmod3min?: number;
248
+ weaponmod3max?: number;
249
+ helmmod1code?: string;
250
+ helmmod1param?: number;
251
+ helmmod1min?: number;
252
+ helmmod1max?: number;
253
+ helmmod2code?: string;
254
+ helmmod2param?: number;
255
+ helmmod2min?: number;
256
+ helmmod2max?: number;
257
+ helmmod3code?: string;
258
+ helmmod3param?: number;
259
+ helmmod3min?: number;
260
+ helmmod3max?: number;
261
+ shieldmod1code?: string;
262
+ shieldmod1param?: number;
263
+ shieldmod1min?: number;
264
+ shieldmod1max?: number;
265
+ shieldmod2code?: string;
266
+ shieldmod2param?: number;
267
+ shieldmod2min?: number;
268
+ shieldmod2max?: number;
269
+ shieldmod3code?: string;
270
+ shieldmod3param?: number;
271
+ shieldmod3min?: number;
272
+ shieldmod3max?: number;
273
+ [key: string]: unknown;
274
+ }
275
+ export interface SkillEntry {
276
+ id: number;
277
+ skill: string;
278
+ skilldesc?: string;
279
+ charclass?: string;
280
+ reqlevel?: number;
281
+ reqskill1?: string;
282
+ reqskill2?: string;
283
+ passive?: number;
284
+ aura?: number;
285
+ [key: string]: unknown;
286
+ }
287
+ export interface PropertyEntry {
288
+ stat1?: string;
289
+ stat2?: string;
290
+ stat3?: string;
291
+ stat4?: string;
292
+ stat5?: string;
293
+ stat6?: string;
294
+ stat7?: string;
295
+ func1?: number;
296
+ func2?: number;
297
+ func3?: number;
298
+ func4?: number;
299
+ func5?: number;
300
+ func6?: number;
301
+ func7?: number;
302
+ set1?: number;
303
+ val1?: number;
304
+ [key: string]: unknown;
305
+ }
306
+ export interface StateEntry {
307
+ id: number;
308
+ state: string;
309
+ group?: number;
310
+ aura?: number;
311
+ curse?: number;
312
+ restrict?: number;
313
+ [key: string]: unknown;
314
+ }
315
+ export interface MonsterEntry {
316
+ hcidx: number;
317
+ [key: string]: unknown;
318
+ }
319
+ export interface MissileEntry {
320
+ missile: string;
321
+ [key: string]: unknown;
322
+ }
323
+ export interface HirelingEntry {
324
+ [key: string]: unknown;
325
+ }
326
+ export interface CharStatEntry {
327
+ str: number;
328
+ dex: number;
329
+ int: number;
330
+ vit: number;
331
+ [key: string]: unknown;
332
+ }
333
+ export interface RareAffixEntry {
334
+ name: string;
335
+ itype1?: string;
336
+ itype2?: string;
337
+ itype3?: string;
338
+ itype4?: string;
339
+ itype5?: string;
340
+ itype6?: string;
341
+ itype7?: string;
342
+ [key: string]: unknown;
343
+ }
344
+ export interface QualityItemEntry {
345
+ [key: string]: unknown;
346
+ }
347
+ export interface ExperienceEntry {
348
+ [key: string]: unknown;
349
+ }
350
+ export interface BeltEntry {
351
+ [key: string]: unknown;
352
+ }
353
+ /**
354
+ * A property group entry — represents a set of randomly-picked properties
355
+ * (e.g. "skilltab-war" picks a random Warlock skill tab to grant).
356
+ *
357
+ * The group is expanded at load time into `mods["<name>:1"]`,
358
+ * `mods["<name>:2"]`, ..., one per concrete option.
359
+ */
360
+ export interface PropertyGroupEntry {
361
+ pickmode?: number;
362
+ [key: string]: unknown;
363
+ }
364
+ export interface UniqueModEntry {
365
+ weight?: number;
366
+ mod?: string;
367
+ uniquemod?: string;
368
+ [key: string]: unknown;
369
+ }
370
+ export interface SuperUniqueEntry {
371
+ class?: string;
372
+ mod1?: string;
373
+ mod2?: string;
374
+ mod3?: string;
375
+ [key: string]: unknown;
376
+ }
377
+ export interface GridDimensions {
378
+ rows: number;
379
+ columns: number;
380
+ }
381
+ export interface GameInfo {
382
+ inventory: GridDimensions;
383
+ cube: GridDimensions;
384
+ stash?: GridDimensions;
385
+ options?: {
386
+ etherealBug?: boolean;
387
+ setUpgrade?: boolean;
388
+ };
389
+ legacyFormat?: boolean;
390
+ patch?: boolean;
391
+ }
392
+ /** The raw structure of data.json before processing. */
393
+ export interface RawGameData {
394
+ armor: Record<string, ArmorEntry>;
395
+ weapons: Record<string, WeaponEntry>;
396
+ misc: Record<string, MiscEntry>;
397
+ itemStatCost: Record<string, ItemStatCostEntry>;
398
+ itemTypes: Record<string, ItemTypeEntry>;
399
+ uniqueItems: Record<string, UniqueItemEntry>;
400
+ setItems: Record<string, SetItemEntry>;
401
+ sets: Record<string, SetEntry>;
402
+ runes: Record<string, RunewordEntry>;
403
+ magicPrefix: Record<string, MagicAffixEntry>;
404
+ magicSuffix: Record<string, MagicAffixEntry>;
405
+ autoMagic: Record<string, MagicAffixEntry>;
406
+ crafted: Record<string, MagicAffixEntry>;
407
+ qualityItems: Record<string, QualityItemEntry>;
408
+ gems: Record<string, GemEntry>;
409
+ skills: Record<string, SkillEntry>;
410
+ properties: Record<string, PropertyEntry>;
411
+ states: Record<string, StateEntry>;
412
+ monsters: Record<string, MonsterEntry>;
413
+ monstersEx: Record<string, MonsterEntry>;
414
+ missiles: Record<string, MissileEntry>;
415
+ hireling: Record<string, HirelingEntry>;
416
+ charStats: Record<string, CharStatEntry>;
417
+ rarePrefix: Record<string, RareAffixEntry>;
418
+ rareSuffix: Record<string, RareAffixEntry>;
419
+ experience: Record<string, ExperienceEntry>;
420
+ belts: Record<string, BeltEntry>;
421
+ propertyGroups?: Record<string, PropertyGroupEntry>;
422
+ uniqueMods?: Record<string, UniqueModEntry>;
423
+ superUniques?: Record<string, SuperUniqueEntry>;
424
+ info: GameInfo;
425
+ strings: Record<string, string>;
426
+ [key: string]: unknown;
427
+ }
428
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/game-data/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,oEAAoE;AACpE,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAI7D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * TypeScript types for the game data tables loaded from data.json / strings.json.
3
+ *
4
+ * These types describe the shape of entries in the ~45 data tables
5
+ * that d2planner produces from Blizzless game files.
6
+ *
7
+ * Note: many fields are optional because the TSV source is sparse.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/game-data/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * d2r-saver — Blizzless D2R v105 save file reader/writer library.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import { GameData } from './game-data/game-data.js';
7
+ import type { RawGameData } from './game-data/types.js';
8
+ import type { LocaleArray } from './game-data/loader.js';
9
+ import { type DetectedFormat } from './formats/detect.js';
10
+ import { type D2SReadResult, type D2SCharacterProfile } from './formats/d2s-reader.js';
11
+ import { type D2IReadResult, type D2IStashPage } from './formats/d2i-reader.js';
12
+ import type { BinaryParsedItem } from './formats/item-parser.js';
13
+ import { type WriteStashPage } from './formats/d2i-writer.js';
14
+ import { type ExtractResult } from './operations/extract-item.js';
15
+ import { type InsertResult, type InsertD2IResult, type InsertD2STarget } from './operations/insert-item.js';
16
+ import { type ReadSaveResult } from './operations/read-save.js';
17
+ import { type DeserializedItem } from './items/item-serializer.js';
18
+ import { type TradeItemDTO } from './items/item-dto.js';
19
+ import { type PlacementItem } from './inventory/placement.js';
20
+ import { StashGrid } from './inventory/grid.js';
21
+ export { GameData } from './game-data/game-data.js';
22
+ export { D2RSaverError, ErrorCode } from './types/errors.js';
23
+ export type { DetectedFormat } from './formats/detect.js';
24
+ export type { D2SReadResult, D2SCharacterProfile } from './formats/d2s-reader.js';
25
+ export type { D2IReadResult, D2IStashPage, ExtendedPageType } from './formats/d2i-reader.js';
26
+ export type { BinaryParsedItem, ItemHandler } from './formats/item-parser.js';
27
+ export type { ExtractResult } from './operations/extract-item.js';
28
+ export type { InsertResult, InsertD2IResult, InsertD2STarget } from './operations/insert-item.js';
29
+ export type { ReadSaveResult, ReadSaveD2SResult, ReadSaveD2IResult } from './operations/read-save.js';
30
+ export type { DeserializedItem } from './items/item-serializer.js';
31
+ export type { TradeItemDTO, ItemQuality } from './items/item-dto.js';
32
+ export type { PlacementItem } from './inventory/placement.js';
33
+ export { StashGrid } from './inventory/grid.js';
34
+ export type { WriteD2SOptions } from './formats/d2s-writer.js';
35
+ export type { WriteStashPage } from './formats/d2i-writer.js';
36
+ /** Options for `D2RSaver.create()`. */
37
+ export interface D2RSaverCreateOptions {
38
+ /** Path to data.json. */
39
+ dataPath: string;
40
+ /** Path to strings.json. */
41
+ stringsPath: string;
42
+ }
43
+ /**
44
+ * Main facade for all d2r-saver operations.
45
+ *
46
+ * Holds a `GameData` instance and delegates to internal modules.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * const saver = await D2RSaver.create({ dataPath: './data/data.json', stringsPath: './data/strings.json' });
51
+ * const result = saver.readD2S(buffer);
52
+ * ```
53
+ */
54
+ export declare class D2RSaver {
55
+ /** Internal game data reference. */
56
+ readonly gd: GameData;
57
+ private constructor();
58
+ /**
59
+ * Create a D2RSaver by loading game data from file paths.
60
+ *
61
+ * @param options Paths to data.json and strings.json.
62
+ */
63
+ static create(options: D2RSaverCreateOptions): Promise<D2RSaver>;
64
+ /**
65
+ * Create a D2RSaver from pre-parsed JSON objects.
66
+ *
67
+ * @param rawData Parsed data.json content.
68
+ * @param locale Parsed strings.json content.
69
+ */
70
+ static fromData(rawData: RawGameData, locale: LocaleArray): D2RSaver;
71
+ /**
72
+ * Detect file format.
73
+ *
74
+ * @throws {D2RSaverError} INVALID_FORMAT if file is unrecognized.
75
+ */
76
+ detectFormat(buffer: Uint8Array): DetectedFormat;
77
+ /** Read a .d2s character save file. */
78
+ readD2S(buffer: Uint8Array): D2SReadResult;
79
+ /** Read a .d2i shared stash file. */
80
+ readD2I(buffer: Uint8Array): D2IReadResult;
81
+ /** Auto-detect format and read a save file. */
82
+ readSave(buffer: Uint8Array): ReadSaveResult;
83
+ /** Serialize an item to a portable token (`d2r1:<base64>`). */
84
+ serializeItem(item: BinaryParsedItem, allItems: Record<number | string, BinaryParsedItem>): string;
85
+ /** Deserialize an item from a portable token. */
86
+ deserializeItem(token: string): DeserializedItem;
87
+ /** Get the grid size of an item in cells. */
88
+ getItemSize(item: BinaryParsedItem): {
89
+ width: number;
90
+ height: number;
91
+ };
92
+ /** Check if an item can be placed at a position on a grid. */
93
+ canPlaceItem(grid: StashGrid, x: number, y: number, item: PlacementItem): boolean;
94
+ /** Find the first free slot for an item on a grid. */
95
+ findFreeSlot(grid: StashGrid, item: PlacementItem): {
96
+ x: number;
97
+ y: number;
98
+ } | null;
99
+ /** Find the first free slot for an item across multiple stash grids. */
100
+ findFreeSlotInStash(grids: StashGrid[], item: PlacementItem): {
101
+ pageIndex: number;
102
+ x: number;
103
+ y: number;
104
+ } | null;
105
+ /**
106
+ * Extract an item from a .d2s save file.
107
+ *
108
+ * @param buffer Original file buffer.
109
+ * @param itemId Item ID to extract.
110
+ */
111
+ extractItemD2S(buffer: Uint8Array, itemId: number): ExtractResult;
112
+ /**
113
+ * Extract an item from a .d2i shared stash.
114
+ *
115
+ * @param buffer Original file buffer.
116
+ * @param pageIndex Page index.
117
+ * @param x X position in grid.
118
+ * @param y Y position in grid.
119
+ */
120
+ extractItemD2I(buffer: Uint8Array, pageIndex: number, x: number, y: number): ExtractResult;
121
+ /**
122
+ * Insert an item into a .d2s save file.
123
+ *
124
+ * @param buffer Original file buffer.
125
+ * @param item Item to insert.
126
+ * @param allItemsForItem All related items (including socketed sub-items).
127
+ * @param target Target container: 'stash' | 'inventory' | 'cube'.
128
+ * @param position Optional specific position. Auto-finds if omitted.
129
+ */
130
+ insertItemD2S(buffer: Uint8Array, item: BinaryParsedItem, allItemsForItem: Record<number | string, BinaryParsedItem>, target: InsertD2STarget, position?: {
131
+ x: number;
132
+ y: number;
133
+ }): InsertResult;
134
+ /**
135
+ * Insert an item into a .d2i shared stash.
136
+ *
137
+ * @param buffer Original file buffer.
138
+ * @param item Item to insert.
139
+ * @param allItemsForItem All related items (including socketed sub-items).
140
+ * @param target Optional specific target page and position.
141
+ */
142
+ insertItemD2I(buffer: Uint8Array, item: BinaryParsedItem, allItemsForItem: Record<number | string, BinaryParsedItem>, target?: {
143
+ pageIndex: number;
144
+ x: number;
145
+ y: number;
146
+ }): InsertD2IResult;
147
+ /**
148
+ * Re-serialise a complete .d2s from a (possibly edited) profile + items.
149
+ * Lossless: the parsed profile must carry rawHeader/attributes (from readD2S);
150
+ * apply edits by mutating `profile.attributes` (raw values) before calling.
151
+ */
152
+ writeD2S(profile: D2SCharacterProfile, items: Record<number | string, BinaryParsedItem>, name?: string): Uint8Array;
153
+ /** Convert parsed stash pages back to writable pages (for writeStash). */
154
+ buildStashWritePages(pages: D2IStashPage[], allItems: Record<number | string, BinaryParsedItem>): WriteStashPage[];
155
+ /** Re-serialise a complete .d2i shared stash from writable pages. */
156
+ writeStash(pages: WriteStashPage[], allItems: Record<number | string, BinaryParsedItem>): Uint8Array;
157
+ /** Patch a single .d2i sector (e.g. to change its gold) by raw sector index. */
158
+ patchStashPage(buffer: Uint8Array, pageIndex: number, newPage: WriteStashPage, allItems: Record<number | string, BinaryParsedItem>): Uint8Array;
159
+ /** Get the HD icon path key for an item. */
160
+ getItemIconPath(item: BinaryParsedItem): string | null;
161
+ /** Get the SD (invfile) icon name for an item. */
162
+ getItemIconSD(item: BinaryParsedItem): string | null;
163
+ /** Convert an item to a TradeItemDTO for the backend. */
164
+ toTradeDTO(item: BinaryParsedItem, allItems: Record<number | string, BinaryParsedItem>): TradeItemDTO;
165
+ }
166
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}