@oathompsonjones/mini-games 1.0.1 → 1.0.3

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.
@@ -4,10 +4,12 @@
4
4
  * Provides non-static equivalents to the above operations, which are carried out in place.
5
5
  */
6
6
  export default class LongInt {
7
+ /** Holds the array of 32-bit numbers. */
8
+ data;
7
9
  /**
8
- * Holds the array of 32-bit numbers.
10
+ * Creates an instance of LongInt.
11
+ * @param args The arguments to construct the `LongInt` out of.
9
12
  */
10
- data;
11
13
  constructor(args) {
12
14
  if (args instanceof Array || args instanceof Uint32Array)
13
15
  this.data = new Uint32Array(args);
@@ -16,15 +18,12 @@ export default class LongInt {
16
18
  else
17
19
  this.data = new Uint32Array(args).fill(0);
18
20
  }
19
- /**
20
- * Gets the number of 32-bit words which make the LongInt.
21
- */
21
+ /** Gets the number of 32-bit words which make the LongInt. */
22
22
  get wordCount() {
23
23
  return this.data.length;
24
24
  }
25
25
  /**
26
26
  * Carries out a bitwise and (&) operation on the two numbers.
27
- *
28
27
  * @param left The left number.
29
28
  * @param right The right number.
30
29
  * @returns The result of left & right.
@@ -34,7 +33,6 @@ export default class LongInt {
34
33
  }
35
34
  /**
36
35
  * Carries out a bitwise or (|) operation on the two numbers.
37
- *
38
36
  * @param left The left number.
39
37
  * @param right The right number.
40
38
  * @returns The result of left | right.
@@ -44,7 +42,6 @@ export default class LongInt {
44
42
  }
45
43
  /**
46
44
  * Carries out a bitwise xor (^) operation on the two numbers.
47
- *
48
45
  * @param left The left number.
49
46
  * @param right The right number.
50
47
  * @returns The result of left ^ right.
@@ -54,7 +51,6 @@ export default class LongInt {
54
51
  }
55
52
  /**
56
53
  * Carries out a bitwise not (~) operation on the number.
57
- *
58
54
  * @param number The number to negate.
59
55
  * @returns The result of ~number.
60
56
  */
@@ -63,7 +59,6 @@ export default class LongInt {
63
59
  }
64
60
  /**
65
61
  * Carries out a bitwise left shift (<<) operation on the number.
66
- *
67
62
  * @param number The number to shift.
68
63
  * @param shiftAmount The number of places to shift.
69
64
  * @returns The result of number << shiftAmount.
@@ -73,7 +68,6 @@ export default class LongInt {
73
68
  }
74
69
  /**
75
70
  * Carries out a bitwise unsigned right shift (>>>) operation on the number.
76
- *
77
71
  * @param number The number to shift.
78
72
  * @param shiftAmount The number of places to shift.
79
73
  * @returns The result of number >>> shiftAmount.
@@ -83,7 +77,6 @@ export default class LongInt {
83
77
  }
84
78
  /**
85
79
  * Carries out a bitwise arithmetic right shift (>>) operation on the number.
86
- *
87
80
  * @param number The number to shift.
88
81
  * @param shiftAmount The number of places to shift.
89
82
  * @returns The result of number >> shiftAmount.
@@ -93,7 +86,6 @@ export default class LongInt {
93
86
  }
94
87
  /**
95
88
  * Determines whether or not 2 LongInts have equal values.
96
- *
97
89
  * @param longInt1 The first LongInt.
98
90
  * @param longInt2 The second LongInt (can also be a number).
99
91
  * @returns Whether or not they are equal.
@@ -101,12 +93,17 @@ export default class LongInt {
101
93
  static equals(longInt1, longInt2) {
102
94
  return longInt1.equals(longInt2);
103
95
  }
96
+ /**
97
+ * Creates a LongInt with the same dimensions as this one, using the given input.
98
+ * @param longInt The LongInt to match the dimensions of.
99
+ * @param value The value of the LongInt.
100
+ * @returns The new LongInt.
101
+ */
104
102
  static getMatchingLongInt(longInt, value = 0) {
105
103
  return new LongInt(longInt).getMatchingLongInt(value);
106
104
  }
107
105
  /**
108
106
  * Carries out an in-place bitwise and (&) operation on this number and the one provided.
109
- *
110
107
  * @param right The right number.
111
108
  * @returns The new value of this & right.
112
109
  */
@@ -118,7 +115,6 @@ export default class LongInt {
118
115
  }
119
116
  /**
120
117
  * Carries out an in-place bitwise or (|) operation on this number and the one provided.
121
- *
122
118
  * @param right The right number.
123
119
  * @returns The new value of this | right.
124
120
  */
@@ -130,7 +126,6 @@ export default class LongInt {
130
126
  }
131
127
  /**
132
128
  * Carries out an in-place bitwise xor (^) operation on this number and the one provided.
133
- *
134
129
  * @param right The right number.
135
130
  * @returns The new value of this ^ right.
136
131
  */
@@ -142,7 +137,6 @@ export default class LongInt {
142
137
  }
143
138
  /**
144
139
  * Carries out an in-place bitwise not (~) operation on this nurmbe.
145
- *
146
140
  * @returns The result of ~this.
147
141
  */
148
142
  not() {
@@ -152,7 +146,6 @@ export default class LongInt {
152
146
  }
153
147
  /**
154
148
  * Carries out an in-place bitwise left shift (<<) operation on this number.
155
- *
156
149
  * @param shiftAmount The number of places to shift.
157
150
  * @returns The result of this << shiftAmount.
158
151
  */
@@ -170,7 +163,6 @@ export default class LongInt {
170
163
  }
171
164
  /**
172
165
  * Carries out an in-place bitwise unsigned right shift (>>>) operation on this number.
173
- *
174
166
  * @param shiftAmount The number of places to shift.
175
167
  * @returns The result of this >>> shiftAmount.
176
168
  */
@@ -188,7 +180,6 @@ export default class LongInt {
188
180
  }
189
181
  /**
190
182
  * Carries out an in-place bitwise arithmetic right shift (>>) operation on this number.
191
- *
192
183
  * @param shiftAmount The number of places to shift.
193
184
  * @returns The result of this >> shiftAmount.
194
185
  */
@@ -206,7 +197,6 @@ export default class LongInt {
206
197
  }
207
198
  /**
208
199
  * Determines whether or not this LongInt has equal value to another.
209
- *
210
200
  * @param value The LongInt or number to compare to.
211
201
  * @returns Whether or not they are equal.
212
202
  */
@@ -223,7 +213,6 @@ export default class LongInt {
223
213
  }
224
214
  /**
225
215
  * Returns a string representation of the LongInt.
226
- *
227
216
  * @param type The base of the string to print.
228
217
  * @returns The string representation.
229
218
  */
@@ -245,6 +234,11 @@ export default class LongInt {
245
234
  .map((num) => num.toString(type).padStart(padLength, "0"))
246
235
  .join(" ");
247
236
  }
237
+ /**
238
+ * Creates a LongInt with the same dimensions as this one, using the given input.
239
+ * @param value The value of the LongInt.
240
+ * @returns The new LongInt.
241
+ */
248
242
  getMatchingLongInt(value = 0) {
249
243
  let integers = [];
250
244
  switch (true) {
@@ -280,7 +274,6 @@ export default class LongInt {
280
274
  }
281
275
  /**
282
276
  * Shifts the 32-bit number array to the right.
283
- *
284
277
  * @param count How many places to shift the array.
285
278
  * @param fillValue The value to fill empty spaces with.
286
279
  * @returns The new value of this.
@@ -294,7 +287,6 @@ export default class LongInt {
294
287
  }
295
288
  /**
296
289
  * Shifts the 32-bit number array to the left.
297
- *
298
290
  * @param count How many places to shift the array.
299
291
  * @param fillValue The value to fill empty spaces with.
300
292
  * @returns The new value of this.
@@ -307,4 +299,4 @@ export default class LongInt {
307
299
  return this;
308
300
  }
309
301
  }
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXRCb2FyZC9sb25nSW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDeEI7O09BRUc7SUFDYSxJQUFJLENBQWM7SUFvQmxDLFlBQW1CLElBQStDO1FBQzlELElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksV0FBVztZQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDLElBQUksSUFBSSxZQUFZLE9BQU87WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRXZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNwRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFhLEVBQUUsS0FBdUI7UUFDbkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQXVCO1FBQ3BELE9B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QUcsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQixDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTdHJpbmdUeXBlID0gMiB8IDEwIHwgMTY7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxvbmcgaW50ZWdlciB1c2luZyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqIFByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFsdWVzLlxuICogUHJvdmlkZXMgbm9uLXN0YXRpYyBlcXVpdmFsZW50cyB0byB0aGUgYWJvdmUgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGNhcnJpZWQgb3V0IGluIHBsYWNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb25nSW50IHtcbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgYXJyYXkgb2YgMzItYml0IG51bWJlcnMuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IFVpbnQzMkFycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlcyBBIGxpdHRsZS1lbmRpYW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gZmlsbCB0aGUgYExvbmdJbnRgLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdIHwgVWludDMyQXJyYXkpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiAzMi1iaXQgbnVtYmVycyB0byBjb25zdHJ1Y3QgdGhlIGBMb25nSW50YCBvdXQgb2YuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBBIGBMb25nSW50YCBvYmplY3QgdG8gZHVwbGljYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihsb25nSW50OiBMb25nSW50KTtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJnczogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKGFyZ3MgaW5zdGFuY2VvZiBBcnJheSB8fCBhcmdzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoYXJncyk7XG4gICAgICAgIGVsc2UgaWYgKGFyZ3MgaW5zdGFuY2VvZiBMb25nSW50KVxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGFyZ3MuZGF0YSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShhcmdzKS5maWxsKDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgd2hpY2ggbWFrZSB0aGUgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdvcmRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxlZnQgVGhlIGxlZnQgbnVtYmVyLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbGVmdCAmIHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYW5kKGxlZnQ6IExvbmdJbnQsIHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsZWZ0KS5hbmQocmlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uIG9uIHRoZSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgfCByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG9yKGxlZnQ6IExvbmdJbnQsIHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsZWZ0KS5vcihyaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIHhvciAoXikgb3BlcmF0aW9uIG9uIHRoZSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHhvcihsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkueG9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+bnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbm90KG51bWJlcjogTG9uZ0ludCk6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5ub3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgbGVmdCBzaGlmdCAoPDwpIG9wZXJhdGlvbiBvbiB0aGUgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIHNoaWZ0LlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIG51bWJlciA8PCBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGxlZnRTaGlmdChudW1iZXI6IExvbmdJbnQsIHNoaWZ0QW1vdW50OiBudW1iZXIpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KG51bWJlcikubGVmdFNoaWZ0KHNoaWZ0QW1vdW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgdW5zaWduZWQgcmlnaHQgc2hpZnQgKD4+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLnJpZ2h0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXJpdGhtZXRpY1JpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLmFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IDIgTG9uZ0ludHMgaGF2ZSBlcXVhbCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludDEgVGhlIGZpcnN0IExvbmdJbnQuXG4gICAgICogQHBhcmFtIGxvbmdJbnQyIFRoZSBzZWNvbmQgTG9uZ0ludCAoY2FuIGFsc28gYmUgYSBudW1iZXIpLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZXF1YWxzKGxvbmdJbnQxOiBMb25nSW50LCBsb25nSW50MjogTG9uZ0ludCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbG9uZ0ludDEuZXF1YWxzKGxvbmdJbnQyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgTG9uZ0ludCBvYmplY3QgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZXMgQW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWVzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBUaGUgTG9uZ0ludCB0byBtYXRjaCB0aGUgZGltZW5zaW9ucyBvZi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICBwdWJsaWMgc3RhdGljIGdldE1hdGNoaW5nTG9uZ0ludChsb25nSW50OiBMb25nSW50LCB2YWx1ZTogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIgPSAwKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsb25nSW50KS5nZXRNYXRjaGluZ0xvbmdJbnQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gJj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIG9yICh8KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgfCByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3IocmlnaHQ6IExvbmdJbnQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgcmlnaHRMb25nSW50ID0gdGhpcy5nZXRNYXRjaGluZ0xvbmdJbnQocmlnaHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSB8PSByaWdodExvbmdJbnQuZGF0YVtpXSE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgeG9yKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gXj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIG5vdCAofikgb3BlcmF0aW9uIG9uIHRoaXMgbnVybWJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+dGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm90KCk6IHRoaXMge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IH50aGlzLmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZWZ0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID4gMzEpXG4gICAgICAgICAgICB0aGlzLnNoaWZ0QXJyYXlSaWdodChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpKTtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hIDw8IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgLSAxXSEgPj4+IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSB1bnNpZ25lZCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzID4+PiBzaGlmdEFtb3VudC5cbiAgICAqL1xuICAgIHB1YmxpYyByaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IHRoaXMuZGF0YVtpXSEgPj4+IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgKyAxXSEgPDwgMzIgLSBzaW5nbGVTaGlmdEFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheUxlZnQoTWF0aC5mbG9vcihzaGlmdEFtb3VudCAvIDMyKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgYXJpdGhtZXRpYyByaWdodCBzaGlmdCAoPj4pIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoaXMgPj4gc2hpZnRBbW91bnQuXG4gICAgICovXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IHRoaXMuZGF0YVtpXSEgPj4gc2luZ2xlU2hpZnRBbW91bnQgfCB0aGlzLmRhdGFbaSArIDFdISA8PCAzMiAtIHNpbmdsZVNoaWZ0QW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCA+IDMxKVxuICAgICAgICAgICAgdGhpcy5zaGlmdEFycmF5TGVmdChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpLCB+MCA+Pj4gMCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBMb25nSW50IGhhcyBlcXVhbCB2YWx1ZSB0byBhbm90aGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBMb25nSW50IG9yIG51bWJlciB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExvbmdJbnQgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbG9uZ0ludCA9IHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludCA/IHZhbHVlIDogbmV3IExvbmdJbnQoW3ZhbHVlXSk7XG4gICAgICAgIGNvbnN0IGxvbmdlc3RMb25nSW50ID0gdGhpcy5kYXRhLmxlbmd0aCA+IGxvbmdJbnQuZGF0YS5sZW5ndGggPyB0aGlzIDogbG9uZ0ludDtcbiAgICAgICAgY29uc3QgbG9uZ0ludDEgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludChsb25nZXN0TG9uZ0ludCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IGxvbmdJbnQyID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQobG9uZ2VzdExvbmdJbnQsIGxvbmdJbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvbmdlc3RMb25nSW50LmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb25nSW50MS5kYXRhW2ldICE9PSBsb25nSW50Mi5kYXRhW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nSW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIGJhc2Ugb2YgdGhlIHN0cmluZyB0byBwcmludC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1N0cmluZyh0eXBlOiBTdHJpbmdUeXBlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhZExlbmd0aCA9IDA7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHBhZExlbmd0aCA9IDMyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICBwYWRMZW5ndGggPSAxMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgcGFkTGVuZ3RoID0gODtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZGF0YV1cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKG51bSkgPT4gbnVtLnRvU3RyaW5nKHR5cGUpLnBhZFN0YXJ0KHBhZExlbmd0aCwgXCIwXCIpKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvbmdJbnQgVGhlIExvbmdJbnQgb2JqZWN0IHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZXMgQW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNYXRjaGluZ0xvbmdJbnQodmFsdWVzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTG9uZ0ludCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvbnMgYXMgdGhpcyBvbmUsIHVzaW5nIHRoZSBnaXZlbiBpbnB1dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlcik6IExvbmdJbnQ7XG4gICAgcHJpdmF0ZSBnZXRNYXRjaGluZ0xvbmdJbnQodmFsdWU6IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyID0gMCk6IExvbmdJbnQge1xuICAgICAgICBsZXQgaW50ZWdlcnM6IG51bWJlcltdIHwgVWludDMyQXJyYXkgPSBbXTtcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXk6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gWy4uLnZhbHVlLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB2YWx1ZSBpbnN0YW5jZW9mIExvbmdJbnQ6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRhdGEubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbLi4udmFsdWUuZGF0YSwgLi4uQXJyYXk8bnVtYmVyPih0aGlzLmRhdGEubGVuZ3RoIC0gdmFsdWUuZGF0YS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmRhdGEubGVuZ3RoID4gdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5kYXRhLnNsaWNlKDAsIHRoaXMuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5kYXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5OlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IFsuLi52YWx1ZSwgLi4uQXJyYXk8bnVtYmVyPih0aGlzLmRhdGEubGVuZ3RoIC0gdmFsdWUubGVuZ3RoKS5maWxsKDApXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbdmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIDEpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChpbnRlZ2Vycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hpZnRzIHRoZSAzMi1iaXQgbnVtYmVyIGFycmF5IHRvIHRoZSByaWdodC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheVJpZ2h0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheUxlZnQoLWNvdW50LCBmaWxsVmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICAgICAgdGhpcy5kYXRhW2ldID0gdGhpcy5kYXRhW2kgLSBjb3VudF0gPz8gZmlsbFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGlmdHMgdGhlIDMyLWJpdCBudW1iZXIgYXJyYXkgdG8gdGhlIGxlZnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY291bnQgSG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0IHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0gZmlsbFZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVtcHR5IHNwYWNlcyB3aXRoLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgdmFsdWUgb2YgdGhpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNoaWZ0QXJyYXlMZWZ0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheVJpZ2h0KC1jb3VudCwgZmlsbFZhbHVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaSArIGNvdW50XSA/PyBmaWxsVmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXRCb2FyZC9sb25nSW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDeEIseUNBQXlDO0lBQ3pCLElBQUksQ0FBYztJQWlCbEM7OztPQUdHO0lBQ0gsWUFBbUIsSUFBK0M7UUFDOUQsSUFBSSxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxXQUFXO1lBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakMsSUFBSSxJQUFJLFlBQVksT0FBTztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFdkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNwRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxL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QixDQUFDO1FBQ3hELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQixDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUVyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTdHJpbmdUeXBlID0gMiB8IDEwIHwgMTY7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxvbmcgaW50ZWdlciB1c2luZyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqIFByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFsdWVzLlxuICogUHJvdmlkZXMgbm9uLXN0YXRpYyBlcXVpdmFsZW50cyB0byB0aGUgYWJvdmUgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGNhcnJpZWQgb3V0IGluIHBsYWNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb25nSW50IHtcbiAgICAvKiogSG9sZHMgdGhlIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBVaW50MzJBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gdmFsdWVzIEEgbGl0dGxlLWVuZGlhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycyB0byBmaWxsIHRoZSBgTG9uZ0ludGAuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlczogbnVtYmVyW10gfCBVaW50MzJBcnJheSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiAzMi1iaXQgbnVtYmVycyB0byBjb25zdHJ1Y3QgdGhlIGBMb25nSW50YCBvdXQgb2YuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnQuXG4gICAgICogQHBhcmFtIGxvbmdJbnQgQSBgTG9uZ0ludGAgb2JqZWN0IHRvIGR1cGxpY2F0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobG9uZ0ludDogTG9uZ0ludCk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqIEBwYXJhbSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gY29uc3RydWN0IHRoZSBgTG9uZ0ludGAgb3V0IG9mLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhcmdzOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlcikge1xuICAgICAgICBpZiAoYXJncyBpbnN0YW5jZW9mIEFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShhcmdzKTtcbiAgICAgICAgZWxzZSBpZiAoYXJncyBpbnN0YW5jZW9mIExvbmdJbnQpXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoYXJncy5kYXRhKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGFyZ3MpLmZpbGwoMCk7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgd2hpY2ggbWFrZSB0aGUgTG9uZ0ludC4gKi9cbiAgICBwdWJsaWMgZ2V0IHdvcmRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFuZChsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkuYW5kKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugb3IgKHwpIG9wZXJhdGlvbiBvbiB0aGUgdHdvIG51bWJlcnMuXG4gICAgICogQHBhcmFtIGxlZnQgVGhlIGxlZnQgbnVtYmVyLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbGVmdCB8IHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgb3IobGVmdDogTG9uZ0ludCwgcmlnaHQ6IExvbmdJbnQgfCBudW1iZXIpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGxlZnQpLm9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHhvcihsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkueG9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gbmVnYXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2Ygfm51bWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG5vdChudW1iZXI6IExvbmdJbnQpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KG51bWJlcikubm90KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbGVmdFNoaWZ0KG51bWJlcjogTG9uZ0ludCwgc2hpZnRBbW91bnQ6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5sZWZ0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSB1bnNpZ25lZCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLnJpZ2h0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIHNoaWZ0LlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIG51bWJlciA+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KG51bWJlcjogTG9uZ0ludCwgc2hpZnRBbW91bnQ6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5hcml0aG1ldGljUmlnaHRTaGlmdChzaGlmdEFtb3VudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCAyIExvbmdJbnRzIGhhdmUgZXF1YWwgdmFsdWVzLlxuICAgICAqIEBwYXJhbSBsb25nSW50MSBUaGUgZmlyc3QgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gbG9uZ0ludDIgVGhlIHNlY29uZCBMb25nSW50IChjYW4gYWxzbyBiZSBhIG51bWJlcikuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhleSBhcmUgZXF1YWwuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlcXVhbHMobG9uZ0ludDE6IExvbmdJbnQsIGxvbmdJbnQyOiBMb25nSW50IHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBsb25nSW50MS5lcXVhbHMobG9uZ0ludDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgTG9uZ0ludCBvYmplY3QgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBUaGUgTG9uZ0ludCB0byBtYXRjaCB0aGUgZGltZW5zaW9ucyBvZi5cbiAgICAgKiBAcGFyYW0gdmFsdWVzIEFuIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlczogbnVtYmVyW10gfCBVaW50MzJBcnJheSk6IExvbmdJbnQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBMb25nSW50IG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIDMyLWJpdCBudW1iZXIgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU/OiBudW1iZXIpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nSW50IHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBhcyB0aGlzIG9uZSwgdXNpbmcgdGhlIGdpdmVuIGlucHV0LlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlciA9IDApOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGxvbmdJbnQpLmdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBhbmQgKCYpIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlciBhbmQgdGhlIG9uZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSAmPSByaWdodExvbmdJbnQuZGF0YVtpXSE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uIG9uIHRoaXMgbnVtYmVyIGFuZCB0aGUgb25lIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgdmFsdWUgb2YgdGhpcyB8IHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvcihyaWdodDogTG9uZ0ludCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICBjb25zdCByaWdodExvbmdJbnQgPSB0aGlzLmdldE1hdGNoaW5nTG9uZ0ludChyaWdodCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gfD0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHJpZ2h0IFRoZSByaWdodCBudW1iZXIuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzIF4gcmlnaHQuXG4gICAgICovXG4gICAgcHVibGljIHhvcihyaWdodDogTG9uZ0ludCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICBjb25zdCByaWdodExvbmdJbnQgPSB0aGlzLmdldE1hdGNoaW5nTG9uZ0ludChyaWdodCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gXj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhpcyBudXJtYmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+dGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm90KCk6IHRoaXMge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IH50aGlzLmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgbGVmdCBzaGlmdCAoPDwpIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZWZ0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheVJpZ2h0KE1hdGguZmxvb3Ioc2hpZnRBbW91bnQgLyAzMikpO1xuXG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hIDw8IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgLSAxXSEgPj4+IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIHVuc2lnbmVkIHJpZ2h0IHNoaWZ0ICg+Pj4pIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzID4+PiBzaGlmdEFtb3VudC5cbiAgICAqL1xuICAgIHB1YmxpYyByaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hID4+PiBzaW5nbGVTaGlmdEFtb3VudCB8IHRoaXMuZGF0YVtpICsgMV0hIDw8IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheUxlZnQoTWF0aC5mbG9vcihzaGlmdEFtb3VudCAvIDMyKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoaXMgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoaXMgPj4gc2hpZnRBbW91bnQuXG4gICAgICovXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hID4+IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgKyAxXSEgPDwgMzIgLSBzaW5nbGVTaGlmdEFtb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlmdEFtb3VudCA+IDMxKVxuICAgICAgICAgICAgdGhpcy5zaGlmdEFycmF5TGVmdChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpLCB+MCA+Pj4gMCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIExvbmdJbnQgaGFzIGVxdWFsIHZhbHVlIHRvIGFub3RoZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBMb25nSW50IG9yIG51bWJlciB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExvbmdJbnQgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbG9uZ0ludCA9IHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludCA/IHZhbHVlIDogbmV3IExvbmdJbnQoW3ZhbHVlXSk7XG4gICAgICAgIGNvbnN0IGxvbmdlc3RMb25nSW50ID0gdGhpcy5kYXRhLmxlbmd0aCA+IGxvbmdJbnQuZGF0YS5sZW5ndGggPyB0aGlzIDogbG9uZ0ludDtcbiAgICAgICAgY29uc3QgbG9uZ0ludDEgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludChsb25nZXN0TG9uZ0ludCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IGxvbmdJbnQyID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQobG9uZ2VzdExvbmdJbnQsIGxvbmdJbnQpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9uZ2VzdExvbmdJbnQuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvbmdJbnQxLmRhdGFbaV0gIT09IGxvbmdJbnQyLmRhdGFbaV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgYmFzZSBvZiB0aGUgc3RyaW5nIHRvIHByaW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKHR5cGU6IFN0cmluZ1R5cGUpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcGFkTGVuZ3RoID0gMDtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBwYWRMZW5ndGggPSAzMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgcGFkTGVuZ3RoID0gMTA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgIHBhZExlbmd0aCA9IDg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZGF0YV1cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKG51bSkgPT4gbnVtLnRvU3RyaW5nKHR5cGUpLnBhZFN0YXJ0KHBhZExlbmd0aCwgXCIwXCIpKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IG9iamVjdCB0byB1c2UgYXMgdGhlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludChsb25nSW50OiBMb25nSW50KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICogQHBhcmFtIHZhbHVlcyBBbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycyB0byB1c2UgYXMgdGhlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZXM6IG51bWJlcltdIHwgVWludDMyQXJyYXkpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTG9uZ0ludCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvbnMgYXMgdGhpcyBvbmUsIHVzaW5nIHRoZSBnaXZlbiBpbnB1dC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBMb25nSW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZTogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nSW50IHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBhcyB0aGlzIG9uZSwgdXNpbmcgdGhlIGdpdmVuIGlucHV0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlciA9IDApOiBMb25nSW50IHtcbiAgICAgICAgbGV0IGludGVnZXJzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5ID0gW107XG5cbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXk6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gWy4uLnZhbHVlLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGF0YS5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IFsuLi52YWx1ZS5kYXRhLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5kYXRhLmxlbmd0aCkuZmlsbCgwKV07XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZGF0YS5sZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLmRhdGEuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLmRhdGE7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdmFsdWUgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbLi4udmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIHZhbHVlLmxlbmd0aCkuZmlsbCgwKV07XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbdmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIDEpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGludGVnZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGlmdHMgdGhlIDMyLWJpdCBudW1iZXIgYXJyYXkgdG8gdGhlIHJpZ2h0LlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheVJpZ2h0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheUxlZnQoLWNvdW50LCBmaWxsVmFsdWUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaSAtIGNvdW50XSA/PyBmaWxsVmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hpZnRzIHRoZSAzMi1iaXQgbnVtYmVyIGFycmF5IHRvIHRoZSBsZWZ0LlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheUxlZnQoY291bnQ6IG51bWJlciwgZmlsbFZhbHVlOiBudW1iZXIgPSAwKTogdGhpcyB7XG4gICAgICAgIGlmIChjb3VudCA8IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGlmdEFycmF5UmlnaHQoLWNvdW50LCBmaWxsVmFsdWUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5kYXRhW2ldID0gdGhpcy5kYXRhW2kgKyBjb3VudF0gPz8gZmlsbFZhbHVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,46 +1,104 @@
1
1
  import BitBoard from "./bitBoard.js";
2
2
  import LongInt from "./longInt.js";
3
- /**
4
- * A BitBoard which uses an array of 32-bit numbers.
5
- */
3
+ /** A BitBoard which uses an array of 32-bit numbers. */
6
4
  export default class LongIntBitBoard extends BitBoard<LongInt> {
7
5
  /**
8
6
  * Creates an instance of LongIntBitBoard.
9
- *
10
7
  * @param longInt The data to fill the BitBoard with.
11
8
  */
12
9
  constructor(longInt: LongInt);
13
10
  /**
14
11
  * Creates an instance of LongIntBitBoard.
15
- *
16
12
  * @param uint32Array The data to fill the BitBoard with.
17
13
  */
18
14
  constructor(uint32Array: Uint32Array);
19
15
  /**
20
16
  * Creates an instance of LongIntBitBoard.
21
- *
22
17
  * @param numberArray The data to fill the BitBoard with.
23
18
  */
24
19
  constructor(numberArray: number[]);
25
20
  /**
26
21
  * Creates an instance of LongIntBitBoard.
27
- *
28
22
  * @param length The length of the LongInt.
29
23
  */
30
24
  constructor(length: number);
25
+ /**
26
+ * Gets the value of a given bit.
27
+ * @param bit The bit to get.
28
+ * @returns The value of the bit.
29
+ */
31
30
  getBit(bit: number): 0 | 1;
31
+ /**
32
+ * Sets the value for a given bit to 1.
33
+ * @param bit The bit to set.
34
+ */
32
35
  setBit(bit: number): void;
36
+ /**
37
+ * Sets the value for a given bit to 0.
38
+ * @param bit The bit to clear.
39
+ */
33
40
  clearBit(bit: number): void;
41
+ /**
42
+ * Toggles the data for a given bit between 0 and 1.
43
+ * @param bit The bit to toggle.
44
+ */
34
45
  toggleBit(bit: number): void;
46
+ /** Sets all bits to 0. */
35
47
  clearAll(): void;
48
+ /** Sets all bits to 1. */
36
49
  setAll(): void;
50
+ /**
51
+ * Gets a given number of bits.
52
+ * @param LSB The least significant bit to get.
53
+ * @param numberOfBits The number of bits to get.
54
+ * @returns The bits.
55
+ */
37
56
  getBits(LSB: number, numberOfBits: number): LongInt;
57
+ /**
58
+ * Carries out a bitwise and (&) operation.
59
+ * @param right The right value.
60
+ * @returns The result.
61
+ */
38
62
  and(right: LongIntBitBoard | number): this;
63
+ /**
64
+ * Carries out a bitwise or (|) operation.
65
+ * @param right The right value.
66
+ * @returns The result.
67
+ */
39
68
  or(right: LongIntBitBoard | number): this;
69
+ /**
70
+ * Carries out a bitwise xor (^) operation.
71
+ * @param right The right value.
72
+ * @returns The result.
73
+ */
40
74
  xor(right: LongIntBitBoard | number): this;
75
+ /**
76
+ * Carries out a bitwise not (~) operation.
77
+ * @returns The result.
78
+ */
41
79
  not(): this;
80
+ /**
81
+ * Carries out a bitwise left shift (<<) operation.
82
+ * @param shiftAmount How much to shift it by.
83
+ * @returns The result.
84
+ */
42
85
  leftShift(shiftAmount: number): this;
86
+ /**
87
+ * Carries out a bitwise logical right shift (>>>) operation.
88
+ * @param shiftAmount How much to shift it by.
89
+ * @returns The result.
90
+ */
43
91
  rightShift(shiftAmount: number): this;
92
+ /**
93
+ * Carries out a bitwise arithmetic right shift (>>) operation.
94
+ * @param shiftAmount How much to shift it by.
95
+ * @returns The result.
96
+ */
44
97
  arithmeticRightShift(shiftAmount: number): this;
98
+ /**
99
+ * Checks if two BitBoards have equal data values.
100
+ * @param value The value to compare against.
101
+ * @returns Whether or not the two BitBoard have the same data value.
102
+ */
45
103
  equals(value: LongInt | LongIntBitBoard | number): boolean;
46
104
  }
@@ -1,9 +1,11 @@
1
1
  import BitBoard from "./bitBoard.js";
2
2
  import LongInt from "./longInt.js";
3
- /**
4
- * A BitBoard which uses an array of 32-bit numbers.
5
- */
3
+ /** A BitBoard which uses an array of 32-bit numbers. */
6
4
  export default class LongIntBitBoard extends BitBoard {
5
+ /**
6
+ * Creates an instance of LongIntBitBoard.
7
+ * @param args The data to fill the BitBoard with.
8
+ */
7
9
  constructor(args) {
8
10
  switch (true) {
9
11
  case args === undefined:
@@ -18,35 +20,62 @@ export default class LongIntBitBoard extends BitBoard {
18
20
  case typeof args === "number":
19
21
  super(new LongInt(Array(args).fill(0)));
20
22
  break;
23
+ default:
24
+ throw new Error("Invalid constructor arguments.");
21
25
  }
22
26
  }
27
+ /**
28
+ * Gets the value of a given bit.
29
+ * @param bit The bit to get.
30
+ * @returns The value of the bit.
31
+ */
23
32
  getBit(bit) {
24
33
  return LongInt.rightShift(this._data, bit).and(1).data[0];
25
34
  }
35
+ /**
36
+ * Sets the value for a given bit to 1.
37
+ * @param bit The bit to set.
38
+ */
26
39
  setBit(bit) {
27
40
  const mask = LongInt.getMatchingLongInt(this._data, 1)
28
41
  .leftShift(bit);
29
42
  this._data.or(mask);
30
43
  }
44
+ /**
45
+ * Sets the value for a given bit to 0.
46
+ * @param bit The bit to clear.
47
+ */
31
48
  clearBit(bit) {
32
49
  const mask = LongInt.getMatchingLongInt(this._data, 1)
33
50
  .leftShift(bit)
34
51
  .not();
35
52
  this._data.and(mask);
36
53
  }
54
+ /**
55
+ * Toggles the data for a given bit between 0 and 1.
56
+ * @param bit The bit to toggle.
57
+ */
37
58
  toggleBit(bit) {
38
59
  const mask = LongInt.getMatchingLongInt(this._data, 1)
39
60
  .leftShift(bit);
40
61
  this._data.xor(mask);
41
62
  }
63
+ /** Sets all bits to 0. */
42
64
  clearAll() {
43
65
  for (let i = 0; i < this._data.data.length; i++)
44
66
  this._data.data[i] = 0;
45
67
  }
68
+ /** Sets all bits to 1. */
46
69
  setAll() {
47
70
  for (let i = 0; i < this._data.data.length; i++)
48
71
  this._data.data[i] = ~0 >>> 0;
49
72
  }
73
+ /**
74
+ * Gets a given number of bits.
75
+ * @param LSB The least significant bit to get.
76
+ * @param numberOfBits The number of bits to get.
77
+ * @returns The bits.
78
+ */
50
79
  getBits(LSB, numberOfBits) {
51
80
  const arr = [];
52
81
  const arrLength = Math.ceil(numberOfBits / 32);
@@ -57,29 +86,68 @@ export default class LongIntBitBoard extends BitBoard {
57
86
  const bits = LongInt.rightShift(LongInt.and(this._data, mask), LSB);
58
87
  return bits;
59
88
  }
89
+ /**
90
+ * Carries out a bitwise and (&) operation.
91
+ * @param right The right value.
92
+ * @returns The result.
93
+ */
60
94
  and(right) {
61
95
  return new LongIntBitBoard(LongInt.and(this._data, right instanceof LongIntBitBoard ? right.data : right));
62
96
  }
97
+ /**
98
+ * Carries out a bitwise or (|) operation.
99
+ * @param right The right value.
100
+ * @returns The result.
101
+ */
63
102
  or(right) {
64
103
  return new LongIntBitBoard(LongInt.or(this._data, right instanceof LongIntBitBoard ? right.data : right));
65
104
  }
105
+ /**
106
+ * Carries out a bitwise xor (^) operation.
107
+ * @param right The right value.
108
+ * @returns The result.
109
+ */
66
110
  xor(right) {
67
111
  return new LongIntBitBoard(LongInt.xor(this._data, right instanceof LongIntBitBoard ? right.data : right));
68
112
  }
113
+ /**
114
+ * Carries out a bitwise not (~) operation.
115
+ * @returns The result.
116
+ */
69
117
  not() {
70
118
  return new LongIntBitBoard(LongInt.not(this._data));
71
119
  }
120
+ /**
121
+ * Carries out a bitwise left shift (<<) operation.
122
+ * @param shiftAmount How much to shift it by.
123
+ * @returns The result.
124
+ */
72
125
  leftShift(shiftAmount) {
73
126
  return new LongIntBitBoard(LongInt.leftShift(this._data, shiftAmount));
74
127
  }
128
+ /**
129
+ * Carries out a bitwise logical right shift (>>>) operation.
130
+ * @param shiftAmount How much to shift it by.
131
+ * @returns The result.
132
+ */
75
133
  rightShift(shiftAmount) {
76
134
  return new LongIntBitBoard(LongInt.rightShift(this._data, shiftAmount));
77
135
  }
136
+ /**
137
+ * Carries out a bitwise arithmetic right shift (>>) operation.
138
+ * @param shiftAmount How much to shift it by.
139
+ * @returns The result.
140
+ */
78
141
  arithmeticRightShift(shiftAmount) {
79
142
  return new LongIntBitBoard(LongInt.arithmeticRightShift(this._data, shiftAmount));
80
143
  }
144
+ /**
145
+ * Checks if two BitBoards have equal data values.
146
+ * @param value The value to compare against.
147
+ * @returns Whether or not the two BitBoard have the same data value.
148
+ */
81
149
  equals(value) {
82
150
  return this._data.equals(value instanceof LongIntBitBoard ? value._data : value);
83
151
  }
84
152
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludEJpdEJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpdEJvYXJkL2xvbmdJbnRCaXRCb2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxlQUFnQixTQUFRLFFBQWlCO0lBeUIxRCxZQUFtQixJQUFnRDtRQUMvRCxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ1gsS0FBSyxJQUFJLEtBQUssU0FBUztnQkFDbkIsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1lBQ1YsS0FBSyxJQUFJLFlBQVksT0FBTztnQkFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNaLE1BQU07WUFDVixLQUFLLElBQUksWUFBWSxXQUFXLElBQUksSUFBSSxZQUFZLEtBQUs7Z0JBQ3JELEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNO1lBQ1YsS0FBSyxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUN6QixLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDdkUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDO2FBQ2QsR0FBRyxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQVc7UUFDeEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sUUFBUTtRQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTTtRQUNULEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEdBQVcsRUFBRSxZQUFvQjtRQUM1QyxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQStCO1FBQ3RDLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFTLENBQUM7SUFDdkgsQ0FBQztJQUVNLEVBQUUsQ0FBQyxLQUErQjtRQUNyQyxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBUyxDQUFDO0lBQ3RILENBQUM7SUFFTSxHQUFHLENBQUMsS0FBK0I7UUFDdEMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxZQUFZLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQVMsQ0FBQztJQUN2SCxDQUFDO0lBRU0sR0FBRztRQUNOLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQVMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sU0FBUyxDQUFDLFdBQW1CO1FBQ2hDLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFTLENBQUM7SUFDbkYsQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUFtQjtRQUNqQyxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBUyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxXQUFtQjtRQUMzQyxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFTLENBQUM7SUFDOUYsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUF5QztRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRCb2FyZCBmcm9tIFwiLi9iaXRCb2FyZC5qc1wiO1xuaW1wb3J0IExvbmdJbnQgZnJvbSBcIi4vbG9uZ0ludC5qc1wiO1xuXG4vKipcbiAqIEEgQml0Qm9hcmQgd2hpY2ggdXNlcyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9uZ0ludEJpdEJvYXJkIGV4dGVuZHMgQml0Qm9hcmQ8TG9uZ0ludD4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvbmdJbnQgVGhlIGRhdGEgdG8gZmlsbCB0aGUgQml0Qm9hcmQgd2l0aC5cbiAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihsb25nSW50OiBMb25nSW50KTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnRCaXRCb2FyZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1aW50MzJBcnJheSBUaGUgZGF0YSB0byBmaWxsIHRoZSBCaXRCb2FyZCB3aXRoLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih1aW50MzJBcnJheTogVWludDMyQXJyYXkpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlckFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG51bWJlckFycmF5OiBudW1iZXJbXSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJncz86IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBhcmdzID09PSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgc3VwZXIobmV3IExvbmdJbnQoQXJyYXkoMikuZmlsbCgwKSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBhcmdzIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBzdXBlcihhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYXJncyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBzdXBlcihuZXcgTG9uZ0ludChhcmdzKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHR5cGVvZiBhcmdzID09PSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHN1cGVyKG5ldyBMb25nSW50KEFycmF5KGFyZ3MpLmZpbGwoMCkpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCaXQoYml0OiBudW1iZXIpOiAwIHwgMSB7XG4gICAgICAgIHJldHVybiBMb25nSW50LnJpZ2h0U2hpZnQodGhpcy5fZGF0YSwgYml0KS5hbmQoMSkuZGF0YVswXSBhcyAwIHwgMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Qml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuICAgICAgICB0aGlzLl9kYXRhLm9yKG1hc2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckJpdChiaXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXNrID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQodGhpcy5fZGF0YSwgMSlcbiAgICAgICAgICAgIC5sZWZ0U2hpZnQoYml0KVxuICAgICAgICAgICAgLm5vdCgpO1xuICAgICAgICB0aGlzLl9kYXRhLmFuZChtYXNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuICAgICAgICB0aGlzLl9kYXRhLnhvcihtYXNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGEuZGF0YVtpXSA9IH4wID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCaXRzKExTQjogbnVtYmVyLCBudW1iZXJPZkJpdHM6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICBjb25zdCBhcnI6IG51bWJlcltdID0gW107XG4gICAgICAgIGNvbnN0IGFyckxlbmd0aCA9IE1hdGguY2VpbChudW1iZXJPZkJpdHMgLyAzMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyTGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgICAgYXJyW2ldID0gfjAgPj4+IDA7XG4gICAgICAgIGFyclthcnJMZW5ndGggLSAxXSA9IDIgKiogKG51bWJlck9mQml0cyAtIChhcnJMZW5ndGggLSAxKSAqIDMyKSAtIDE7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCBhcnIpLmxlZnRTaGlmdChMU0IpO1xuICAgICAgICBjb25zdCBiaXRzID0gTG9uZ0ludC5yaWdodFNoaWZ0KExvbmdJbnQuYW5kKHRoaXMuX2RhdGEsIG1hc2spLCBMU0IpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50Qml0Qm9hcmQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcihyaWdodDogTG9uZ0ludEJpdEJvYXJkIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQub3IodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB4b3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lnhvcih0aGlzLl9kYXRhLCByaWdodCBpbnN0YW5jZW9mIExvbmdJbnRCaXRCb2FyZCA/IHJpZ2h0LmRhdGEgOiByaWdodCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5ub3QodGhpcy5fZGF0YSkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGxlZnRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQubGVmdFNoaWZ0KHRoaXMuX2RhdGEsIHNoaWZ0QW1vdW50KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmlnaHRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQucmlnaHRTaGlmdCh0aGlzLl9kYXRhLCBzaGlmdEFtb3VudCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hcml0aG1ldGljUmlnaHRTaGlmdCh0aGlzLl9kYXRhLCBzaGlmdEFtb3VudCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGVxdWFscyh2YWx1ZTogTG9uZ0ludCB8IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5lcXVhbHModmFsdWUgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyB2YWx1ZS5fZGF0YSA6IHZhbHVlKTtcbiAgICB9XG59XG4iXX0=
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludEJpdEJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpdEJvYXJkL2xvbmdJbnRCaXRCb2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRW5DLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsUUFBaUI7SUFxQjFEOzs7T0FHRztJQUNILFlBQW1CLElBQWdEO1FBQy9ELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLElBQUksS0FBSyxTQUFTO2dCQUNuQixLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU07WUFDVixLQUFLLElBQUksWUFBWSxPQUFPO2dCQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ1osTUFBTTtZQUNWLEtBQUssSUFBSSxZQUFZLFdBQVcsSUFBSSxJQUFJLFlBQVksS0FBSztnQkFDckQsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDVixLQUFLLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQ3pCLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtZQUNWO2dCQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsR0FBVztRQUNyQixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxH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QzNDLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUF5QztRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRCb2FyZCBmcm9tIFwiLi9iaXRCb2FyZC5qc1wiO1xuaW1wb3J0IExvbmdJbnQgZnJvbSBcIi4vbG9uZ0ludC5qc1wiO1xuXG4vKiogQSBCaXRCb2FyZCB3aGljaCB1c2VzIGFuIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9uZ0ludEJpdEJvYXJkIGV4dGVuZHMgQml0Qm9hcmQ8TG9uZ0ludD4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobG9uZ0ludDogTG9uZ0ludCk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIHVpbnQzMkFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHVpbnQzMkFycmF5OiBVaW50MzJBcnJheSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIG51bWJlckFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG51bWJlckFycmF5OiBudW1iZXJbXSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihsZW5ndGg6IG51bWJlcik7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIGFyZ3MgVGhlIGRhdGEgdG8gZmlsbCB0aGUgQml0Qm9hcmQgd2l0aC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJncz86IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBhcmdzID09PSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgc3VwZXIobmV3IExvbmdJbnQoQXJyYXkoMikuZmlsbCgwKSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBhcmdzIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBzdXBlcihhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYXJncyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBzdXBlcihuZXcgTG9uZ0ludChhcmdzKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHR5cGVvZiBhcmdzID09PSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHN1cGVyKG5ldyBMb25nSW50KEFycmF5KGFyZ3MpLmZpbGwoMCkpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb25zdHJ1Y3RvciBhcmd1bWVudHMuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBiaXQuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGJpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Qml0KGJpdDogbnVtYmVyKTogMCB8IDEge1xuICAgICAgICByZXR1cm4gTG9uZ0ludC5yaWdodFNoaWZ0KHRoaXMuX2RhdGEsIGJpdCkuYW5kKDEpLmRhdGFbMF0gYXMgMCB8IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gYml0IHRvIDEuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIHNldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Qml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEub3IobWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gYml0IHRvIDAuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIGNsZWFyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckJpdChiaXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXNrID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQodGhpcy5fZGF0YSwgMSlcbiAgICAgICAgICAgIC5sZWZ0U2hpZnQoYml0KVxuICAgICAgICAgICAgLm5vdCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEuYW5kKG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRhdGEgZm9yIGEgZ2l2ZW4gYml0IGJldHdlZW4gMCBhbmQgMS5cbiAgICAgKiBAcGFyYW0gYml0IFRoZSBiaXQgdG8gdG9nZ2xlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVCaXQoYml0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFzayA9IExvbmdJbnQuZ2V0TWF0Y2hpbmdMb25nSW50KHRoaXMuX2RhdGEsIDEpXG4gICAgICAgICAgICAubGVmdFNoaWZ0KGJpdCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YS54b3IobWFzayk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgYWxsIGJpdHMgdG8gMC4gKi9cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gMDtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBhbGwgYml0cyB0byAxLiAqL1xuICAgIHB1YmxpYyBzZXRBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gfjAgPj4+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGdpdmVuIG51bWJlciBvZiBiaXRzLlxuICAgICAqIEBwYXJhbSBMU0IgVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0byBnZXQuXG4gICAgICogQHBhcmFtIG51bWJlck9mQml0cyBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIFRoZSBiaXRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCaXRzKExTQjogbnVtYmVyLCBudW1iZXJPZkJpdHM6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICBjb25zdCBhcnI6IG51bWJlcltdID0gW107XG4gICAgICAgIGNvbnN0IGFyckxlbmd0aCA9IE1hdGguY2VpbChudW1iZXJPZkJpdHMgLyAzMik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJMZW5ndGggLSAxOyBpKyspXG4gICAgICAgICAgICBhcnJbaV0gPSB+MCA+Pj4gMDtcbiAgICAgICAgYXJyW2Fyckxlbmd0aCAtIDFdID0gMiAqKiAobnVtYmVyT2ZCaXRzIC0gKGFyckxlbmd0aCAtIDEpICogMzIpIC0gMTtcbiAgICAgICAgY29uc3QgbWFzayA9IExvbmdJbnQuZ2V0TWF0Y2hpbmdMb25nSW50KHRoaXMuX2RhdGEsIGFycikubGVmdFNoaWZ0KExTQik7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBMb25nSW50LnJpZ2h0U2hpZnQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgbWFzayksIExTQik7XG5cbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGFuZCAoJikgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50Qml0Qm9hcmQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lm9yKHRoaXMuX2RhdGEsIHJpZ2h0IGluc3RhbmNlb2YgTG9uZ0ludEJpdEJvYXJkID8gcmlnaHQuZGF0YSA6IHJpZ2h0KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHJpZ2h0IFRoZSByaWdodCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyB4b3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lnhvcih0aGlzLl9kYXRhLCByaWdodCBpbnN0YW5jZW9mIExvbmdJbnRCaXRCb2FyZCA/IHJpZ2h0LmRhdGEgOiByaWdodCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIG5vdCAofikgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIG5vdCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5ub3QodGhpcy5fZGF0YSkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IEhvdyBtdWNoIHRvIHNoaWZ0IGl0IGJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIGxlZnRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQubGVmdFNoaWZ0KHRoaXMuX2RhdGEsIHNoaWZ0QW1vdW50KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgbG9naWNhbCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IEhvdyBtdWNoIHRvIHNoaWZ0IGl0IGJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIHJpZ2h0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50LnJpZ2h0U2hpZnQodGhpcy5fZGF0YSwgc2hpZnRBbW91bnQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBIb3cgbXVjaCB0byBzaGlmdCBpdCBieS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhcml0aG1ldGljUmlnaHRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQuYXJpdGhtZXRpY1JpZ2h0U2hpZnQodGhpcy5fZGF0YSwgc2hpZnRBbW91bnQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0d28gQml0Qm9hcmRzIGhhdmUgZXF1YWwgZGF0YSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHR3byBCaXRCb2FyZCBoYXZlIHRoZSBzYW1lIGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGVxdWFscyh2YWx1ZTogTG9uZ0ludCB8IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5lcXVhbHModmFsdWUgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyB2YWx1ZS5fZGF0YSA6IHZhbHVlKTtcbiAgICB9XG59XG4iXX0=
@@ -7,13 +7,10 @@
7
7
  declare function readLine(prompt?: string): Promise<string>;
8
8
  /**
9
9
  * Writes to the console.
10
- *
11
10
  * @param text The text to write.
12
11
  */
13
12
  declare function writeLine(...text: string[]): void;
14
- /**
15
- * Clears the console.
16
- */
13
+ /** Clears the console. */
17
14
  declare function clear(): void;
18
15
  declare const _default: {
19
16
  clear: typeof clear;