@jsprismarine/nbt 0.1.0-rc.53 → 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.
- package/LICENSE +373 -0
- package/dist/Allocation.cjs.js +14 -0
- package/dist/Allocation.es.js +10 -0
- package/dist/ByteOrder-C8lF6w2G.cjs +16 -0
- package/dist/ByteOrder-mAT605jQ.js +13 -0
- package/dist/ByteOrder.cjs.js +10 -0
- package/dist/ByteOrder.es.js +2 -0
- package/dist/NBT.cjs.js +30 -0
- package/dist/NBT.d.ts +7 -7
- package/dist/NBT.d.ts.map +1 -1
- package/dist/NBT.es.js +16 -0
- package/dist/NBTDefinitions-BF_rcBoW.js +23 -0
- package/dist/NBTDefinitions-DUnu0laJ.cjs +26 -0
- package/dist/NBTDefinitions.cjs.js +10 -0
- package/dist/NBTDefinitions.es.js +2 -0
- package/dist/NBTReader.cjs.js +23 -0
- package/dist/NBTReader.d.ts +4 -4
- package/dist/NBTReader.d.ts.map +1 -1
- package/dist/NBTReader.es.js +15 -0
- package/dist/NBTStreamReader.cjs.js +119 -0
- package/dist/NBTStreamReader.d.ts +9 -9
- package/dist/NBTStreamReader.d.ts.map +1 -1
- package/dist/NBTStreamReader.es.js +115 -0
- package/dist/NBTTagCompound.cjs.js +23 -0
- package/dist/NBTTagCompound.d.ts +1 -1
- package/dist/NBTTagCompound.d.ts.map +1 -1
- package/dist/NBTTagCompound.es.js +15 -0
- package/dist/NBTWriter-CWx4uanO.js +515 -0
- package/dist/NBTWriter-KG_h2i_E.cjs +524 -0
- package/dist/NBTWriter.cjs.js +23 -0
- package/dist/NBTWriter.d.ts +2 -2
- package/dist/NBTWriter.d.ts.map +1 -1
- package/dist/NBTWriter.es.js +15 -0
- package/dist/Types-7TSvUTtn.js +21 -0
- package/dist/Types-CTvMjHAk.cjs +23 -0
- package/dist/types/ByteVal.cjs.js +16 -0
- package/dist/types/ByteVal.es.js +12 -0
- package/dist/types/DoubleVal.cjs.js +16 -0
- package/dist/types/DoubleVal.es.js +12 -0
- package/dist/types/FloatVal.cjs.js +16 -0
- package/dist/types/FloatVal.es.js +12 -0
- package/dist/types/LongVal.cjs.js +16 -0
- package/dist/types/LongVal.es.js +12 -0
- package/dist/types/NumberVal.cjs.js +16 -0
- package/dist/types/NumberVal.es.js +12 -0
- package/dist/types/ShortVal.cjs.js +16 -0
- package/dist/types/ShortVal.es.js +12 -0
- package/dist/types/StringVal.cjs.js +16 -0
- package/dist/types/StringVal.es.js +12 -0
- package/dist/types/Types.cjs.js +22 -0
- package/dist/types/Types.d.ts +7 -7
- package/dist/types/Types.d.ts.map +1 -1
- package/dist/types/Types.es.js +8 -0
- package/package.json +50 -27
- package/dist/Allocation.js +0 -8
- package/dist/Allocation.js.map +0 -1
- package/dist/ByteOrder.js +0 -6
- package/dist/ByteOrder.js.map +0 -1
- package/dist/NBT.js +0 -9
- package/dist/NBT.js.map +0 -1
- package/dist/NBTDefinitions.js +0 -16
- package/dist/NBTDefinitions.js.map +0 -1
- package/dist/NBTReader.js +0 -157
- package/dist/NBTReader.js.map +0 -1
- package/dist/NBTStreamReader.js +0 -113
- package/dist/NBTStreamReader.js.map +0 -1
- package/dist/NBTTagCompound.js +0 -137
- package/dist/NBTTagCompound.js.map +0 -1
- package/dist/NBTWriter.js +0 -242
- package/dist/NBTWriter.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/types/ByteVal.js +0 -10
- package/dist/types/ByteVal.js.map +0 -1
- package/dist/types/DoubleVal.js +0 -10
- package/dist/types/DoubleVal.js.map +0 -1
- package/dist/types/FloatVal.js +0 -10
- package/dist/types/FloatVal.js.map +0 -1
- package/dist/types/LongVal.js +0 -10
- package/dist/types/LongVal.js.map +0 -1
- package/dist/types/NumberVal.js +0 -10
- package/dist/types/NumberVal.js.map +0 -1
- package/dist/types/ShortVal.js +0 -10
- package/dist/types/ShortVal.js.map +0 -1
- package/dist/types/StringVal.js +0 -10
- package/dist/types/StringVal.js.map +0 -1
- package/dist/types/Types.js +0 -9
- package/dist/types/Types.js.map +0 -1
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ByteOrder = require('./ByteOrder-C8lF6w2G.cjs');
|
|
4
|
+
const types_ByteVal = require('./types/ByteVal.cjs.js');
|
|
5
|
+
const types_DoubleVal = require('./types/DoubleVal.cjs.js');
|
|
6
|
+
const types_FloatVal = require('./types/FloatVal.cjs.js');
|
|
7
|
+
const types_LongVal = require('./types/LongVal.cjs.js');
|
|
8
|
+
const NBTDefinitions = require('./NBTDefinitions-DUnu0laJ.cjs');
|
|
9
|
+
const fs = require('node:fs');
|
|
10
|
+
const BinaryStream = require('@jsprismarine/jsbinaryutils');
|
|
11
|
+
const Allocation = require('./Allocation.cjs.js');
|
|
12
|
+
const NBTStreamReader = require('./NBTStreamReader.cjs.js');
|
|
13
|
+
const types_NumberVal = require('./types/NumberVal.cjs.js');
|
|
14
|
+
const types_ShortVal = require('./types/ShortVal.cjs.js');
|
|
15
|
+
const types_StringVal = require('./types/StringVal.cjs.js');
|
|
16
|
+
|
|
17
|
+
const _interopDefault = e => e && e.__esModule ? e : { default: e };
|
|
18
|
+
|
|
19
|
+
const fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
20
|
+
const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
|
|
21
|
+
|
|
22
|
+
class NBTReader extends NBTStreamReader.default {
|
|
23
|
+
constructor(input, byteOrder) {
|
|
24
|
+
super(input, byteOrder);
|
|
25
|
+
}
|
|
26
|
+
parseList() {
|
|
27
|
+
this.expectInput(this.isUsingVarint() ? 2 : 3, "Invalid NBT Data: Not enough data to read new tag", false);
|
|
28
|
+
if (this.readByteValue().getValue() !== NBTDefinitions.NBTDefinitions$1.TAG_LIST) {
|
|
29
|
+
throw new Error("Invalid NBT Data: Not list tag found");
|
|
30
|
+
}
|
|
31
|
+
this.readStringValue();
|
|
32
|
+
return this.readTagListValue();
|
|
33
|
+
}
|
|
34
|
+
parse() {
|
|
35
|
+
this.expectInput(this.isUsingVarint() ? 2 : 3, "Invalid NBT Data: Not enough data to read new tag", false);
|
|
36
|
+
if (this.readByteValue().getValue() !== NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND) {
|
|
37
|
+
throw new Error("Invalid NBT Data: No root tag found");
|
|
38
|
+
}
|
|
39
|
+
const name = this.readStringValue().getValue();
|
|
40
|
+
const root = this.readTagCompoundValue();
|
|
41
|
+
root.setName(name);
|
|
42
|
+
return root;
|
|
43
|
+
}
|
|
44
|
+
readTagCompoundValue() {
|
|
45
|
+
this.alterAllocationLimit(Allocation.Allocation.COMPOUND);
|
|
46
|
+
const compound = new NBTTagCompound();
|
|
47
|
+
this.expectInput(1, "Invalid NBT Data: Expected Tag ID in compound tag", false);
|
|
48
|
+
let tagID = this.readByteValue().getValue();
|
|
49
|
+
while (tagID !== NBTDefinitions.NBTDefinitions$1.TAG_END) {
|
|
50
|
+
switch (tagID) {
|
|
51
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
|
|
52
|
+
compound.addValue(this.readStringValue().getValue(), this.readByteValue());
|
|
53
|
+
break;
|
|
54
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
|
|
55
|
+
compound.addValue(this.readStringValue().getValue(), this.readShortValue());
|
|
56
|
+
break;
|
|
57
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT:
|
|
58
|
+
compound.addValue(this.readStringValue().getValue(), this.readIntValue());
|
|
59
|
+
break;
|
|
60
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
|
|
61
|
+
compound.addValue(this.readStringValue().getValue(), this.readLongValue());
|
|
62
|
+
break;
|
|
63
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
|
|
64
|
+
compound.addValue(this.readStringValue().getValue(), this.readFloatValue());
|
|
65
|
+
break;
|
|
66
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
|
|
67
|
+
compound.addValue(this.readStringValue().getValue(), this.readDoubleValue());
|
|
68
|
+
break;
|
|
69
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
|
|
70
|
+
compound.addValue(this.readStringValue().getValue(), this.readByteArrayValue());
|
|
71
|
+
break;
|
|
72
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
|
|
73
|
+
compound.addValue(this.readStringValue().getValue(), this.readStringValue());
|
|
74
|
+
break;
|
|
75
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
|
|
76
|
+
compound.addValue(this.readStringValue().getValue(), this.readTagListValue());
|
|
77
|
+
break;
|
|
78
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
|
|
79
|
+
const name = this.readStringValue().getValue();
|
|
80
|
+
const child = this.readTagCompoundValue();
|
|
81
|
+
child.setName(name);
|
|
82
|
+
compound.addChild(child);
|
|
83
|
+
break;
|
|
84
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
|
|
85
|
+
compound.addValue(this.readStringValue().getValue(), this.readIntArrayValue());
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
throw new Error(`Invalid NBT Data: Unknown tag <${tagID}>`);
|
|
89
|
+
}
|
|
90
|
+
this.expectInput(1, "Invalid NBT Data: Expected tag ID in tag compound", false);
|
|
91
|
+
tagID = this.readByteValue().getValue();
|
|
92
|
+
}
|
|
93
|
+
return compound;
|
|
94
|
+
}
|
|
95
|
+
readTagListValue() {
|
|
96
|
+
this.expectInput(this.isUsingVarint() ? 2 : 5, "Invalid NBT Data: Expected TAGList header", false);
|
|
97
|
+
const listType = this.readByteValue().getValue();
|
|
98
|
+
let listLength = this.readIntValue().getValue();
|
|
99
|
+
this.alterAllocationLimit(Allocation.Allocation.ARRAY_LIST);
|
|
100
|
+
this.alterAllocationLimit(Allocation.Allocation.REFERENCE);
|
|
101
|
+
const backingList = /* @__PURE__ */ new Set();
|
|
102
|
+
switch (listType) {
|
|
103
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_END:
|
|
104
|
+
listLength = 0;
|
|
105
|
+
break;
|
|
106
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
|
|
107
|
+
this.expectInput(listLength, "Invalid NBT Data: Expected bytes for list");
|
|
108
|
+
for (let i = 0; i < listLength; i++) {
|
|
109
|
+
backingList.add(this.readShortValue());
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
|
|
113
|
+
this.expectInput(2 * listLength, "Invalid NBT Data: Expected shorts for list");
|
|
114
|
+
for (let i = 0; i < listLength; i++) {
|
|
115
|
+
backingList.add(this.readShortValue());
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT:
|
|
119
|
+
this.expectInput(4 * listLength, "Invalid NBT Data: Expected ints for list");
|
|
120
|
+
for (let i = 0; i < listLength; i++) {
|
|
121
|
+
backingList.add(this.readIntValue());
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
|
|
125
|
+
this.expectInput(8 * listLength, "Invalid NBT Data: Expected longs for list");
|
|
126
|
+
for (let i = 0; i < listLength; i++) {
|
|
127
|
+
backingList.add(this.readLongValue());
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
|
|
131
|
+
this.expectInput(4 * listLength, "Invalid NBT Data: Expected floats for list");
|
|
132
|
+
for (let i = 0; i < listLength; i++) {
|
|
133
|
+
backingList.add(this.readFloatValue());
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
|
|
137
|
+
this.expectInput(8 * listLength, "Invalid NBT Data: Expected doubles for list");
|
|
138
|
+
for (let i = 0; i < listLength; i++) {
|
|
139
|
+
backingList.add(this.readDoubleValue());
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
|
|
143
|
+
for (let i = 0; i < listLength; i++) {
|
|
144
|
+
backingList.add(this.readByteArrayValue());
|
|
145
|
+
}
|
|
146
|
+
break;
|
|
147
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
|
|
148
|
+
for (let i = 0; i < listLength; i++) {
|
|
149
|
+
backingList.add(this.readStringValue());
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
|
|
153
|
+
for (let i = 0; i < listLength; i++) {
|
|
154
|
+
backingList.add(this.readTagListValue());
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
|
|
158
|
+
for (let i = 0; i < listLength; i++) {
|
|
159
|
+
backingList.add(this.readTagCompoundValue());
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
|
|
163
|
+
for (let i = 0; i < listLength; i++) {
|
|
164
|
+
backingList.add(this.readIntArrayValue());
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
default:
|
|
168
|
+
throw new Error(`Invalid NBT Data: Unknown tag <${listType}>`);
|
|
169
|
+
}
|
|
170
|
+
return backingList;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
class NBTTagCompound {
|
|
175
|
+
name;
|
|
176
|
+
children = /* @__PURE__ */ new Map();
|
|
177
|
+
static readFromFile(path, byteOrder) {
|
|
178
|
+
return NBTTagCompound.readFromStream(new BinaryStream__default.default(fs__default.default.readFileSync(path)), byteOrder);
|
|
179
|
+
}
|
|
180
|
+
static readFromStream(input, byteOrder) {
|
|
181
|
+
const reader = new NBTReader(input, byteOrder);
|
|
182
|
+
return reader.parse();
|
|
183
|
+
}
|
|
184
|
+
constructor(name = null) {
|
|
185
|
+
this.name = name;
|
|
186
|
+
}
|
|
187
|
+
setName(name) {
|
|
188
|
+
this.name = name;
|
|
189
|
+
}
|
|
190
|
+
getName() {
|
|
191
|
+
return this.name;
|
|
192
|
+
}
|
|
193
|
+
addValue(name, value) {
|
|
194
|
+
if (value instanceof NBTTagCompound && !(name === value.getName())) {
|
|
195
|
+
throw new Error(`Failed to add NBTTagCompound with name ${value.getName()} given name ${name}`);
|
|
196
|
+
}
|
|
197
|
+
this.children.set(name, value);
|
|
198
|
+
}
|
|
199
|
+
addChild(tag) {
|
|
200
|
+
this.children.set(tag.getName(), tag);
|
|
201
|
+
}
|
|
202
|
+
getList(name, insert) {
|
|
203
|
+
if (this.children.has(name)) {
|
|
204
|
+
return this.children.get(name);
|
|
205
|
+
}
|
|
206
|
+
if (insert) {
|
|
207
|
+
const backingList = /* @__PURE__ */ new Set();
|
|
208
|
+
this.addValue(name, backingList);
|
|
209
|
+
return backingList;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
getCompound(name, insert) {
|
|
214
|
+
if (this.children.has(name)) {
|
|
215
|
+
return this.children.get(name);
|
|
216
|
+
}
|
|
217
|
+
if (insert) {
|
|
218
|
+
const compound = new NBTTagCompound();
|
|
219
|
+
this.addValue(name, compound);
|
|
220
|
+
return compound;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
writeToStream(out, byteOrder) {
|
|
225
|
+
const writer = new NBTWriter(out, byteOrder);
|
|
226
|
+
writer.writeCompound(this);
|
|
227
|
+
}
|
|
228
|
+
getByte(name, defaultValue) {
|
|
229
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
230
|
+
}
|
|
231
|
+
getShort(name, defaultValue) {
|
|
232
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
233
|
+
}
|
|
234
|
+
getNumber(name, defaultValue) {
|
|
235
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
236
|
+
}
|
|
237
|
+
getLong(name, defaultValue) {
|
|
238
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
239
|
+
}
|
|
240
|
+
getFloat(name, defaultValue) {
|
|
241
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
242
|
+
}
|
|
243
|
+
getDouble(name, defaultValue) {
|
|
244
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
245
|
+
}
|
|
246
|
+
getString(name, defaultValue) {
|
|
247
|
+
return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
|
|
248
|
+
}
|
|
249
|
+
remove(key) {
|
|
250
|
+
return this.children.delete(key);
|
|
251
|
+
}
|
|
252
|
+
entries() {
|
|
253
|
+
return this.children.entries();
|
|
254
|
+
}
|
|
255
|
+
has(key) {
|
|
256
|
+
return this.children.has(key);
|
|
257
|
+
}
|
|
258
|
+
size() {
|
|
259
|
+
return this.children.size;
|
|
260
|
+
}
|
|
261
|
+
// Thanks stackoverflow! https://stackoverflow.com/questions/35948335/how-can-i-check-if-two-map-objects-are-equal
|
|
262
|
+
equals(that) {
|
|
263
|
+
if (this.children.size !== that.children.size) {
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
for (const [key, val] of this.children) {
|
|
267
|
+
const testVal = that.children.get(key);
|
|
268
|
+
if (testVal === void 0 && !that.children.has(key)) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
if (val instanceof NBTTagCompound && testVal instanceof NBTTagCompound && !val.equals(testVal)) {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
if (val instanceof types_ByteVal.default && testVal instanceof types_ByteVal.default && val.getValue() !== testVal.getValue()) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
if (val instanceof types_DoubleVal.default && testVal instanceof types_DoubleVal.default && val.getValue() !== testVal.getValue()) {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
if (val instanceof types_FloatVal.default && testVal instanceof types_FloatVal.default && val.getValue() !== testVal.getValue()) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
if (val instanceof types_LongVal.default && testVal instanceof types_LongVal.default && val.getValue() !== testVal.getValue()) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
if (val instanceof types_NumberVal.default && testVal instanceof types_NumberVal.default && val.getValue() !== testVal.getValue()) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
if (val instanceof types_ShortVal.default && testVal instanceof types_ShortVal.default && val.getValue() !== testVal.getValue()) {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
if (val instanceof types_StringVal.default && testVal instanceof types_StringVal.default && val.getValue() !== testVal.getValue()) {
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
class NBTWriter {
|
|
301
|
+
order;
|
|
302
|
+
buf;
|
|
303
|
+
useVarint = false;
|
|
304
|
+
constructor(out, byteOrder) {
|
|
305
|
+
this.buf = out;
|
|
306
|
+
this.order = byteOrder;
|
|
307
|
+
}
|
|
308
|
+
setUseVarint(useVarint) {
|
|
309
|
+
this.useVarint = useVarint;
|
|
310
|
+
}
|
|
311
|
+
writeList(list) {
|
|
312
|
+
this.writeTagHeader(NBTDefinitions.NBTDefinitions$1.TAG_LIST, "");
|
|
313
|
+
this.writeListValue(list);
|
|
314
|
+
}
|
|
315
|
+
writeCompound(compound) {
|
|
316
|
+
this.writeTagHeader(NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND, compound.getName() ?? "");
|
|
317
|
+
this.writeCompoundValue(compound);
|
|
318
|
+
}
|
|
319
|
+
writeTagHeader(type, name) {
|
|
320
|
+
this.writeByteValue(type);
|
|
321
|
+
this.writeStringValue(name);
|
|
322
|
+
}
|
|
323
|
+
writeStringValue(value) {
|
|
324
|
+
if (value !== null) {
|
|
325
|
+
const bytes = Buffer.from(value, "utf8");
|
|
326
|
+
if (this.useVarint) {
|
|
327
|
+
this.buf.writeUnsignedVarInt(Buffer.byteLength(value));
|
|
328
|
+
} else {
|
|
329
|
+
this.writeShortValue(Buffer.byteLength(value));
|
|
330
|
+
}
|
|
331
|
+
this.buf.write(bytes);
|
|
332
|
+
} else if (this.useVarint) {
|
|
333
|
+
this.writeByteValue(0);
|
|
334
|
+
} else {
|
|
335
|
+
this.writeShortValue(0);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
writeByteValue(value) {
|
|
339
|
+
this.buf.writeByte(value);
|
|
340
|
+
}
|
|
341
|
+
writeShortValue(value) {
|
|
342
|
+
if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
|
|
343
|
+
this.buf.writeUnsignedShortLE(value);
|
|
344
|
+
} else {
|
|
345
|
+
this.buf.writeUnsignedShort(value);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
writeIntegerValue(value) {
|
|
349
|
+
if (this.useVarint) {
|
|
350
|
+
this.buf.writeVarInt(value);
|
|
351
|
+
} else if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
|
|
352
|
+
this.buf.writeUnsignedIntLE(value);
|
|
353
|
+
} else {
|
|
354
|
+
this.buf.writeUnsignedInt(value);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
writeLongValue(value) {
|
|
358
|
+
if (this.useVarint) {
|
|
359
|
+
this.buf.writeVarLong(value);
|
|
360
|
+
} else if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
|
|
361
|
+
this.buf.writeUnsignedLongLE(value);
|
|
362
|
+
} else {
|
|
363
|
+
this.buf.writeUnsignedLong(value);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
writeFloatValue(value) {
|
|
367
|
+
if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
|
|
368
|
+
this.buf.writeFloatLE(value);
|
|
369
|
+
} else {
|
|
370
|
+
this.buf.writeFloat(value);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
writeDoubleValue(value) {
|
|
374
|
+
if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
|
|
375
|
+
this.buf.writeDoubleLE(value);
|
|
376
|
+
} else {
|
|
377
|
+
this.buf.writeDouble(value);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
writeByteArrayValue(value) {
|
|
381
|
+
this.writeIntegerValue(value.length);
|
|
382
|
+
this.buf.write(value);
|
|
383
|
+
}
|
|
384
|
+
writeIntegerArrayValue(value) {
|
|
385
|
+
this.writeIntegerValue(value.length);
|
|
386
|
+
value.forEach((v) => {
|
|
387
|
+
this.writeIntegerValue(v);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
writeListValue(value) {
|
|
391
|
+
if (value.size > 0) {
|
|
392
|
+
const listNbtType = this.getNBTTypeFromValue(value.entries().next().value);
|
|
393
|
+
this.writeByteValue(listNbtType);
|
|
394
|
+
this.writeIntegerValue(value.size);
|
|
395
|
+
for (const rawValue of value) {
|
|
396
|
+
switch (listNbtType) {
|
|
397
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
|
|
398
|
+
this.writeByteValue(rawValue.getValue());
|
|
399
|
+
break;
|
|
400
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
|
|
401
|
+
this.writeShortValue(rawValue.getValue());
|
|
402
|
+
break;
|
|
403
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT:
|
|
404
|
+
this.writeIntegerValue(rawValue.getValue());
|
|
405
|
+
break;
|
|
406
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
|
|
407
|
+
this.writeLongValue(rawValue.getValue());
|
|
408
|
+
break;
|
|
409
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
|
|
410
|
+
this.writeFloatValue(rawValue.getValue());
|
|
411
|
+
break;
|
|
412
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
|
|
413
|
+
this.writeDoubleValue(rawValue.getValue());
|
|
414
|
+
break;
|
|
415
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
|
|
416
|
+
this.writeDoubleValue(rawValue);
|
|
417
|
+
break;
|
|
418
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
|
|
419
|
+
this.writeStringValue(rawValue.getValue());
|
|
420
|
+
break;
|
|
421
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
|
|
422
|
+
this.writeListValue(rawValue);
|
|
423
|
+
break;
|
|
424
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
|
|
425
|
+
this.writeCompoundValue(rawValue);
|
|
426
|
+
break;
|
|
427
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
|
|
428
|
+
this.writeIntegerArrayValue(rawValue);
|
|
429
|
+
break;
|
|
430
|
+
default:
|
|
431
|
+
throw new Error("Invalid NBTTagType");
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
} else {
|
|
435
|
+
this.writeByteValue(NBTDefinitions.NBTDefinitions$1.TAG_BYTE);
|
|
436
|
+
this.writeIntegerValue(0);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
writeCompoundValue(compound) {
|
|
440
|
+
for (const [key, value] of compound.entries()) {
|
|
441
|
+
const nbtType = this.getNBTTypeFromValue(value);
|
|
442
|
+
this.writeTagHeader(nbtType, key);
|
|
443
|
+
switch (nbtType) {
|
|
444
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
|
|
445
|
+
this.writeByteValue(value.getValue());
|
|
446
|
+
break;
|
|
447
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
|
|
448
|
+
this.writeShortValue(value.getValue());
|
|
449
|
+
break;
|
|
450
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT:
|
|
451
|
+
this.writeIntegerValue(value.getValue());
|
|
452
|
+
break;
|
|
453
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
|
|
454
|
+
this.writeLongValue(value.getValue());
|
|
455
|
+
break;
|
|
456
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
|
|
457
|
+
this.writeFloatValue(value.getValue());
|
|
458
|
+
break;
|
|
459
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
|
|
460
|
+
this.writeDoubleValue(value.getValue());
|
|
461
|
+
break;
|
|
462
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
|
|
463
|
+
this.writeByteArrayValue(value);
|
|
464
|
+
break;
|
|
465
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
|
|
466
|
+
this.writeStringValue(value.getValue());
|
|
467
|
+
break;
|
|
468
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
|
|
469
|
+
this.writeListValue(value);
|
|
470
|
+
break;
|
|
471
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
|
|
472
|
+
this.writeCompoundValue(value);
|
|
473
|
+
break;
|
|
474
|
+
case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
|
|
475
|
+
this.writeIntegerValue(value);
|
|
476
|
+
break;
|
|
477
|
+
default:
|
|
478
|
+
throw new Error("Invalid NBTTagType");
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
this.writeByteValue(NBTDefinitions.NBTDefinitions$1.TAG_END);
|
|
482
|
+
}
|
|
483
|
+
getNBTTypeFromValue(value) {
|
|
484
|
+
if (value instanceof types_ByteVal.default) {
|
|
485
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_BYTE;
|
|
486
|
+
}
|
|
487
|
+
if (value instanceof types_ShortVal.default) {
|
|
488
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_SHORT;
|
|
489
|
+
}
|
|
490
|
+
if (value instanceof types_NumberVal.default) {
|
|
491
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_INT;
|
|
492
|
+
}
|
|
493
|
+
if (value instanceof types_LongVal.default) {
|
|
494
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_LONG;
|
|
495
|
+
}
|
|
496
|
+
if (value instanceof types_FloatVal.default) {
|
|
497
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_FLOAT;
|
|
498
|
+
}
|
|
499
|
+
if (value instanceof types_DoubleVal.default) {
|
|
500
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE;
|
|
501
|
+
}
|
|
502
|
+
if (value instanceof Buffer) {
|
|
503
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY;
|
|
504
|
+
}
|
|
505
|
+
if (value instanceof types_StringVal.default) {
|
|
506
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_STRING;
|
|
507
|
+
}
|
|
508
|
+
if (value instanceof Set) {
|
|
509
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_LIST;
|
|
510
|
+
}
|
|
511
|
+
if (value instanceof NBTTagCompound) {
|
|
512
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND;
|
|
513
|
+
}
|
|
514
|
+
if (Array.isArray(value)) {
|
|
515
|
+
return NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY;
|
|
516
|
+
}
|
|
517
|
+
throw new TypeError(`Invalid NBT Data: Cannot deduce NBT type of class ${value.constructor.name} (${value})`);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
exports.NBTReader = NBTReader;
|
|
522
|
+
exports.NBTTagCompound = NBTTagCompound;
|
|
523
|
+
exports.NBTWriter = NBTWriter;
|
|
524
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUV3JpdGVyLUtHX2gyaV9FLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL05CVFJlYWRlci50cyIsIi4uL3NyYy9OQlRUYWdDb21wb3VuZC50cyIsIi4uL3NyYy9OQlRXcml0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgQWxsb2NhdGlvbiB9IGZyb20gJy4vQWxsb2NhdGlvbic7XG5pbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBCeXRlT3JkZXIgfSBmcm9tICcuL0J5dGVPcmRlcic7XG5pbXBvcnQgeyBOQlREZWZpbml0aW9ucyB9IGZyb20gJy4vTkJURGVmaW5pdGlvbnMnO1xuaW1wb3J0IE5CVFN0cmVhbVJlYWRlciBmcm9tICcuL05CVFN0cmVhbVJlYWRlcic7XG5pbXBvcnQgTkJUVGFnQ29tcG91bmQgZnJvbSAnLi9OQlRUYWdDb21wb3VuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5CVFJlYWRlciBleHRlbmRzIE5CVFN0cmVhbVJlYWRlciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlucHV0OiBCaW5hcnlTdHJlYW0sIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKSB7XG4gICAgICAgIHN1cGVyKGlucHV0LCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZUxpc3Q8VGFnVHlwZT4oKTogU2V0PFRhZ1R5cGU+IHtcbiAgICAgICAgdGhpcy5leHBlY3RJbnB1dCh0aGlzLmlzVXNpbmdWYXJpbnQoKSA/IDIgOiAzLCAnSW52YWxpZCBOQlQgRGF0YTogTm90IGVub3VnaCBkYXRhIHRvIHJlYWQgbmV3IHRhZycsIGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCkgIT09IE5CVERlZmluaXRpb25zLlRBR19MSVNUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTkJUIERhdGE6IE5vdCBsaXN0IHRhZyBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWFkU3RyaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFRhZ0xpc3RWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZSgpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIHRoaXMuZXhwZWN0SW5wdXQodGhpcy5pc1VzaW5nVmFyaW50KCkgPyAyIDogMywgJ0ludmFsaWQgTkJUIERhdGE6IE5vdCBlbm91Z2ggZGF0YSB0byByZWFkIG5ldyB0YWcnLCBmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLnJlYWRCeXRlVmFsdWUoKS5nZXRWYWx1ZSgpICE9PSBOQlREZWZpbml0aW9ucy5UQUdfQ09NUE9VTkQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOQlQgRGF0YTogTm8gcm9vdCB0YWcgZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgcm9vdDogTkJUVGFnQ29tcG91bmQgPSB0aGlzLnJlYWRUYWdDb21wb3VuZFZhbHVlKCk7XG4gICAgICAgIHJvb3Quc2V0TmFtZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVGFnQ29tcG91bmRWYWx1ZSgpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIHRoaXMuYWx0ZXJBbGxvY2F0aW9uTGltaXQoQWxsb2NhdGlvbi5DT01QT1VORCk7XG4gICAgICAgIGNvbnN0IGNvbXBvdW5kOiBOQlRUYWdDb21wb3VuZCA9IG5ldyBOQlRUYWdDb21wb3VuZCgpO1xuICAgICAgICB0aGlzLmV4cGVjdElucHV0KDEsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBUYWcgSUQgaW4gY29tcG91bmQgdGFnJywgZmFsc2UpO1xuXG4gICAgICAgIGxldCB0YWdJRCA9IHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgIHdoaWxlICh0YWdJRCAhPT0gTkJURGVmaW5pdGlvbnMuVEFHX0VORCkge1xuICAgICAgICAgICAgc3dpdGNoICh0YWdJRCkge1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkQnl0ZVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TSE9SVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRTaG9ydFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkSW50VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xPTkc6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkTG9uZ1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19GTE9BVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRGbG9hdFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkRG91YmxlVmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkQnl0ZUFycmF5VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NUUklORzpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTElTVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRUYWdMaXN0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkOiBOQlRUYWdDb21wb3VuZCA9IHRoaXMucmVhZFRhZ0NvbXBvdW5kVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlRfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkSW50QXJyYXlWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE5CVCBEYXRhOiBVbmtub3duIHRhZyA8JHt0YWdJRH0+YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoMSwgJ0ludmFsaWQgTkJUIERhdGE6IEV4cGVjdGVkIHRhZyBJRCBpbiB0YWcgY29tcG91bmQnLCBmYWxzZSk7XG4gICAgICAgICAgICB0YWdJRCA9IHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcG91bmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVGFnTGlzdFZhbHVlKCk6IFNldDxhbnk+IHtcbiAgICAgICAgdGhpcy5leHBlY3RJbnB1dCh0aGlzLmlzVXNpbmdWYXJpbnQoKSA/IDIgOiA1LCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgVEFHTGlzdCBoZWFkZXInLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGxpc3RUeXBlOiBudW1iZXIgPSB0aGlzLnJlYWRCeXRlVmFsdWUoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBsZXQgbGlzdExlbmd0aDogbnVtYmVyID0gdGhpcy5yZWFkSW50VmFsdWUoKS5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIHRoaXMuYWx0ZXJBbGxvY2F0aW9uTGltaXQoQWxsb2NhdGlvbi5BUlJBWV9MSVNUKTtcbiAgICAgICAgdGhpcy5hbHRlckFsbG9jYXRpb25MaW1pdChBbGxvY2F0aW9uLlJFRkVSRU5DRSk7XG5cbiAgICAgICAgY29uc3QgYmFja2luZ0xpc3Q6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuXG4gICAgICAgIHN3aXRjaCAobGlzdFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0VORDpcbiAgICAgICAgICAgICAgICBsaXN0TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RJbnB1dChsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgYnl0ZXMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkU2hvcnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoMiAqIGxpc3RMZW5ndGgsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBzaG9ydHMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkU2hvcnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVDpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdElucHV0KDQgKiBsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgaW50cyBmb3IgbGlzdCcpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRJbnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xPTkc6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RJbnB1dCg4ICogbGlzdExlbmd0aCwgJ0ludmFsaWQgTkJUIERhdGE6IEV4cGVjdGVkIGxvbmdzIGZvciBsaXN0Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZExvbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0ZMT0FUOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoNCAqIGxpc3RMZW5ndGgsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBmbG9hdHMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkRmxvYXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0RPVUJMRTpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdElucHV0KDggKiBsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgZG91YmxlcyBmb3IgbGlzdCcpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWREb3VibGVWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZEJ5dGVBcnJheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfU1RSSU5HOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xJU1Q6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZFRhZ0xpc3RWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRUYWdDb21wb3VuZFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfSU5UX0FSUkFZOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRJbnRBcnJheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgTkJUIERhdGE6IFVua25vd24gdGFnIDwke2xpc3RUeXBlfT5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYWNraW5nTGlzdDtcbiAgICB9XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IEJ5dGVPcmRlciB9IGZyb20gJy4vQnl0ZU9yZGVyJztcbmltcG9ydCBCeXRlVmFsIGZyb20gJy4vdHlwZXMvQnl0ZVZhbCc7XG5pbXBvcnQgRG91YmxlVmFsIGZyb20gJy4vdHlwZXMvRG91YmxlVmFsJztcbmltcG9ydCBGbG9hdFZhbCBmcm9tICcuL3R5cGVzL0Zsb2F0VmFsJztcbmltcG9ydCBMb25nVmFsIGZyb20gJy4vdHlwZXMvTG9uZ1ZhbCc7XG5pbXBvcnQgTkJUUmVhZGVyIGZyb20gJy4vTkJUUmVhZGVyJztcbmltcG9ydCBOQlRXcml0ZXIgZnJvbSAnLi9OQlRXcml0ZXInO1xuaW1wb3J0IE51bWJlclZhbCBmcm9tICcuL3R5cGVzL051bWJlclZhbCc7XG5pbXBvcnQgU2hvcnRWYWwgZnJvbSAnLi90eXBlcy9TaG9ydFZhbCc7XG5pbXBvcnQgU3RyaW5nVmFsIGZyb20gJy4vdHlwZXMvU3RyaW5nVmFsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkJUVGFnQ29tcG91bmQge1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hpbGRyZW46IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tRmlsZShwYXRoOiBzdHJpbmcsIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKTogTkJUVGFnQ29tcG91bmQge1xuICAgICAgICByZXR1cm4gTkJUVGFnQ29tcG91bmQucmVhZEZyb21TdHJlYW0obmV3IEJpbmFyeVN0cmVhbShmcy5yZWFkRmlsZVN5bmMocGF0aCkpLCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEZyb21TdHJlYW0oaW5wdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIGNvbnN0IHJlYWRlcjogTkJUUmVhZGVyID0gbmV3IE5CVFJlYWRlcihpbnB1dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHJlYWRlci5wYXJzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgIShuYW1lID09PSB2YWx1ZS5nZXROYW1lKCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBhZGQgTkJUVGFnQ29tcG91bmQgd2l0aCBuYW1lICR7dmFsdWUuZ2V0TmFtZSgpfSBnaXZlbiBuYW1lICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQodGFnOiBOQlRUYWdDb21wb3VuZCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldCh0YWcuZ2V0TmFtZSgpISwgdGFnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGlzdChuYW1lOiBzdHJpbmcsIGluc2VydDogYm9vbGVhbik6IFNldDxhbnk+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc2VydCkge1xuICAgICAgICAgICAgY29uc3QgYmFja2luZ0xpc3Q6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBiYWNraW5nTGlzdCk7XG4gICAgICAgICAgICByZXR1cm4gYmFja2luZ0xpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG91bmQobmFtZTogc3RyaW5nLCBpbnNlcnQ6IGJvb2xlYW4pOiBOQlRUYWdDb21wb3VuZCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmdldChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvdW5kOiBOQlRUYWdDb21wb3VuZCA9IG5ldyBOQlRUYWdDb21wb3VuZCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBjb21wb3VuZCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcG91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVUb1N0cmVhbShvdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd3JpdGVyOiBOQlRXcml0ZXIgPSBuZXcgTkJUV3JpdGVyKG91dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgd3JpdGVyLndyaXRlQ29tcG91bmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5dGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBCeXRlVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaG9ydChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFNob3J0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1iZXIobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBOdW1iZXJWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExvbmcobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBMb25nVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGbG9hdChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIEZsb2F0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREb3VibGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBEb3VibGVWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0cmluZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFN0cmluZ1ZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgYW55XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5lbnRyaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zaXplO1xuICAgIH1cblxuICAgIC8vIFRoYW5rcyBzdGFja292ZXJmbG93ISBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTk0ODMzNS9ob3ctY2FuLWktY2hlY2staWYtdHdvLW1hcC1vYmplY3RzLWFyZS1lcXVhbFxuICAgIHB1YmxpYyBlcXVhbHModGhhdDogTkJUVGFnQ29tcG91bmQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uc2l6ZSAhPT0gdGhhdC5jaGlsZHJlbi5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgdGVzdFZhbCA9IHRoYXQuY2hpbGRyZW4uZ2V0KGtleSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0VmFsID09PSB1bmRlZmluZWQgJiYgIXRoYXQuY2hpbGRyZW4uaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgIXZhbC5lcXVhbHModGVzdFZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEb3VibGVWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIERvdWJsZVZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRmxvYXRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIEZsb2F0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOdW1iZXJWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIE51bWJlclZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU2hvcnRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFNob3J0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBTdHJpbmdWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFN0cmluZ1ZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgQnl0ZU9yZGVyIH0gZnJvbSAnLi9CeXRlT3JkZXInO1xuaW1wb3J0IEJ5dGVWYWwgZnJvbSAnLi90eXBlcy9CeXRlVmFsJztcbmltcG9ydCBEb3VibGVWYWwgZnJvbSAnLi90eXBlcy9Eb3VibGVWYWwnO1xuaW1wb3J0IEZsb2F0VmFsIGZyb20gJy4vdHlwZXMvRmxvYXRWYWwnO1xuaW1wb3J0IExvbmdWYWwgZnJvbSAnLi90eXBlcy9Mb25nVmFsJztcbmltcG9ydCB7IE5CVERlZmluaXRpb25zIH0gZnJvbSAnLi9OQlREZWZpbml0aW9ucyc7XG5pbXBvcnQgTkJUVGFnQ29tcG91bmQgZnJvbSAnLi9OQlRUYWdDb21wb3VuZCc7XG5pbXBvcnQgTnVtYmVyVmFsIGZyb20gJy4vdHlwZXMvTnVtYmVyVmFsJztcbmltcG9ydCBTaG9ydFZhbCBmcm9tICcuL3R5cGVzL1Nob3J0VmFsJztcbmltcG9ydCBTdHJpbmdWYWwgZnJvbSAnLi90eXBlcy9TdHJpbmdWYWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOQlRXcml0ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3JkZXI6IEJ5dGVPcmRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1ZjogQmluYXJ5U3RyZWFtO1xuXG4gICAgcHJpdmF0ZSB1c2VWYXJpbnQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpIHtcbiAgICAgICAgdGhpcy5idWYgPSBvdXQ7XG4gICAgICAgIHRoaXMub3JkZXIgPSBieXRlT3JkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFVzZVZhcmludCh1c2VWYXJpbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VWYXJpbnQgPSB1c2VWYXJpbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlTGlzdChsaXN0OiBTZXQ8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlVGFnSGVhZGVyKE5CVERlZmluaXRpb25zLlRBR19MSVNULCAnJyk7XG4gICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUobGlzdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlQ29tcG91bmQoY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVUYWdIZWFkZXIoTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5ELCBjb21wb3VuZC5nZXROYW1lKCkgPz8gJycpO1xuICAgICAgICB0aGlzLndyaXRlQ29tcG91bmRWYWx1ZShjb21wb3VuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZVRhZ0hlYWRlcih0eXBlOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHR5cGUpO1xuICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZVN0cmluZ1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbSh2YWx1ZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZVZhcmludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRWYXJJbnQoQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUoQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5idWYud3JpdGUoYnl0ZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlVmFyaW50KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVCeXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZUJ5dGUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVNob3J0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRTaG9ydExFKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRTaG9ydCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlSW50ZWdlclZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudXNlVmFyaW50KSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZVZhckludCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRJbnRMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZVVuc2lnbmVkSW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVMb25nVmFsdWUodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51c2VWYXJpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVmFyTG9uZyh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRMb25nTEUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5idWYud3JpdGVVbnNpZ25lZExvbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUZsb2F0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlRmxvYXRMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVEb3VibGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVyID09PSBCeXRlT3JkZXIuTElUVExFX0VORElBTikge1xuICAgICAgICAgICAgdGhpcy5idWYud3JpdGVEb3VibGVMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZURvdWJsZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlQnl0ZUFycmF5VmFsdWUodmFsdWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlSW50ZWdlclZhbHVlKHZhbHVlLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlSW50ZWdlckFycmF5VmFsdWUodmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyVmFsdWUodmFsdWUubGVuZ3RoKTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUxpc3RWYWx1ZSh2YWx1ZTogU2V0PGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0TmJ0VHlwZSA9IHRoaXMuZ2V0TkJUVHlwZUZyb21WYWx1ZSh2YWx1ZS5lbnRyaWVzKCkubmV4dCgpLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlVmFsdWUobGlzdE5idFR5cGUpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2YWx1ZS5zaXplKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmF3VmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpc3ROYnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHJhd1ZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUocmF3VmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfSU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19MT05HOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUxvbmdWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19GTE9BVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGbG9hdFZhbHVlKHJhd1ZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0RPVUJMRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVEb3VibGVWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19CWVRFX0FSUkFZOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZURvdWJsZVZhbHVlKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TVFJJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUocmF3VmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTElTVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUNvbXBvdW5kVmFsdWUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVF9BUlJBWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyQXJyYXlWYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOQlRUYWdUeXBlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGVWYWx1ZShOQlREZWZpbml0aW9ucy5UQUdfQllURSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlSW50ZWdlclZhbHVlKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUNvbXBvdW5kVmFsdWUoY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGNvbXBvdW5kLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgbmJ0VHlwZSA9IHRoaXMuZ2V0TkJUVHlwZUZyb21WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlVGFnSGVhZGVyKG5idFR5cGUsIGtleSk7XG4gICAgICAgICAgICBzd2l0Y2ggKG5idFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19CWVRFOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TSE9SVDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUodmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTE9ORzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUxvbmdWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfRkxPQVQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGbG9hdFZhbHVlKHZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVEb3VibGVWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfQllURV9BUlJBWTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGVBcnJheVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfU1RSSU5HOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUodmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xJU1Q6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19DT01QT1VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUNvbXBvdW5kVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlRfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTkJUVGFnVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZUJ5dGVWYWx1ZShOQlREZWZpbml0aW9ucy5UQUdfRU5EKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5CVFR5cGVGcm9tVmFsdWUodmFsdWU6IGFueSk6IE5CVERlZmluaXRpb25zIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnl0ZVZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19CWVRFO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNob3J0VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlclZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19JTlQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9uZ1ZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19MT05HO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX0ZMT0FUO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERvdWJsZVZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nVmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX1NUUklORztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBOQlREZWZpbml0aW9ucy5UQUdfTElTVDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19DT01QT1VORDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBOQlREZWZpbml0aW9ucy5UQUdfSU5UX0FSUkFZO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBOQlQgRGF0YTogQ2Fubm90IGRlZHVjZSBOQlQgdHlwZSBvZiBjbGFzcyAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9ICgke3ZhbHVlfSlgKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiTkJUU3RyZWFtUmVhZGVyIiwiTkJURGVmaW5pdGlvbnMiLCJBbGxvY2F0aW9uIiwiQmluYXJ5U3RyZWFtIiwiZnMiLCJCeXRlVmFsIiwiRG91YmxlVmFsIiwiRmxv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
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
require('./ByteOrder-C8lF6w2G.cjs');
|
|
6
|
+
require('./types/ByteVal.cjs.js');
|
|
7
|
+
require('./types/DoubleVal.cjs.js');
|
|
8
|
+
require('./types/FloatVal.cjs.js');
|
|
9
|
+
require('./types/LongVal.cjs.js');
|
|
10
|
+
require('./NBTDefinitions-DUnu0laJ.cjs');
|
|
11
|
+
const NBTReader = require('./NBTWriter-KG_h2i_E.cjs');
|
|
12
|
+
require('./types/NumberVal.cjs.js');
|
|
13
|
+
require('./types/ShortVal.cjs.js');
|
|
14
|
+
require('./types/StringVal.cjs.js');
|
|
15
|
+
require('node:fs');
|
|
16
|
+
require('@jsprismarine/jsbinaryutils');
|
|
17
|
+
require('./Allocation.cjs.js');
|
|
18
|
+
require('./NBTStreamReader.cjs.js');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
exports.default = NBTReader.NBTWriter;
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUV3JpdGVyLmNqcy5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
|