@magic-xpa/utils 4.800.0-dev480.22 → 4.800.0-dev480.220
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/bundles/magic-xpa-utils.umd.js +72 -1222
- package/bundles/magic-xpa-utils.umd.js.map +1 -1
- package/bundles/magic-xpa-utils.umd.min.js +1 -1
- package/bundles/magic-xpa-utils.umd.min.js.map +1 -1
- package/esm2015/index.js +1 -1
- package/esm2015/magic-xpa-utils.js +1 -4
- package/esm2015/src/Base64.js +1 -46
- package/esm2015/src/ChoiceUtils.js +1 -13
- package/esm2015/src/Constants.js +2 -14
- package/esm2015/src/DateTimeUtils.js +1 -2
- package/esm2015/src/DateUtil.js +1 -13
- package/esm2015/src/InternalInterface.js +4 -8
- package/esm2015/src/JSON_Utils.js +1 -1
- package/esm2015/src/Logger.js +2 -81
- package/esm2015/src/MagicConstants.js +1 -1
- package/esm2015/src/Misc.js +1 -60
- package/esm2015/src/MsgInterface.js +1 -1
- package/esm2015/src/PICInterface.js +20 -31
- package/esm2015/src/PlatformUtils.js +2 -2
- package/esm2015/src/Queue.js +1 -9
- package/esm2015/src/Randomizer.js +1 -1
- package/esm2015/src/RequestInfo.js +1 -4
- package/esm2015/src/Rtf.js +15 -199
- package/esm2015/src/StorageAttribute.js +1 -33
- package/esm2015/src/StrUtil.js +0 -0
- package/esm2015/src/SyncExecutionHelper.js +1 -16
- package/esm2015/src/UtilDateJpn.js +9 -89
- package/esm2015/src/UtilImeJpn.js +3 -32
- package/esm2015/src/UtilStrByteMode.js +15 -288
- package/esm2015/src/XMLConstants.js +1 -12
- package/esm2015/src/Xml/XmlParser.js +3 -100
- package/esm2015/src/enums.js +1 -1
- package/fesm2015/magic-xpa-utils.js +72 -1224
- package/fesm2015/magic-xpa-utils.js.map +1 -1
- package/magic-xpa-utils.d.ts +0 -3
- package/package.json +2 -2
- package/src/InternalInterface.d.ts +1 -1
- package/src/StrUtil.d.ts +0 -1
package/esm2015/src/Rtf.js
CHANGED
|
@@ -1,27 +1,18 @@
|
|
|
1
1
|
import { Encoding, Hashtable, NChar, NNumber, Stack } from "@magic-xpa/mscorelib";
|
|
2
2
|
import { UtilStrByteMode } from "./UtilStrByteMode";
|
|
3
|
-
//@dynamic
|
|
4
3
|
export class Rtf_SYMBOL {
|
|
5
|
-
/* index into property table if kwd == kwdProp */
|
|
6
|
-
/* index into destination table if kwd == kwdDest */
|
|
7
|
-
/* character to print if kwd == kwdChar */
|
|
8
4
|
constructor(keyWord, kwd, idxInRgprop) {
|
|
9
5
|
this.szKeyword = null;
|
|
10
|
-
/* RTF keyword */
|
|
11
6
|
this.kwd = null;
|
|
12
|
-
/* base action to take */
|
|
13
7
|
this.idxInRgprop = null;
|
|
14
8
|
this.szKeyword = keyWord;
|
|
15
9
|
this.kwd = kwd;
|
|
16
10
|
this.idxInRgprop = idxInRgprop;
|
|
17
11
|
}
|
|
18
12
|
}
|
|
19
|
-
// @dynamic
|
|
20
13
|
export class Rtf_PROP {
|
|
21
|
-
/* structure containing value */
|
|
22
14
|
constructor(actn, prop) {
|
|
23
15
|
this.actn = null;
|
|
24
|
-
/* size of value */
|
|
25
16
|
this.prop = null;
|
|
26
17
|
this.actn = actn;
|
|
27
18
|
this.prop = prop;
|
|
@@ -70,7 +61,6 @@ export var Rtf_IDEST;
|
|
|
70
61
|
Rtf_IDEST[Rtf_IDEST["COLOR"] = 1] = "COLOR";
|
|
71
62
|
Rtf_IDEST[Rtf_IDEST["SKIP"] = 2] = "SKIP";
|
|
72
63
|
})(Rtf_IDEST || (Rtf_IDEST = {}));
|
|
73
|
-
/* types of properties */
|
|
74
64
|
export var Rtf_IPROP;
|
|
75
65
|
(function (Rtf_IPROP) {
|
|
76
66
|
Rtf_IPROP[Rtf_IPROP["BOLD"] = 0] = "BOLD";
|
|
@@ -107,7 +97,6 @@ export var Rtf_IPROP;
|
|
|
107
97
|
Rtf_IPROP[Rtf_IPROP["XA_BULLET"] = 31] = "XA_BULLET";
|
|
108
98
|
Rtf_IPROP[Rtf_IPROP["MAX"] = 32] = "MAX";
|
|
109
99
|
})(Rtf_IPROP || (Rtf_IPROP = {}));
|
|
110
|
-
/* Rtf Destination State */
|
|
111
100
|
export var Rtf_RDS;
|
|
112
101
|
(function (Rtf_RDS) {
|
|
113
102
|
Rtf_RDS[Rtf_RDS["NORM"] = 0] = "NORM";
|
|
@@ -127,15 +116,6 @@ export var Rtf_ErrorRtf;
|
|
|
127
116
|
Rtf_ErrorRtf[Rtf_ErrorRtf["END_OF_FILE"] = 7] = "END_OF_FILE";
|
|
128
117
|
Rtf_ErrorRtf[Rtf_ErrorRtf["BUFFER_TOO_SMALL"] = 8] = "BUFFER_TOO_SMALL";
|
|
129
118
|
})(Rtf_ErrorRtf || (Rtf_ErrorRtf = {}));
|
|
130
|
-
// TODO :
|
|
131
|
-
// Rtf_RtfChar should actually be enum.
|
|
132
|
-
// But computed string values are not allowed to be defined in enum.
|
|
133
|
-
// So, we cannot have String.fromCharCode(XXX).
|
|
134
|
-
// We have 2 options:
|
|
135
|
-
// 1. Convert this enum into a class with all static readonly items.
|
|
136
|
-
// 2. Keep it as enum with numeric values (char codes).
|
|
137
|
-
// Going with #1 now, since @2 makes the code ugly.
|
|
138
|
-
// Will evalaute later if required.
|
|
139
119
|
export class Rtf_RtfChar {
|
|
140
120
|
}
|
|
141
121
|
Rtf_RtfChar.CR = String.fromCharCode(0x0d);
|
|
@@ -158,8 +138,6 @@ export var Rtf_RIS;
|
|
|
158
138
|
Rtf_RIS[Rtf_RIS["UNICODE"] = 3] = "UNICODE";
|
|
159
139
|
})(Rtf_RIS || (Rtf_RIS = {}));
|
|
160
140
|
export class Rtf {
|
|
161
|
-
/// <summary> Constructor
|
|
162
|
-
/// </summary>
|
|
163
141
|
constructor() {
|
|
164
142
|
this._group = 0;
|
|
165
143
|
this._cbBin = 0;
|
|
@@ -188,13 +166,6 @@ export class Rtf {
|
|
|
188
166
|
this.setCodePageTable();
|
|
189
167
|
}
|
|
190
168
|
}
|
|
191
|
-
/// <summary> Checks if the blob has a Rtf data or not
|
|
192
|
-
///
|
|
193
|
-
/// </summary>
|
|
194
|
-
/// <param name="str">
|
|
195
|
-
/// </param>
|
|
196
|
-
/// <returns>
|
|
197
|
-
/// </returns>
|
|
198
169
|
static isRtf(str) {
|
|
199
170
|
let isRtf = false;
|
|
200
171
|
if (str !== null && str.startsWith(this.RTF_PREFIX)) {
|
|
@@ -202,17 +173,6 @@ export class Rtf {
|
|
|
202
173
|
}
|
|
203
174
|
return isRtf;
|
|
204
175
|
}
|
|
205
|
-
/// <summary> Converts Rtf Text to Plain Text
|
|
206
|
-
/// Step 1: Isolate RTF keywords and send them to ParseKeyword; Push and pop state at the start and end of
|
|
207
|
-
/// RTF groups Send text to ParseChar for further processing.
|
|
208
|
-
///
|
|
209
|
-
/// </summary>
|
|
210
|
-
/// <param name="rtfTxt">
|
|
211
|
-
/// </param>
|
|
212
|
-
/// <param name="outputTxt">
|
|
213
|
-
/// </param>
|
|
214
|
-
/// <returns>
|
|
215
|
-
/// </returns>
|
|
216
176
|
toTxt(rtfTxt, outputTxt) {
|
|
217
177
|
let cNibble = 2;
|
|
218
178
|
let b = 0;
|
|
@@ -238,7 +198,6 @@ export class Rtf {
|
|
|
238
198
|
this._index++;
|
|
239
199
|
if (this._group < 0)
|
|
240
200
|
return Rtf_ErrorRtf.STACK_UNDERFLOW;
|
|
241
|
-
/* if we're parsing binary data, handle it directly */
|
|
242
201
|
if (this._internalState === Rtf_RIS.BIN) {
|
|
243
202
|
if ((ec = this.ParseChar(blobChar, outputTxt)) !== Rtf_ErrorRtf.OK)
|
|
244
203
|
return ec;
|
|
@@ -261,22 +220,16 @@ export class Rtf {
|
|
|
261
220
|
return ec;
|
|
262
221
|
break;
|
|
263
222
|
case Rtf_RtfChar.LF:
|
|
264
|
-
case Rtf_RtfChar.CR:
|
|
223
|
+
case Rtf_RtfChar.CR:
|
|
265
224
|
if (this._processCrlfSpecial) {
|
|
266
|
-
/* Once we reach the 0x0a while ProcessCRLFSpecial_, reset the ProcessCRLFSpecial_ */
|
|
267
225
|
if (blobChar === Rtf_RtfChar.LF) {
|
|
268
226
|
this._processCrlfSpecial = false;
|
|
269
227
|
}
|
|
270
228
|
}
|
|
271
229
|
else {
|
|
272
|
-
/*---------------------------------------------------------------*/
|
|
273
|
-
/* skip new lines coming only from the RTF header 1/1/98 - #2390 */
|
|
274
|
-
/*---------------------------------------------------------------*/
|
|
275
|
-
/* Skip the LF (0x0a) if we are not in the ProcessCRLFSpecial_ */
|
|
276
230
|
if (blobChar === Rtf_RtfChar.LF || (blobChar === Rtf_RtfChar.CR && skipNewline && !this._outputOnce))
|
|
277
231
|
break;
|
|
278
232
|
}
|
|
279
|
-
/* falls through */
|
|
280
233
|
default:
|
|
281
234
|
if (blobChar !== Rtf_RtfChar.CR)
|
|
282
235
|
skipNewline = false;
|
|
@@ -290,7 +243,6 @@ export class Rtf {
|
|
|
290
243
|
this._internalState = Rtf_RIS.NORM;
|
|
291
244
|
}
|
|
292
245
|
else {
|
|
293
|
-
/* parsing hex data */
|
|
294
246
|
if (this._internalState !== Rtf_RIS.HEX)
|
|
295
247
|
return Rtf_ErrorRtf.ASSERTION;
|
|
296
248
|
b = b << 4;
|
|
@@ -312,22 +264,18 @@ export class Rtf {
|
|
|
312
264
|
if (cNibble === 0) {
|
|
313
265
|
if (UtilStrByteMode.isLocaleDefLangDBCS()) {
|
|
314
266
|
charset = this.getCharset(this._fontNum);
|
|
315
|
-
// leading byte of a double-byte character
|
|
316
267
|
if (!skipParseChar && Rtf.is1stByte(b, charset)) {
|
|
317
268
|
dbcsBytes[0] = b;
|
|
318
269
|
dbcsBytes[1] = 0;
|
|
319
270
|
skipParseChar = true;
|
|
320
271
|
}
|
|
321
272
|
else {
|
|
322
|
-
// trailing byte of a double-byte character
|
|
323
273
|
if (skipParseChar && Rtf.is2ndByte(b, charset))
|
|
324
274
|
dbcsBytes[1] = b;
|
|
325
|
-
// single-byte character
|
|
326
275
|
else {
|
|
327
276
|
dbcsBytes[0] = b;
|
|
328
277
|
dbcsBytes[1] = 0;
|
|
329
278
|
}
|
|
330
|
-
// convert DBCS to Unicode
|
|
331
279
|
codePage = this.getCodePage(charset);
|
|
332
280
|
let workStr = Encoding.GetEncoding(codePage).GetString(dbcsBytes, 0, 2);
|
|
333
281
|
b = workStr.charCodeAt(0);
|
|
@@ -343,36 +291,19 @@ export class Rtf {
|
|
|
343
291
|
this._internalState = Rtf_RIS.NORM;
|
|
344
292
|
}
|
|
345
293
|
}
|
|
346
|
-
/* end else (ris != risNorm) */
|
|
347
294
|
break;
|
|
348
295
|
}
|
|
349
|
-
/* switch */
|
|
350
296
|
}
|
|
351
|
-
/* else (ris != risBin) */
|
|
352
297
|
}
|
|
353
|
-
/* while */
|
|
354
298
|
if (this._group < 0)
|
|
355
299
|
return Rtf_ErrorRtf.STACK_UNDERFLOW;
|
|
356
300
|
if (this._group > 0)
|
|
357
301
|
return Rtf_ErrorRtf.UNMATCHED_BRACE;
|
|
358
|
-
/*-------------------------------------------------------------------*/
|
|
359
|
-
/* Eliminate suffix of carrige return + line feed */
|
|
360
|
-
/* (Check last characters - just in case format is not the expected) */
|
|
361
|
-
/*-------------------------------------------------------------------*/
|
|
362
302
|
currPos = outputTxt.Length;
|
|
363
303
|
if (currPos >= 3 && (outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR || outputTxt.get_Item(currPos - 3) === Rtf_RtfChar.LF && outputTxt.get_Item(currPos - 2) === Rtf_RtfChar.CR && outputTxt.get_Item(currPos - 1) === Rtf_RtfChar.CR))
|
|
364
304
|
outputTxt.Remove(currPos - 3, 3);
|
|
365
305
|
return Rtf_ErrorRtf.OK;
|
|
366
306
|
}
|
|
367
|
-
/// <summary> Route the character to the appropriate destination stream.
|
|
368
|
-
///
|
|
369
|
-
/// </summary>
|
|
370
|
-
/// <param name="ch">
|
|
371
|
-
/// </param>
|
|
372
|
-
/// <param name="outputTxt">
|
|
373
|
-
/// </param>
|
|
374
|
-
/// <returns>
|
|
375
|
-
/// </returns>
|
|
376
307
|
ParseChar(ch, outputTxt) {
|
|
377
308
|
let ret = Rtf_ErrorRtf.OK;
|
|
378
309
|
if (this._internalState === Rtf_RIS.BIN && --this._cbBin <= 0) {
|
|
@@ -380,28 +311,14 @@ export class Rtf {
|
|
|
380
311
|
}
|
|
381
312
|
if (this._destState === Rtf_RDS.SKIP) {
|
|
382
313
|
}
|
|
383
|
-
/* Toss this character. */
|
|
384
314
|
else if (this._destState === Rtf_RDS.NORM) {
|
|
385
|
-
/* Output a character. Properties are valid at this point. */
|
|
386
315
|
ret = this.PrintChar(ch, outputTxt);
|
|
387
316
|
}
|
|
388
317
|
else {
|
|
389
|
-
/* handle other destinations.... */
|
|
390
318
|
}
|
|
391
319
|
return ret;
|
|
392
320
|
}
|
|
393
|
-
/// <summary> Send a character to the output file.
|
|
394
|
-
///
|
|
395
|
-
/// </summary>
|
|
396
|
-
/// <param name="ch">
|
|
397
|
-
/// </param>
|
|
398
|
-
/// <param name="outputTxt">
|
|
399
|
-
/// </param>
|
|
400
|
-
/// <returns>
|
|
401
|
-
/// </returns>
|
|
402
321
|
PrintChar(ch, outputTxt) {
|
|
403
|
-
/* Allow carrige return + line feed in text, but remove bullet sign */
|
|
404
|
-
/*------------------------------------------------------------------*/
|
|
405
322
|
if ((ch >= ' ' || ch === Rtf_RtfChar.CR || ch === Rtf_RtfChar.LF) && ch !== String.fromCharCode(183)) {
|
|
406
323
|
outputTxt.Append(ch);
|
|
407
324
|
}
|
|
@@ -410,11 +327,6 @@ export class Rtf {
|
|
|
410
327
|
}
|
|
411
328
|
return Rtf_ErrorRtf.OK;
|
|
412
329
|
}
|
|
413
|
-
/// <summary> Save relevant info on a linked list of SAVE structures.
|
|
414
|
-
///
|
|
415
|
-
/// </summary>
|
|
416
|
-
/// <returns>
|
|
417
|
-
/// </returns>
|
|
418
330
|
PushState() {
|
|
419
331
|
let stackSave = new Rtf_StackSave();
|
|
420
332
|
if (stackSave === null) {
|
|
@@ -427,11 +339,6 @@ export class Rtf {
|
|
|
427
339
|
this._group++;
|
|
428
340
|
return Rtf_ErrorRtf.OK;
|
|
429
341
|
}
|
|
430
|
-
/// <summary> Always restore relevant info from the top of the SAVE list.
|
|
431
|
-
///
|
|
432
|
-
/// </summary>
|
|
433
|
-
/// <returns>
|
|
434
|
-
/// </returns>
|
|
435
342
|
PopState() {
|
|
436
343
|
let savedPop = this._stack.pop();
|
|
437
344
|
if (savedPop === null) {
|
|
@@ -442,15 +349,6 @@ export class Rtf {
|
|
|
442
349
|
this._group--;
|
|
443
350
|
return Rtf_ErrorRtf.OK;
|
|
444
351
|
}
|
|
445
|
-
/// <summary> Step 2: get a control word (and its associated value) and call TranslateKeyword to dispatch the control.
|
|
446
|
-
///
|
|
447
|
-
/// </summary>
|
|
448
|
-
/// <param name="rtfTxt">
|
|
449
|
-
/// </param>
|
|
450
|
-
/// <param name="outputTxt">
|
|
451
|
-
/// </param>
|
|
452
|
-
/// <returns>
|
|
453
|
-
/// </returns>
|
|
454
352
|
ParseKeyword(rtfTxt, outputTxt) {
|
|
455
353
|
let ch;
|
|
456
354
|
let fNeg = false;
|
|
@@ -459,7 +357,6 @@ export class Rtf {
|
|
|
459
357
|
if ((ch = rtfTxt[this._index++]) === String.fromCharCode(0)) {
|
|
460
358
|
return Rtf_ErrorRtf.END_OF_FILE;
|
|
461
359
|
}
|
|
462
|
-
/* a control symbol; no delimiter. */
|
|
463
360
|
if (!NChar.IsLetter(ch)) {
|
|
464
361
|
szKeyword = szKeyword + ch;
|
|
465
362
|
return this.TranslateKeyword(szKeyword, outputTxt);
|
|
@@ -481,13 +378,6 @@ export class Rtf {
|
|
|
481
378
|
if (ch !== ' ')
|
|
482
379
|
this._index--;
|
|
483
380
|
if (szKeyword === Rtf.CHAR_PAR) {
|
|
484
|
-
/* if we get a RTF sequence of \par[0xd][0xa], ie a \par kwd followed */
|
|
485
|
-
/* immidiately by the CR and LF, then ignore the \par kwd. otherwise */
|
|
486
|
-
/* we will translate the \par - which translates to a LF (0xa) and also */
|
|
487
|
-
/* the following 0x0d is translated to 0x0a, thus resulting in TWO LF's */
|
|
488
|
-
/* being inserted instead of just one LF. So by skipping [\par] and */
|
|
489
|
-
/* translating only the [0xd 0xa] will result in only one LF appearing */
|
|
490
|
-
/* - which is the desired behaviour */
|
|
491
381
|
if (rtfTxt[this._index] === Rtf_RtfChar.CR && rtfTxt[this._index + 1] === Rtf_RtfChar.LF)
|
|
492
382
|
this._processCrlfSpecial = true;
|
|
493
383
|
}
|
|
@@ -498,37 +388,22 @@ export class Rtf {
|
|
|
498
388
|
return this.TranslateKeyword(szKeyword, outputTxt);
|
|
499
389
|
}
|
|
500
390
|
}
|
|
501
|
-
/// <summary> Step 3. Search rgsymRtf for szKeyword and evaluate it appropriately.
|
|
502
|
-
///
|
|
503
|
-
/// </summary>
|
|
504
|
-
/// <param name="szKeyword">
|
|
505
|
-
/// </param>
|
|
506
|
-
/// <param name="outputTxt">
|
|
507
|
-
/// </param>
|
|
508
|
-
/// <returns>
|
|
509
|
-
/// </returns>
|
|
510
391
|
TranslateKeyword(szKeyword, outputTxt) {
|
|
511
392
|
let result = Rtf_ErrorRtf.OK;
|
|
512
393
|
let isym;
|
|
513
|
-
/* search for szKeyword in rgsymRtf */
|
|
514
394
|
for (isym = 0; isym < Rtf.rgsymRtf.length; isym++) {
|
|
515
395
|
if (szKeyword === Rtf.rgsymRtf[isym].szKeyword) {
|
|
516
396
|
break;
|
|
517
397
|
}
|
|
518
398
|
}
|
|
519
|
-
/* control word not found */
|
|
520
399
|
if (isym === Rtf.rgsymRtf.length) {
|
|
521
400
|
if (this._skipDestIfUnk) {
|
|
522
|
-
/* if this is a new destination */
|
|
523
401
|
this._destState = Rtf_RDS.SKIP;
|
|
524
|
-
/* skip the destination */
|
|
525
402
|
}
|
|
526
|
-
/* else just discard it */
|
|
527
403
|
this._skipDestIfUnk = false;
|
|
528
404
|
}
|
|
529
405
|
else {
|
|
530
406
|
result = Rtf_ErrorRtf.BAD_TABLE;
|
|
531
|
-
/* found it! use kwd and idxInRgprop to determine what to do with it. */
|
|
532
407
|
this._skipDestIfUnk = false;
|
|
533
408
|
if (Rtf.rgsymRtf[isym].kwd === Rtf_KWD.PROP) {
|
|
534
409
|
result = this.validateProp(Rtf.rgsymRtf[isym].idxInRgprop);
|
|
@@ -545,21 +420,11 @@ export class Rtf {
|
|
|
545
420
|
}
|
|
546
421
|
return result;
|
|
547
422
|
}
|
|
548
|
-
/// <summary> Validate the property identified by _iprop_ to the value _val_.
|
|
549
|
-
/// previously called Applypropchange
|
|
550
|
-
/// </summary>
|
|
551
|
-
/// <param name="iprop">
|
|
552
|
-
/// </param>
|
|
553
|
-
/// <returns>
|
|
554
|
-
/// </returns>
|
|
555
423
|
validateProp(iprop) {
|
|
556
424
|
let ret = Rtf_ErrorRtf.OK;
|
|
557
425
|
if (this._destState === Rtf_RDS.SKIP) {
|
|
558
|
-
/* If we're skipping text, */
|
|
559
426
|
return ret;
|
|
560
|
-
/* don't do anything. */
|
|
561
427
|
}
|
|
562
|
-
/* validate prop */
|
|
563
428
|
if (Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.DOP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.SEP &&
|
|
564
429
|
Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.PAP && Rtf.rgprop[iprop].prop !== Rtf_PROPTYPE.CHP &&
|
|
565
430
|
Rtf.rgprop[iprop].actn !== Rtf_ACTN.SPEC) {
|
|
@@ -570,35 +435,18 @@ export class Rtf {
|
|
|
570
435
|
}
|
|
571
436
|
return ret;
|
|
572
437
|
}
|
|
573
|
-
/// <summary> Change to the destination state.
|
|
574
|
-
/// previously called ChangeDest
|
|
575
|
-
/// </summary>
|
|
576
|
-
/// <returns>
|
|
577
|
-
/// </returns>
|
|
578
438
|
changeDestState() {
|
|
579
439
|
if (this._destState === Rtf_RDS.SKIP) {
|
|
580
|
-
/* if we're skipping text, */
|
|
581
440
|
return Rtf_ErrorRtf.OK;
|
|
582
|
-
/* don't do anything */
|
|
583
441
|
}
|
|
584
442
|
this._destState = Rtf_RDS.SKIP;
|
|
585
|
-
/* when in doubt, skip it... */
|
|
586
443
|
return Rtf_ErrorRtf.OK;
|
|
587
444
|
}
|
|
588
|
-
/// <summary> Evaluate an RTF control that needs special processing.
|
|
589
|
-
///
|
|
590
|
-
/// </summary>
|
|
591
|
-
/// <param name="ipfn">
|
|
592
|
-
/// </param>
|
|
593
|
-
/// <returns>
|
|
594
|
-
/// </returns>
|
|
595
445
|
ParseSpecialKeyword(ipfn) {
|
|
596
446
|
let ret = Rtf_ErrorRtf.OK;
|
|
597
447
|
if (!UtilStrByteMode.isLocaleDefLangDBCS()) {
|
|
598
448
|
if (this._destState === Rtf_RDS.SKIP && ipfn !== Rtf_IPFN.BIN) {
|
|
599
|
-
/* if we're skipping, and it's not */
|
|
600
449
|
return ret;
|
|
601
|
-
/* the \bin keyword, ignore it. */
|
|
602
450
|
}
|
|
603
451
|
if (ipfn === Rtf_IPFN.FONT || ipfn === Rtf_IPFN.CHARSET || ipfn === Rtf_IPFN.UNICODE) {
|
|
604
452
|
return ret;
|
|
@@ -652,15 +500,6 @@ export class Rtf {
|
|
|
652
500
|
}
|
|
653
501
|
return ret;
|
|
654
502
|
}
|
|
655
|
-
/// <summary> Checks if the byte is within the trailing byte range.
|
|
656
|
-
///
|
|
657
|
-
/// </summary>
|
|
658
|
-
/// <param name="dbcsBytes">
|
|
659
|
-
/// </param>
|
|
660
|
-
/// <param name="charset">
|
|
661
|
-
/// </param>
|
|
662
|
-
/// <returns>
|
|
663
|
-
/// </returns>
|
|
664
503
|
static is2ndByte(dbcsBytes, charset) {
|
|
665
504
|
let ret = false;
|
|
666
505
|
if (dbcsBytes > 255)
|
|
@@ -679,35 +518,21 @@ export class Rtf {
|
|
|
679
518
|
}
|
|
680
519
|
return ret;
|
|
681
520
|
}
|
|
682
|
-
/// <summary> Create a hashtable of codepage associated with charset.
|
|
683
|
-
///
|
|
684
|
-
/// </summary>
|
|
685
|
-
/// <param>
|
|
686
|
-
/// <returns>
|
|
687
|
-
/// </returns>
|
|
688
521
|
setCodePageTable() {
|
|
689
|
-
|
|
690
|
-
this._codePageTable.set_Item(
|
|
691
|
-
this._codePageTable.set_Item(
|
|
692
|
-
this._codePageTable.set_Item(
|
|
693
|
-
this._codePageTable.set_Item(
|
|
694
|
-
this._codePageTable.set_Item(
|
|
695
|
-
this._codePageTable.set_Item(
|
|
696
|
-
this._codePageTable.set_Item(
|
|
697
|
-
this._codePageTable.set_Item(
|
|
698
|
-
this._codePageTable.set_Item(
|
|
699
|
-
this._codePageTable.set_Item(
|
|
700
|
-
this._codePageTable.set_Item(
|
|
701
|
-
this._codePageTable.set_Item(
|
|
702
|
-
this._codePageTable.set_Item(238, 1250); // EASTEUROPE_CHARSET
|
|
522
|
+
this._codePageTable.set_Item(0, 1252);
|
|
523
|
+
this._codePageTable.set_Item(128, 932);
|
|
524
|
+
this._codePageTable.set_Item(129, 949);
|
|
525
|
+
this._codePageTable.set_Item(134, 936);
|
|
526
|
+
this._codePageTable.set_Item(136, 950);
|
|
527
|
+
this._codePageTable.set_Item(161, 1253);
|
|
528
|
+
this._codePageTable.set_Item(162, 1254);
|
|
529
|
+
this._codePageTable.set_Item(177, 1255);
|
|
530
|
+
this._codePageTable.set_Item(178, 1256);
|
|
531
|
+
this._codePageTable.set_Item(186, 1257);
|
|
532
|
+
this._codePageTable.set_Item(204, 1251);
|
|
533
|
+
this._codePageTable.set_Item(222, 874);
|
|
534
|
+
this._codePageTable.set_Item(238, 1250);
|
|
703
535
|
}
|
|
704
|
-
/// <summary> Get codepage corresponding to the specified charset.
|
|
705
|
-
///
|
|
706
|
-
/// </summary>
|
|
707
|
-
/// <param name="charset">
|
|
708
|
-
/// </param>
|
|
709
|
-
/// <returns>
|
|
710
|
-
/// </returns>
|
|
711
536
|
getCodePage(charset) {
|
|
712
537
|
let codePage = 0;
|
|
713
538
|
if (this._codePageTable.ContainsKey(charset)) {
|
|
@@ -715,13 +540,6 @@ export class Rtf {
|
|
|
715
540
|
}
|
|
716
541
|
return codePage;
|
|
717
542
|
}
|
|
718
|
-
/// <summary> Get charset corresponding to the specified font index.
|
|
719
|
-
///
|
|
720
|
-
/// </summary>
|
|
721
|
-
/// <param name="font">
|
|
722
|
-
/// </param>
|
|
723
|
-
/// <returns>
|
|
724
|
-
/// </returns>
|
|
725
543
|
getCharset(font) {
|
|
726
544
|
let charset = 0;
|
|
727
545
|
if (this._charsetTable.ContainsKey(font)) {
|
|
@@ -732,7 +550,6 @@ export class Rtf {
|
|
|
732
550
|
}
|
|
733
551
|
Rtf.RTF_PREFIX = "{\\rtf";
|
|
734
552
|
Rtf.CHAR_PAR = "par";
|
|
735
|
-
/* Property descriptions */
|
|
736
553
|
Rtf.rgprop = [
|
|
737
554
|
new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
|
|
738
555
|
new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.CHP),
|
|
@@ -750,7 +567,6 @@ Rtf.rgprop = [
|
|
|
750
567
|
new Rtf_PROP(Rtf_ACTN.BYTE, Rtf_PROPTYPE.PAP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.PAP),
|
|
751
568
|
new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.CHP), new Rtf_PROP(Rtf_ACTN.SPEC, Rtf_PROPTYPE.SEP)
|
|
752
569
|
];
|
|
753
|
-
/* Keyword descriptions */
|
|
754
570
|
Rtf.rgsymRtf = [
|
|
755
571
|
new Rtf_SYMBOL("b", Rtf_KWD.PROP, Rtf_IPROP.BOLD), new Rtf_SYMBOL("ul", Rtf_KWD.PROP, Rtf_IPROP.UNDERLINE),
|
|
756
572
|
new Rtf_SYMBOL("i", Rtf_KWD.PROP, Rtf_IPROP.ITALIC), new Rtf_SYMBOL("li", Rtf_KWD.PROP, Rtf_IPROP.LEFT_IND),
|
|
@@ -797,4 +613,4 @@ Rtf.rgsymRtf = [
|
|
|
797
613
|
new Rtf_SYMBOL("title", Rtf_KWD.DEST, Rtf_IDEST.SKIP), new Rtf_SYMBOL("txe", Rtf_KWD.DEST, Rtf_IDEST.SKIP),
|
|
798
614
|
new Rtf_SYMBOL("xe", Rtf_KWD.DEST, Rtf_IDEST.SKIP)
|
|
799
615
|
];
|
|
800
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnRmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1J0Zi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsVUFBVTtBQUNWLE1BQU0sT0FBTyxVQUFVO0lBTXJCLGlEQUFpRDtJQUVqRCxxREFBcUQ7SUFFckQscURBQXFEO0lBQ3JELFlBQVksT0FBZSxFQUFFLEdBQVksRUFBRSxXQUFnQjtRQVYzRCxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLGlCQUFpQjtRQUNqQixRQUFHLEdBQVksSUFBSSxDQUFDO1FBQ3BCLHlCQUF5QjtRQUN6QixnQkFBVyxHQUFRLElBQUksQ0FBQztRQU90QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUNELFdBQVc7QUFDWCxNQUFNLE9BQU8sUUFBUTtJQUtuQixnQ0FBZ0M7SUFFaEMsWUFBWSxJQUFjLEVBQUUsSUFBa0I7UUFOOUMsU0FBSSxHQUFhLElBQUksQ0FBQztRQUN0QixtQkFBbUI7UUFDbkIsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFLeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxhQUFhO0lBQW5CO1FBQ0UsUUFBRyxHQUFZLElBQUksQ0FBQztRQUNwQixRQUFHLEdBQVksSUFBSSxDQUFDO0lBQ3RCLENBQUM7Q0FBQTtBQUVELE1B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QVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztDQUM3RixDQUFDO0FBRUYsMEJBQTBCO0FBQ0YsWUFBUSxHQUFpQjtJQUMvQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM1RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUM1RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUMzSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUM3SCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUN0RyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUNuSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUN6SCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMzSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNoSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNwSCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN6SCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNuSCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN0SCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUN4RyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNqRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM5RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNqSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNqSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VuY29kaW5nLCBIYXNodGFibGUsIE5DaGFyLCBOTnVtYmVyLCBTdGFjaywgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7VXRpbFN0ckJ5dGVNb2RlfSBmcm9tIFwiLi9VdGlsU3RyQnl0ZU1vZGVcIjtcclxuXHJcbi8vQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFJ0Zl9TWU1CT0wge1xyXG4gIHN6S2V5d29yZDogc3RyaW5nID0gbnVsbDtcclxuICAvKiBSVEYga2V5d29yZCAqL1xyXG4gIGt3ZDogUnRmX0tXRCA9IG51bGw7XHJcbiAgLyogYmFzZSBhY3Rpb24gdG8gdGFrZSAqL1xyXG4gIGlkeEluUmdwcm9wOiBhbnkgPSBudWxsO1xyXG4gIC8qIGluZGV4IGludG8gcHJvcGVydHkgdGFibGUgaWYga3dkID09IGt3ZFByb3AgKi9cclxuXHJcbiAgLyogaW5kZXggaW50byBkZXN0aW5hdGlvbiB0YWJsZSBpZiBrd2QgPT0ga3dkRGVzdCAgKi9cclxuXHJcbiAgLyogY2hhcmFjdGVyIHRvIHByaW50IGlmIGt3ZCA9PSBrd2RDaGFyICAgICAgICAgICAgKi9cclxuICBjb25zdHJ1Y3RvcihrZXlXb3JkOiBzdHJpbmcsIGt3ZDogUnRmX0tXRCwgaWR4SW5SZ3Byb3A6IGFueSkge1xyXG4gICAgdGhpcy5zektleXdvcmQgPSBrZXlXb3JkO1xyXG4gICAgdGhpcy5rd2QgPSBrd2Q7XHJcbiAgICB0aGlzLmlkeEluUmdwcm9wID0gaWR4SW5SZ3Byb3A7XHJcbiAgfVxyXG59XHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBSdGZfUFJPUCB7XHJcbiAgYWN0bjogUnRmX0FDVE4gPSBudWxsO1xyXG4gIC8qIHNpemUgb2YgdmFsdWUgKi9cclxuICBwcm9wOiBSdGZfUFJPUFRZUEUgPSBudWxsO1xyXG5cclxuICAvKiBzdHJ1Y3R1cmUgY29udGFpbmluZyB2YWx1ZSAqL1xyXG5cclxuICBjb25zdHJ1Y3RvcihhY3RuOiBSdGZfQUNUTiwgcHJvcDogUnRmX1BST1BUWVBFKSB7XHJcbiAgICB0aGlzLmFjdG4gPSBhY3RuO1xyXG4gICAgdGhpcy5wcm9wID0gcHJvcDtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIFJ0Zl9TdGFja1NhdmUge1xyXG4gIHJkczogUnRmX1JEUyA9IG51bGw7XHJcbiAgcmlzOiBSdGZfUklTID0gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0tXRCB7XHJcbiAgQ0hBUixcclxuICBERVNULFxyXG4gIFBST1AsXHJcbiAgU1BFQ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfUFJPUFRZUEUge1xyXG4gIENIUCxcclxuICBQQVAsXHJcbiAgU0VQLFxyXG4gIERPUFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfQUNUTiB7XHJcbiAgU1BFQyxcclxuICBCWVRFLFxyXG4gIFdPUkRcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0lQRk4ge1xyXG4gIEJJTixcclxuICBIRVgsXHJcbiAgU0tJUF9ERVNULFxyXG4gIEJSRUFLLFxyXG4gIE5FVyxcclxuICBGT05ULFxyXG4gIENIQVJTRVQsXHJcbiAgVU5JQ09ERVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfSURFU1Qge1xyXG4gIFBJQ1QsXHJcbiAgQ09MT1IsXHJcbiAgU0tJUFxyXG59XHJcblxyXG4vKiB0eXBlcyBvZiBwcm9wZXJ0aWVzICovXHJcbmV4cG9ydCBlbnVtIFJ0Zl9JUFJPUCB7XHJcbiAgQk9MRCA9IDAsXHJcbiAgSVRBTElDLFxyXG4gIFVOREVSTElORSxcclxuICBGT05ULFxyXG4gIFNJWkUsXHJcbiAgQ09MT1IsXHJcbiAgUkVELFxyXG4gIEdSRUVOLFxyXG4gIEJMVUUsXHJcbiAgTEVGVF9JTkQsXHJcbiAgUklHSFRfSU5ELFxyXG4gIEZJUlNUX0lORCxcclxuICBDT0xTLFxyXG4gIFBHTl9YLFxyXG4gIFBHTl9ZLFxyXG4gIFhBX1BBR0UsXHJcbiAgWUFfUEFHRSxcclxuICBYQV9MRUZULFxyXG4gIFhBX1JJR0hULFxyXG4gIFlBX1RPUCxcclxuICBZQV9CT1RUT00sXHJcbiAgUEdOX1NUQVJULFxyXG4gIFNCSyxcclxuICBQR05fRk9STUFULFxyXG4gIEZBQ0lOR19QLFxyXG4gIExBTkRTQ0FQRSxcclxuICBKVVNULFxyXG4gIFBBUkQsXHJcbiAgUExBSU4sXHJcbiAgU0VDVEQsXHJcbiAgQlVMTEVULFxyXG4gIFhBX0JVTExFVCxcclxuICBNQVhcclxufVxyXG5cclxuLyogUnRmIERlc3RpbmF0aW9uIFN0YXRlICovXHJcbmV4cG9ydCBlbnVtIFJ0Zl9SRFMge1xyXG4gIE5PUk0sXHJcbiAgQ09MT1IsXHJcbiAgU0tJUCxcclxuICBORVdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0Vycm9yUnRmIHtcclxuICBPSyxcclxuICBTVEFDS19VTkRFUkZMT1csXHJcbiAgU1RBQ0tfT1ZFUkZMT1csXHJcbiAgVU5NQVRDSEVEX0JSQUNFLFxyXG4gIElOVkFMSURfSEVYLFxyXG4gIEJBRF9UQUJMRSxcclxuICBBU1NFUlRJT04sXHJcbiAgRU5EX09GX0ZJTEUsXHJcbiAgQlVGRkVSX1RPT19TTUFMTFxyXG59XHJcblxyXG4vLyBUT0RPIDpcclxuLy8gUnRmX1J0ZkNoYXIgc2hvdWxkIGFjdHVhbGx5IGJlIGVudW0uXHJcbi8vIEJ1dCBjb21wdXRlZCBzdHJpbmcgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBkZWZpbmVkIGluIGVudW0uXHJcbi8vIFNvLCB3ZSBjYW5ub3QgaGF2ZSBTdHJpbmcuZnJvbUNoYXJDb2RlKFhYWCkuXHJcbi8vIFdlIGhhdmUgMiBvcHRpb25zOlxyXG4vLyAxLiBDb252ZXJ0IHRoaXMgZW51bSBpbnRvIGEgY2xhc3Mgd2l0aCBhbGwgc3RhdGljIHJlYWRvbmx5IGl0ZW1zLlxyXG4vLyAyLiBLZWVwIGl0IGFzIGVudW0gd2l0aCBudW1lcmljIHZhbHVlcyAoY2hhciBjb2RlcykuXHJcbi8vIEdvaW5nIHdpdGggIzEgbm93LCBzaW5jZSBAMiBtYWtlcyB0aGUgY29kZSB1Z2x5LlxyXG4vLyBXaWxsIGV2YWxhdXRlIGxhdGVyIGlmIHJlcXVpcmVkLlxyXG5leHBvcnQgY2xhc3MgUnRmX1J0ZkNoYXIge1xyXG4gIHN0YXRpYyByZWFkb25seSBDUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwZCk7XHJcbiAgc3RhdGljIHJlYWRvbmx5IExGID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDBBKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgVEFCID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDA5KTtcclxuICBzdGF0aWMgcmVhZG9ubHkgQlVMTEVUID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDk1KTtcclxuICBzdGF0aWMgcmVhZG9ubHkgVElMREEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4QTApO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQVNIID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEFEKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgREFTSF9DSEFSID0gJy0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBRVU9URSA9ICdcXCcnO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQkxRVU9URSA9ICdcIic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE9QRU5JTkdCUkFDRSA9ICd7JztcclxuICBzdGF0aWMgcmVhZG9ubHkgQ0xPU0lOR0JSQUNFID0gJ30nO1xyXG4gIHN0YXRpYyByZWFkb25seSBCQUNLU0xBU0ggPSAnXFxcXCc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9SSVMge1xyXG4gIE5PUk0sXHJcbiAgQklOLFxyXG4gIEhFWCxcclxuICBVTklDT0RFXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSdGYge1xyXG4gIHByaXZhdGUgX2dyb3VwOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NiQmluOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2xQYXJhbTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9za2lwRGVzdElmVW5rOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb3V0cHV0T25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3Byb2Nlc3NDcmxmU3BlY2lhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rlc3RTdGF0ZTogUnRmX1JEUyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaW50ZXJuYWxTdGF0ZTogUnRmX1JJUyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfc3RhY2s6IFN0YWNrPFJ0Zl9TdGFja1NhdmU+ID0gbnVsbDtcclxuICBwcml2YXRlIF9pbmRleDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9mb250TnVtOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYXJzZXRUYWJsZTogSGFzaHRhYmxlPG51bWJlciwgbnVtYmVyPiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZVBhZ2VUYWJsZTogSGFzaHRhYmxlPG51bWJlciwgbnVtYmVyPiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+KCk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUlRGX1BSRUZJWDogc3RyaW5nID0gXCJ7XFxcXHJ0ZlwiO1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENIQVJfUEFSOiBzdHJpbmcgPSBcInBhclwiO1xyXG5cclxuICAvKiBQcm9wZXJ0eSBkZXNjcmlwdGlvbnMgKi9cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZ3Byb3A6IFJ0Zl9QUk9QW10gPSBbXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5QQVApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5QQVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlBBUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlNFUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuU0VQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuU0VQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5TRVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLlNFUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkRPUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuRE9QKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuUEFQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLlNQRUMsIFJ0Zl9QUk9QVFlQRS5QQVApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLlNQRUMsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uU1BFQywgUnRmX1BST1BUWVBFLlNFUClcclxuICBdO1xyXG5cclxuICAvKiBLZXl3b3JkIGRlc2NyaXB0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJnc3ltUnRmOiBSdGZfU1lNQk9MW10gPSBbXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImJcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuQk9MRCksIG5ldyBSdGZfU1lNQk9MKFwidWxcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuVU5ERVJMSU5FKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiaVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5JVEFMSUMpLCBuZXcgUnRmX1NZTUJPTChcImxpXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkxFRlRfSU5EKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicmlcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUklHSFRfSU5EKSwgbmV3IFJ0Zl9TWU1CT0woXCJmaVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5GSVJTVF9JTkQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJjb2xzXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkNPTFMpLCBuZXcgUnRmX1NZTUJPTChcInNia25vbmVcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwic2JrY29sXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlNCSyksIG5ldyBSdGZfU1lNQk9MKFwic2JrZXZlblwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5TQkspLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJzYmtvZGRcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSwgbmV3IFJ0Zl9TWU1CT0woXCJzYmtwYWdlXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlNCSyksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBnbnhcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1gpLCBuZXcgUnRmX1NZTUJPTChcInBnbnlcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1kpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJwZ25kZWNcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX0ZPUk1BVCksIG5ldyBSdGZfU1lNQk9MKFwicGdudWNybVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGdubGNybVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSwgbmV3IFJ0Zl9TWU1CT0woXCJwZ251Y2x0clwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGdubGNsdHJcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX0ZPUk1BVCksIG5ldyBSdGZfU1lNQk9MKFwicWNcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuSlVTVCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInFsXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkpVU1QpLCBuZXcgUnRmX1NZTUJPTChcInFyXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkpVU1QpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJxalwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5KVVNUKSwgbmV3IFJ0Zl9TWU1CT0woXCJwYXBlcndcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWEFfUEFHRSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBhcGVyaFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5ZQV9QQUdFKSwgbmV3IFJ0Zl9TWU1CT0woXCJtYXJnbFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5YQV9MRUZUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwibWFyZ3JcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWEFfUklHSFQpLCBuZXcgUnRmX1NZTUJPTChcIm1hcmd0XCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLllBX1RPUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcIm1hcmdiXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLllBX0JPVFRPTSksIG5ldyBSdGZfU1lNQk9MKFwicGduc3RhcnRcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1NUQVJUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZmFjaW5ncFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5GQUNJTkdfUCksIG5ldyBSdGZfU1lNQk9MKFwibGFuZHNjYXBlXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkxBTkRTQ0FQRSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBhclwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkxGKSwgbmV3IFJ0Zl9TWU1CT0woXCJcXDB4MGFcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5MRiksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcIlxcMHgwZFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkxGKSwgbmV3IFJ0Zl9TWU1CT0woXCJ0YWJcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5UQUIpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJsZGJscXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5EQkxRVU9URSksIG5ldyBSdGZfU1lNQk9MKFwicmRibHF1b3RlXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuREJMUVVPVEUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJscXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5RVU9URSksIG5ldyBSdGZfU1lNQk9MKFwicnF1b3RlXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuUVVPVEUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJidWxsZXRcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5CVUxMRVQpLCBuZXcgUnRmX1NZTUJPTChcImVuZGFzaFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0hfQ0hBUiksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImVtZGFzaFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0hfQ0hBUiksIG5ldyBSdGZfU1lNQk9MKFwiflwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLlRJTERBKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiLVwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0gpLCBuZXcgUnRmX1NZTUJPTChcIntcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5PUEVOSU5HQlJBQ0UpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJ9XCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuQ0xPU0lOR0JSQUNFKSwgbmV3IFJ0Zl9TWU1CT0woXCJcXFxcXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuQkFDS1NMQVNIKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiYmluXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uQklOKSwgbmV3IFJ0Zl9TWU1CT0woXCIqXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uU0tJUF9ERVNUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiJ1wiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkhFWCksIG5ldyBSdGZfU1lNQk9MKFwiZlwiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkZPTlQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmY2hhcnNldFwiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkNIQVJTRVQpLCBuZXcgUnRmX1NZTUJPTChcInVcIiwgUnRmX0tXRC5TUEVDLCBSdGZfSVBGTi5VTklDT0RFKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiYXV0aG9yXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImJ1cHRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiY29sb3J0YmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiY29tbWVudFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiY3JlYXRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJkb2Njb21tXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmb250dGJsXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZvb3RlclwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZm9vdGVyZlwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJmb290ZXJsXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmb290ZXJyXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZvb3Rub3RlXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmdG5jblwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJmdG5zZXBcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZ0bnNlcGNcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiaGVhZGVyXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJoZWFkZXJmXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImhlYWRlcmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImhlYWRlcnJcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiaW5mb1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwia2V5d29yZHNcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwib3BlcmF0b3JcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBpY3RcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwicHJpbnRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicHJpdmF0ZTFcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwicmV2dGltXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJyeGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwic3R5bGVzaGVldFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwic3ViamVjdFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJ0Y1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwidGl0bGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwidHhlXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJ4ZVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKVxyXG4gIF07XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ29uc3RydWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fc3RhY2sgPSBuZXcgU3RhY2s8UnRmX1N0YWNrU2F2ZT4oKTtcclxuICAgIHRoaXMuX2dyb3VwID0gMDtcclxuICAgIHRoaXMuX2NiQmluID0gMDtcclxuICAgIHRoaXMuX2xQYXJhbSA9IDA7XHJcbiAgICB0aGlzLl9vdXRwdXRPbmNlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wcm9jZXNzQ3JsZlNwZWNpYWwgPSBmYWxzZTtcclxuICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuTk9STTtcclxuICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICB0aGlzLl9mb250TnVtID0gMDtcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29kZVBhZ2VUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDaGVja3MgaWYgdGhlIGJsb2IgaGFzIGEgUnRmIGRhdGEgb3Igbm90XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgaXNSdGYoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1J0ZjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHN0ciAhPT0gbnVsbCAmJiBzdHIuc3RhcnRzV2l0aCh0aGlzLlJURl9QUkVGSVgpKSB7XHJcbiAgICAgIGlzUnRmID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1J0ZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ29udmVydHMgUnRmIFRleHQgdG8gUGxhaW4gVGV4dFxyXG4gIC8vLyBTdGVwIDE6IElzb2xhdGUgUlRGIGtleXdvcmRzIGFuZCBzZW5kIHRoZW0gdG8gUGFyc2VLZXl3b3JkOyBQdXNoIGFuZCBwb3Agc3RhdGUgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcclxuICAvLy8gUlRGIGdyb3VwcyBTZW5kIHRleHQgdG8gUGFyc2VDaGFyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJydGZUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRwdXRUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwdWJsaWMgdG9UeHQocnRmVHh0OiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBsZXQgY05pYmJsZTogbnVtYmVyID0gMjtcclxuICAgIGxldCBiOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGN1cnJQb3M6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2tpcE5ld2xpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBibG9iU3RyTGVuOiBudW1iZXI7XHJcbiAgICBsZXQgYmxvYkNoYXI6IHN0cmluZztcclxuICAgIGxldCBlYzogUnRmX0Vycm9yUnRmO1xyXG4gICAgbGV0IGRiY3NCeXRlczogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KDIpO1xyXG4gICAgbGV0IHNraXBQYXJzZUNoYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGFyc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGNvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX291dHB1dE9uY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Byb2Nlc3NDcmxmU3BlY2lhbCA9IGZhbHNlO1xyXG4gICAgYmxvYlN0ckxlbiA9IHJ0ZlR4dC5sZW5ndGg7XHJcbiAgICB0aGlzLl9pbmRleCA9IDA7XHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBSdGZfUkRTLk5PUk07XHJcbiAgICBpZiAocnRmVHh0ID09PSBudWxsIHx8IGJsb2JTdHJMZW4gPT09IDAgfHwgIVJ0Zi5pc1J0ZihydGZUeHQpKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2luZGV4IDwgYmxvYlN0ckxlbikge1xyXG4gICAgICBibG9iQ2hhciA9IHJ0ZlR4dFt0aGlzLl9pbmRleF07XHJcbiAgICAgIHRoaXMuX2luZGV4Kys7XHJcblxyXG4gICAgICBpZiAodGhpcy5fZ3JvdXAgPCAwKVxyXG4gICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuU1RBQ0tfVU5ERVJGTE9XO1xyXG5cclxuICAgICAgLyogaWYgd2UncmUgcGFyc2luZyBiaW5hcnkgZGF0YSwgaGFuZGxlIGl0IGRpcmVjdGx5ICovXHJcbiAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlID09PSBSdGZfUklTLkJJTikge1xyXG4gICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihibG9iQ2hhciwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGJsb2JDaGFyKSB7XHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLk9QRU5JTkdCUkFDRTpcclxuICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKChlYyA9IHRoaXMuUHVzaFN0YXRlKCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkNMT1NJTkdCUkFDRTpcclxuICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5Qb3BTdGF0ZSgpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBSdGZfUnRmQ2hhci5CQUNLU0xBU0g6XHJcbiAgICAgICAgICAgIHNraXBOZXdsaW5lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlS2V5d29yZChydGZUeHQsIG91dHB1dFR4dCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkxGOlxyXG4gICAgICAgICAgY2FzZSBSdGZfUnRmQ2hhci5DUjogIC8qIGNyIGFuZCBsZiBhcmUgbm9pc2UgY2hhcmFjdGVycy4uLiAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsKSB7XHJcbiAgICAgICAgICAgICAgLyogT25jZSB3ZSByZWFjaCB0aGUgMHgwYSB3aGlsZSBQcm9jZXNzQ1JMRlNwZWNpYWxfLCByZXNldCB0aGUgUHJvY2Vzc0NSTEZTcGVjaWFsXyAqL1xyXG4gICAgICAgICAgICAgIGlmIChibG9iQ2hhciA9PT0gUnRmX1J0ZkNoYXIuTEYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDcmxmU3BlY2lhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgICAgLyogc2tpcCBuZXcgbGluZXMgY29taW5nIG9ubHkgZnJvbSB0aGUgUlRGIGhlYWRlciAxLzEvOTggLSAjMjM5MCAqL1xyXG4gICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBMRiAoMHgwYSkgaWYgd2UgYXJlIG5vdCBpbiB0aGUgUHJvY2Vzc0NSTEZTcGVjaWFsXyAqL1xyXG4gICAgICAgICAgICAgIGlmIChibG9iQ2hhciA9PT0gUnRmX1J0ZkNoYXIuTEYgfHwgKGJsb2JDaGFyID09PSBSdGZfUnRmQ2hhci5DUiAmJiBza2lwTmV3bGluZSAmJiAhdGhpcy5fb3V0cHV0T25jZSkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGlmIChibG9iQ2hhciAhPT0gUnRmX1J0ZkNoYXIuQ1IpXHJcbiAgICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsU3RhdGUgPT09IFJ0Zl9SSVMuTk9STSkge1xyXG4gICAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihibG9iQ2hhciwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlID09PSBSdGZfUklTLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5QYXJzZUNoYXIoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9sUGFyYW0pLCBvdXRwdXRUeHQpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLyogcGFyc2luZyBoZXggZGF0YSAqL1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlICE9PSBSdGZfUklTLkhFWClcclxuICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuQVNTRVJUSU9OO1xyXG4gICAgICAgICAgICAgIGIgPSBiIDw8IDQ7XHJcbiAgICAgICAgICAgICAgaWYgKE5DaGFyLklzRGlnaXQoYmxvYkNoYXIpKVxyXG4gICAgICAgICAgICAgICAgYiArPSBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoTkNoYXIuSXNMb3dlcihibG9iQ2hhcikpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyIDwgJ2EnIHx8IGJsb2JDaGFyID4gJ2YnKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuSU5WQUxJRF9IRVg7XHJcbiAgICAgICAgICAgICAgICAgIGIgKz0gMTAgKyBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJ2EnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyIDwgJ0EnIHx8IGJsb2JDaGFyID4gJ0YnKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuSU5WQUxJRF9IRVg7XHJcbiAgICAgICAgICAgICAgICAgIGIgKz0gMTAgKyBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNOaWJibGUtLTtcclxuICAgICAgICAgICAgICBpZiAoY05pYmJsZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IHRoaXMuZ2V0Q2hhcnNldCh0aGlzLl9mb250TnVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlIGNoYXJhY3RlclxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXNraXBQYXJzZUNoYXIgJiYgUnRmLmlzMXN0Qnl0ZShiLCBjaGFyc2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRiY3NCeXRlc1swXSA9IGI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBza2lwUGFyc2VDaGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0cmFpbGluZyBieXRlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBQYXJzZUNoYXIgJiYgUnRmLmlzMm5kQnl0ZShiLCBjaGFyc2V0KSlcclxuICAgICAgICAgICAgICAgICAgICAgIGRiY3NCeXRlc1sxXSA9IGI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luZ2xlLWJ5dGUgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYmNzQnl0ZXNbMF0gPSBiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgREJDUyB0byBVbmljb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgY29kZVBhZ2UgPSB0aGlzLmdldENvZGVQYWdlKGNoYXJzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB3b3JrU3RyOiBzdHJpbmcgPSBFbmNvZGluZy5HZXRFbmNvZGluZyhjb2RlUGFnZSkuR2V0U3RyaW5nKGRiY3NCeXRlcywgMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IHdvcmtTdHIuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lwUGFyc2VDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghc2tpcFBhcnNlQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5QYXJzZUNoYXIoU3RyaW5nLmZyb21DaGFyQ29kZShiKSwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjTmliYmxlID0gMjtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuTk9STTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogZW5kIGVsc2UgKHJpcyAhPSByaXNOb3JtKSAqL1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLyogc3dpdGNoICovXHJcbiAgICAgIH1cclxuICAgICAgLyogZWxzZSAocmlzICE9IHJpc0JpbikgKi9cclxuICAgIH1cclxuICAgIC8qIHdoaWxlICovXHJcblxyXG4gICAgaWYgKHRoaXMuX2dyb3VwIDwgMClcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5TVEFDS19VTkRFUkZMT1c7XHJcbiAgICBpZiAodGhpcy5fZ3JvdXAgPiAwKVxyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlVOTUFUQ0hFRF9CUkFDRTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRWxpbWluYXRlIHN1ZmZpeCBvZiBjYXJyaWdlIHJldHVybiArIGxpbmUgZmVlZCAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgIC8qIChDaGVjayBsYXN0IGNoYXJhY3RlcnMgLSBqdXN0IGluIGNhc2UgZm9ybWF0IGlzIG5vdCB0aGUgZXhwZWN0ZWQpICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgY3VyclBvcyA9IG91dHB1dFR4dC5MZW5ndGg7XHJcbiAgICBpZiAoY3VyclBvcyA+PSAzICYmIChvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDMpID09PSBSdGZfUnRmQ2hhci5DUiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDIpID09PSBSdGZfUnRmQ2hhci5MRiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDEpID09PSBSdGZfUnRmQ2hhci5DUiB8fCBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDMpID09PSBSdGZfUnRmQ2hhci5MRiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDIpID09PSBSdGZfUnRmQ2hhci5DUiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDEpID09PSBSdGZfUnRmQ2hhci5DUikpXHJcbiAgICAgIG91dHB1dFR4dC5SZW1vdmUoY3VyclBvcyAtIDMsIDMpO1xyXG5cclxuICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJvdXRlIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGRlc3RpbmF0aW9uIHN0cmVhbS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib3V0cHV0VHh0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQYXJzZUNoYXIoY2g6IHN0cmluZywgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAodGhpcy5faW50ZXJuYWxTdGF0ZSA9PT0gUnRmX1JJUy5CSU4gJiYgLS10aGlzLl9jYkJpbiA8PSAwKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rlc3RTdGF0ZSA9PT0gUnRmX1JEUy5TS0lQKSB7XHJcbiAgICB9XHJcbiAgICAvKiBUb3NzIHRoaXMgY2hhcmFjdGVyLiAqL1xyXG4gICAgZWxzZSBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLk5PUk0pIHtcclxuICAgICAgLyogT3V0cHV0IGEgY2hhcmFjdGVyLiBQcm9wZXJ0aWVzIGFyZSB2YWxpZCBhdCB0aGlzIHBvaW50LiAqL1xyXG4gICAgICByZXQgPSB0aGlzLlByaW50Q2hhcihjaCwgb3V0cHV0VHh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvKiBoYW5kbGUgb3RoZXIgZGVzdGluYXRpb25zLi4uLiAqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2VuZCBhIGNoYXJhY3RlciB0byB0aGUgb3V0cHV0IGZpbGUuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjaFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUHJpbnRDaGFyKGNoOiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICAvKiBBbGxvdyBjYXJyaWdlIHJldHVybiArIGxpbmUgZmVlZCBpbiB0ZXh0LCBidXQgcmVtb3ZlIGJ1bGxldCBzaWduICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoKGNoID49ICcgJyB8fCBjaCA9PT0gUnRmX1J0ZkNoYXIuQ1IgfHwgY2ggPT09IFJ0Zl9SdGZDaGFyLkxGKSAmJiBjaCAhPT0gU3RyaW5nLmZyb21DaGFyQ29kZSgxODMpKSB7XHJcbiAgICAgIG91dHB1dFR4dC5BcHBlbmQoY2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaCA+PSAnICcpIHtcclxuICAgICAgdGhpcy5fb3V0cHV0T25jZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2F2ZSByZWxldmFudCBpbmZvIG9uIGEgbGlua2VkIGxpc3Qgb2YgU0FWRSBzdHJ1Y3R1cmVzLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQdXNoU3RhdGUoKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCBzdGFja1NhdmU6IFJ0Zl9TdGFja1NhdmUgPSBuZXcgUnRmX1N0YWNrU2F2ZSgpO1xyXG5cclxuICAgIGlmIChzdGFja1NhdmUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5TVEFDS19PVkVSRkxPVztcclxuICAgIH1cclxuXHJcbiAgICBzdGFja1NhdmUucmRzID0gdGhpcy5fZGVzdFN0YXRlO1xyXG4gICAgc3RhY2tTYXZlLnJpcyA9IHRoaXMuX2ludGVybmFsU3RhdGU7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5OT1JNO1xyXG5cclxuICAgIHRoaXMuX3N0YWNrLnB1c2goc3RhY2tTYXZlKTtcclxuICAgIHRoaXMuX2dyb3VwKys7XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWx3YXlzIHJlc3RvcmUgcmVsZXZhbnQgaW5mbyBmcm9tIHRoZSB0b3Agb2YgdGhlIFNBVkUgbGlzdC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUG9wU3RhdGUoKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCBzYXZlZFBvcDogUnRmX1N0YWNrU2F2ZSA9IHRoaXMuX3N0YWNrLnBvcCgpO1xyXG5cclxuICAgIGlmIChzYXZlZFBvcCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlNUQUNLX1VOREVSRkxPVztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBzYXZlZFBvcC5yZHM7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gc2F2ZWRQb3AucmlzO1xyXG5cclxuICAgIHRoaXMuX2dyb3VwLS07XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU3RlcCAyOiBnZXQgYSBjb250cm9sIHdvcmQgKGFuZCBpdHMgYXNzb2NpYXRlZCB2YWx1ZSkgYW5kIGNhbGwgVHJhbnNsYXRlS2V5d29yZCB0byBkaXNwYXRjaCB0aGUgY29udHJvbC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJ0ZlR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUGFyc2VLZXl3b3JkKHJ0ZlR4dDogc3RyaW5nLCBvdXRwdXRUeHQ6IFN0cmluZ0J1aWxkZXIpOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IGNoOiBzdHJpbmc7XHJcbiAgICBsZXQgZk5lZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN6S2V5d29yZDogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBzelBhcmFtZXRlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBpZiAoKGNoID0gcnRmVHh0W3RoaXMuX2luZGV4KytdKSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSkge1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLkVORF9PRl9GSUxFO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIGEgY29udHJvbCBzeW1ib2w7IG5vIGRlbGltaXRlci4gKi9cclxuICAgIGlmICghTkNoYXIuSXNMZXR0ZXIoY2gpKSB7XHJcbiAgICAgIHN6S2V5d29yZCA9IHN6S2V5d29yZCArIGNoO1xyXG4gICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGVLZXl3b3JkKHN6S2V5d29yZCwgb3V0cHV0VHh0KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKDsgTkNoYXIuSXNMZXR0ZXIoY2gpOyBjaCA9IHJ0ZlR4dFt0aGlzLl9pbmRleCsrXSlcclxuICAgICAgc3pLZXl3b3JkID0gc3pLZXl3b3JkICsgY2g7XHJcblxyXG4gICAgaWYgKGNoID09PSAnLScpIHtcclxuICAgICAgZk5lZyA9IHRydWU7XHJcbiAgICAgIGlmICgoY2ggPSBydGZUeHRbdGhpcy5faW5kZXgrK10pID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApKVxyXG4gICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuRU5EX09GX0ZJTEU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE5DaGFyLklzRGlnaXQoY2gpKSB7XHJcbiAgICAgIGZvciAoOyBOQ2hhci5Jc0RpZ2l0KGNoKTsgY2ggPSBydGZUeHRbdGhpcy5faW5kZXgrK10pXHJcbiAgICAgICAgc3pQYXJhbWV0ZXIgPSBzelBhcmFtZXRlciArIGNoO1xyXG5cclxuICAgICAgdGhpcy5fbFBhcmFtID0gTk51bWJlci5QYXJzZShzelBhcmFtZXRlcik7XHJcblxyXG4gICAgICBpZiAoZk5lZylcclxuICAgICAgICB0aGlzLl9sUGFyYW0gPSAtdGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoICE9PSAnICcpXHJcbiAgICAgIHRoaXMuX2luZGV4LS07XHJcblxyXG4gICAgaWYgKHN6S2V5d29yZCA9PT0gIFJ0Zi5DSEFSX1BBUikge1xyXG4gICAgICAvKiBpZiB3ZSBnZXQgYSBSVEYgc2VxdWVuY2Ugb2YgXFxwYXJbMHhkXVsweGFdLCBpZSBhIFxccGFyIGt3ZCBmb2xsb3dlZCAgICovXHJcbiAgICAgIC8qIGltbWlkaWF0ZWx5IGJ5IHRoZSBDUiBhbmQgTEYsIHRoZW4gaWdub3JlIHRoZSBcXHBhciBrd2QuIG90aGVyd2lzZSAgICAqL1xyXG4gICAgICAvKiB3ZSB3aWxsIHRyYW5zbGF0ZSB0aGUgXFxwYXIgLSB3aGljaCB0cmFuc2xhdGVzIHRvIGEgTEYgKDB4YSkgYW5kIGFsc28gKi9cclxuICAgICAgLyogdGhlIGZvbGxvd2luZyAweDBkIGlzIHRyYW5zbGF0ZWQgdG8gMHgwYSwgdGh1cyByZXN1bHRpbmcgaW4gVFdPIExGJ3MgKi9cclxuICAgICAgLyogYmVpbmcgaW5zZXJ0ZWQgaW5zdGVhZCBvZiBqdXN0IG9uZSBMRi4gU28gYnkgc2tpcHBpbmcgW1xccGFyXSBhbmQgICAgICovXHJcbiAgICAgIC8qIHRyYW5zbGF0aW5nIG9ubHkgdGhlIFsweGQgMHhhXSB3aWxsIHJlc3VsdCBpbiBvbmx5IG9uZSBMRiBhcHBlYXJpbmcgICovXHJcbiAgICAgIC8qIC0gd2hpY2ggaXMgdGhlIGRlc2lyZWQgYmVoYXZpb3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgIGlmIChydGZUeHRbdGhpcy5faW5kZXhdID09PSBSdGZfUnRmQ2hhci5DUiAmJiBydGZUeHRbdGhpcy5faW5kZXggKyAxXSA9PT0gUnRmX1J0ZkNoYXIuTEYpXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRlS2V5d29yZChzektleXdvcmQsIG91dHB1dFR4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFN0ZXAgMy4gU2VhcmNoIHJnc3ltUnRmIGZvciBzektleXdvcmQgYW5kIGV2YWx1YXRlIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzektleXdvcmRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRwdXRUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIFRyYW5zbGF0ZUtleXdvcmQoc3pLZXl3b3JkOiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBsZXQgcmVzdWx0OiBSdGZfRXJyb3JSdGYgPSBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICBsZXQgaXN5bTogbnVtYmVyO1xyXG5cclxuICAgIC8qIHNlYXJjaCBmb3Igc3pLZXl3b3JkIGluIHJnc3ltUnRmICovXHJcbiAgICBmb3IgKGlzeW0gPSAwOyBpc3ltIDwgUnRmLnJnc3ltUnRmLmxlbmd0aDsgaXN5bSsrKSB7XHJcbiAgICAgIGlmIChzektleXdvcmQgPT09IFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5zektleXdvcmQpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIGNvbnRyb2wgd29yZCBub3QgZm91bmQgKi9cclxuICAgIGlmIChpc3ltID09PSBSdGYucmdzeW1SdGYubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLl9za2lwRGVzdElmVW5rKSB7XHJcbiAgICAgICAgLyogaWYgdGhpcyBpcyBhIG5ldyBkZXN0aW5hdGlvbiAqL1xyXG4gICAgICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuU0tJUDtcclxuICAgICAgICAvKiBza2lwIHRoZSBkZXN0aW5hdGlvbiAqL1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBlbHNlIGp1c3QgZGlzY2FyZCBpdCAqL1xyXG4gICAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gUnRmX0Vycm9yUnRmLkJBRF9UQUJMRTtcclxuXHJcbiAgICAgIC8qIGZvdW5kIGl0ISB1c2Uga3dkIGFuZCBpZHhJblJncHJvcCB0byBkZXRlcm1pbmUgd2hhdCB0byBkbyB3aXRoIGl0LiAqL1xyXG4gICAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5QUk9QKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZVByb3AoPFJ0Zl9JUFJPUD5SdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5rd2QgPT09IFJ0Zl9LV0QuQ0hBUikge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuUGFyc2VDaGFyKChSdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApLCBvdXRwdXRUeHQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5rd2QgPT09IFJ0Zl9LV0QuREVTVCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2hhbmdlRGVzdFN0YXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5TUEVDKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5QYXJzZVNwZWNpYWxLZXl3b3JkKDxSdGZfSVBGTj5SdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gVmFsaWRhdGUgdGhlIHByb3BlcnR5IGlkZW50aWZpZWQgYnkgX2lwcm9wXyB0byB0aGUgdmFsdWUgX3ZhbF8uXHJcbiAgLy8vIHByZXZpb3VzbHkgY2FsbGVkIEFwcGx5cHJvcGNoYW5nZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXByb3BcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHZhbGlkYXRlUHJvcChpcHJvcDogUnRmX0lQUk9QKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVApIHtcclxuICAgICAgLyogSWYgd2UncmUgc2tpcHBpbmcgdGV4dCwgKi9cclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgLyogZG9uJ3QgZG8gYW55dGhpbmcuICovXHJcbiAgICB9XHJcblxyXG4gICAgLyogdmFsaWRhdGUgcHJvcCAqL1xyXG4gICAgaWYgKFJ0Zi5yZ3Byb3BbaXByb3BdLnByb3AgIT09IFJ0Zl9QUk9QVFlQRS5ET1AgJiYgUnRmLnJncHJvcFtpcHJvcF0ucHJvcCAhPT0gUnRmX1BST1BUWVBFLlNFUCAmJlxyXG4gICAgICBSdGYucmdwcm9wW2lwcm9wXS5wcm9wICE9PSBSdGZfUFJPUFRZUEUuUEFQICYmIFJ0Zi5yZ3Byb3BbaXByb3BdLnByb3AgIT09IFJ0Zl9QUk9QVFlQRS5DSFAgJiZcclxuICAgICAgUnRmLnJncHJvcFtpcHJvcF0uYWN0biAhPT0gUnRmX0FDVE4uU1BFQykge1xyXG4gICAgICByZXQgPSBSdGZfRXJyb3JSdGYuQkFEX1RBQkxFO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSdGYucmdwcm9wW2lwcm9wXS5hY3RuICE9PSBSdGZfQUNUTi5CWVRFICYmIFJ0Zi5yZ3Byb3BbaXByb3BdLmFjdG4gIT09IFJ0Zl9BQ1ROLldPUkQgJiYgUnRmLnJncHJvcFtpcHJvcF0uYWN0biAhPT0gUnRmX0FDVE4uU1BFQykge1xyXG4gICAgICByZXQgPSBSdGZfRXJyb3JSdGYuQkFEX1RBQkxFO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENoYW5nZSB0byB0aGUgZGVzdGluYXRpb24gc3RhdGUuXHJcbiAgLy8vIHByZXZpb3VzbHkgY2FsbGVkIENoYW5nZURlc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hhbmdlRGVzdFN0YXRlKCk6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVApIHtcclxuICAgICAgLyogaWYgd2UncmUgc2tpcHBpbmcgdGV4dCwgKi9cclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICAgICAgLyogZG9uJ3QgZG8gYW55dGhpbmcgKi9cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBSdGZfUkRTLlNLSVA7XHJcbiAgICAvKiB3aGVuIGluIGRvdWJ0LCBza2lwIGl0Li4uICovXHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gRXZhbHVhdGUgYW4gUlRGIGNvbnRyb2wgdGhhdCBuZWVkcyBzcGVjaWFsIHByb2Nlc3NpbmcuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpcGZuXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQYXJzZVNwZWNpYWxLZXl3b3JkKGlwZm46IFJ0Zl9JUEZOKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgaWYgKHRoaXMuX2Rlc3RTdGF0ZSA9PT0gUnRmX1JEUy5TS0lQICYmIGlwZm4gIT09IFJ0Zl9JUEZOLkJJTikge1xyXG4gICAgICAgIC8qIGlmIHdlJ3JlIHNraXBwaW5nLCBhbmQgaXQncyBub3QgKi9cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIC8qIHRoZSBcXGJpbiBrZXl3b3JkLCBpZ25vcmUgaXQuICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcGZuID09PSBSdGZfSVBGTi5GT05UIHx8IGlwZm4gPT09IFJ0Zl9JUEZOLkNIQVJTRVQgfHwgaXBmbiA9PT0gUnRmX0lQRk4uVU5JQ09ERSkge1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVAgJiYgaXBmbiAhPT0gUnRmX0lQRk4uQklOICYmIGlwZm4gIT09IFJ0Zl9JUEZOLkZPTlQgJiZcclxuICAgICAgICBpcGZuICE9PSBSdGZfSVBGTi5DSEFSU0VUICYmIGlwZm4gIT09IFJ0Zl9JUEZOLlVOSUNPREUpIHtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlwZm4gPT09IFJ0Zl9JUEZOLkJJTikge1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5CSU47XHJcbiAgICAgIHRoaXMuX2NiQmluID0gdGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uU0tJUF9ERVNUKSB7XHJcbiAgICAgIHRoaXMuX3NraXBEZXN0SWZVbmsgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uSEVYKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLkhFWDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlwZm4gPT09IFJ0Zl9JUEZOLkZPTlQpIHtcclxuICAgICAgdGhpcy5fZm9udE51bSA9IDxudW1iZXI+dGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uQ0hBUlNFVCkge1xyXG4gICAgICB0aGlzLl9jaGFyc2V0VGFibGUuc2V0X0l0ZW0odGhpcy5fZm9udE51bSwgPG51bWJlcj50aGlzLl9sUGFyYW0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uVU5JQ09ERSkge1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5VTklDT0RFO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldCA9IFJ0Zl9FcnJvclJ0Zi5CQURfVEFCTEU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzMXN0Qnl0ZShkYmNzQnl0ZXM6IG51bWJlciwgY2hhcnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRiY3NCeXRlcyA+IDI1NSlcclxuICAgICAgcmV0dXJuIHJldDtcclxuXHJcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcclxuICAgICAgY2FzZSAxMjg6XHJcbiAgICAgICAgcmV0ID0gKDEyOSA8PSBkYmNzQnl0ZXMgJiYgZGJjc0J5dGVzIDw9IDE1OSkgfHwgKDIyNCA8PSBkYmNzQnl0ZXMgJiYgZGJjc0J5dGVzIDw9IDI1NCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTI5OlxyXG4gICAgICBjYXNlIDEzNDpcclxuICAgICAgY2FzZSAxMzY6XHJcbiAgICAgICAgcmV0ID0gKDEyOSA8PSBkYmNzQnl0ZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ2hlY2tzIGlmIHRoZSBieXRlIGlzIHdpdGhpbiB0aGUgdHJhaWxpbmcgYnl0ZSByYW5nZS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRiY3NCeXRlc1wiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoYXJzZXRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBpczJuZEJ5dGUoZGJjc0J5dGVzOiBudW1iZXIsIGNoYXJzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKGRiY3NCeXRlcyA+IDI1NSlcclxuICAgICAgcmV0dXJuIHJldDtcclxuXHJcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcclxuICAgICAgY2FzZSAxMjg6XHJcbiAgICAgICAgcmV0ID0gKGRiY3NCeXRlcyAhPT0gMTI3KSAmJiAoNjQgPD0gZGJjc0J5dGVzICYmIGRiY3NCeXRlcyA8PSAyNTIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDEyOTpcclxuICAgICAgY2FzZSAxMzQ6XHJcbiAgICAgIGNhc2UgMTM2OlxyXG4gICAgICAgIHJldCA9ICg2NCA8PSBkYmNzQnl0ZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ3JlYXRlIGEgaGFzaHRhYmxlIG9mIGNvZGVwYWdlIGFzc29jaWF0ZWQgd2l0aCBjaGFyc2V0LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHNldENvZGVQYWdlVGFibGUoKTogdm9pZCB7XHJcbiAgICAvLyBhZGQgZWxlbWVudHMgd2l0aCBrZXkgKGNoYXJzZXQpIGFuZCB2YWx1ZSAoY29kZXBhZ2UpIGludG8gdGhlIHRhYmxlLlxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgwLCAxMjUyKTsgICAgLy8gQU5TSV9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDEyOCwgOTMyKTsgICAvLyBTSElGVEpJU19DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDEyOSwgOTQ5KTsgICAvLyBIQU5HVUxfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxMzQsIDkzNik7ICAgLy8gR0IyMzEyX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTM2LCA5NTApOyAgIC8vIENISU5FU0VCSUc1X0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTYxLCAxMjUzKTsgIC8vIEdSRUVLX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTYyLCAxMjU0KTsgIC8vIFRVUktJU0hfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxNzcsIDEyNTUpOyAgLy8gSEVCUkVXX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTc4LCAxMjU2KTsgIC8vIEFSQUJJQyBfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxODYsIDEyNTcpOyAgLy8gQkFMVElDX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMjA0LCAxMjUxKTsgIC8vIFJVU1NJQU5fQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgyMjIsIDg3NCk7ICAgLy8gVEhBSV9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDIzOCwgMTI1MCk7ICAvLyBFQVNURVVST1BFX0NIQVJTRVRcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0IGNvZGVwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjaGFyc2V0LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2hhcnNldFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0Q29kZVBhZ2UoY2hhcnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjb2RlUGFnZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fY29kZVBhZ2VUYWJsZS5Db250YWluc0tleShjaGFyc2V0KSkge1xyXG4gICAgICBjb2RlUGFnZSA9IHRoaXMuX2NvZGVQYWdlVGFibGUuZ2V0X0l0ZW0oY2hhcnNldCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvZGVQYWdlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXQgY2hhcnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9udCBpbmRleC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvbnRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldENoYXJzZXQoZm9udDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjaGFyc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl9jaGFyc2V0VGFibGUuQ29udGFpbnNLZXkoZm9udCkpIHtcclxuICAgICAgY2hhcnNldCA9IHRoaXMuX2NoYXJzZXRUYWJsZS5nZXRfSXRlbShmb250KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaGFyc2V0O1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnRmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL1J0Zi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHbEQsTUFBTSxPQUFPLFVBQVU7SUFXckIsWUFBWSxPQUFlLEVBQUUsR0FBWSxFQUFFLFdBQWdCO1FBVjNELGNBQVMsR0FBVyxJQUFJLENBQUM7UUFFekIsUUFBRyxHQUFZLElBQUksQ0FBQztRQUVwQixnQkFBVyxHQUFRLElBQUksQ0FBQztRQU90QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxRQUFRO0lBT25CLFlBQVksSUFBYyxFQUFFLElBQWtCO1FBTjlDLFNBQUksR0FBYSxJQUFJLENBQUM7UUFFdEIsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFLeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxhQUFhO0lBQW5CO1FBQ0UsUUFBRyxHQUFZLElBQUksQ0FBQztRQUNwQixRQUFHLEdBQVksSUFBSSxDQUFDO0lBQ3RCLENBQUM7Q0FBQTtBQUVELE1BQU0sQ0FBTixJQUFZLE9BS1g7QUFMRCxXQUFZLE9BQU87SUFDakIscUNBQUksQ0FBQTtJQUNKLHFDQUFJLENBQUE7SUFDSixxQ0FBSSxDQUFBO0lBQ0oscUNBQUksQ0FBQTtBQUNOLENBQUMsRUFMVyxPQUFPLEtBQVAsT0FBTyxRQUtsQjtBQUVELE1BQU0sQ0FBTixJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsNkNBQUcsQ0FBQTtJQUNILDZDQUFHLENBQUE7SUFDSCw2Q0FBRyxDQUFBO0lBQ0gsNkNBQUcsQ0FBQTtBQUNMLENBQUMsRUFMVyxZQUFZLEtBQVosWUFBWSxRQUt2QjtBQUVELE1BQU0sQ0FBTixJQUFZLFFBSVg7QUFKRCxXQUFZLFFBQVE7SUFDbEIsdUNBQUksQ0FBQTtJQUNKLHVDQUFJLENBQUE7SUFDSix1Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQUpXLFFBQVEsS0FBUixRQUFRLFFBSW5CO0FBRUQsTUFBTSxDQUFOLElBQVksUUFTWDtBQVRELFdBQVksUUFBUTtJQUNsQixxQ0FBRyxDQUFBO0lBQ0gscUNBQUcsQ0FBQTtJQUNILGlEQUFTLENBQUE7SUFDVCx5Q0FBSyxDQUFBO0lBQ0wscUNBQUcsQ0FBQTtJQUNILHVDQUFJLENBQUE7SUFDSiw2Q0FBTyxDQUFBO0lBQ1AsNkNBQU8sQ0FBQTtBQUNULENBQUMsRUFUVyxRQUFRLEtBQVIsUUFBUSxRQVNuQjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIseUNBQUksQ0FBQTtJQUNKLDJDQUFLLENBQUE7SUFDTCx5Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBR0QsTUFBTSxDQUFOLElBQVksU0FrQ1g7QUFsQ0QsV0FBWSxTQUFTO0lBQ25CLHlDQUFRLENBQUE7SUFDUiw2Q0FBTSxDQUFBO0lBQ04sbURBQVMsQ0FBQTtJQUNULHlDQUFJLENBQUE7SUFDSix5Q0FBSSxDQUFBO0lBQ0osMkNBQUssQ0FBQTtJQUNMLHVDQUFHLENBQUE7SUFDSCwyQ0FBSyxDQUFBO0lBQ0wseUNBQUksQ0FBQTtJQUNKLGlEQUFRLENBQUE7SUFDUixvREFBUyxDQUFBO0lBQ1Qsb0RBQVMsQ0FBQTtJQUNULDBDQUFJLENBQUE7SUFDSiw0Q0FBSyxDQUFBO0lBQ0wsNENBQUssQ0FBQTtJQUNMLGdEQUFPLENBQUE7SUFDUCxnREFBTyxDQUFBO0lBQ1AsZ0RBQU8sQ0FBQTtJQUNQLGtEQUFRLENBQUE7SUFDUiw4Q0FBTSxDQUFBO0lBQ04sb0RBQVMsQ0FBQTtJQUNULG9EQUFTLENBQUE7SUFDVCx3Q0FBRyxDQUFBO0lBQ0gsc0RBQVUsQ0FBQTtJQUNWLGtEQUFRLENBQUE7SUFDUixvREFBUyxDQUFBO0lBQ1QsMENBQUksQ0FBQTtJQUNKLDBDQUFJLENBQUE7SUFDSiw0Q0FBSyxDQUFBO0lBQ0wsNENBQUssQ0FBQTtJQUNMLDhDQUFNLENBQUE7SUFDTixvREFBUyxDQUFBO0lBQ1Qsd0NBQUcsQ0FBQTtBQUNMLENBQUMsRUFsQ1csU0FBUyxLQUFULFNBQVMsUUFrQ3BCO0FBR0QsTUFBTSxDQUFOLElBQVksT0FLWDtBQUxELFdBQVksT0FBTztJQUNqQixxQ0FBSSxDQUFBO0lBQ0osdUNBQUssQ0FBQTtJQUNMLHFDQUFJLENBQUE7SUFDSixtQ0FBRyxDQUFBO0FBQ0wsQ0FBQyxFQUxXLE9BQU8sS0FBUCxPQUFPLFFBS2xCO0FBRUQsTUFBTSxDQUFOLElBQVksWUFVWDtBQVZELFdBQVksWUFBWTtJQUN0QiwyQ0FBRSxDQUFBO0lBQ0YscUVBQWUsQ0FBQTtJQUNmLG1FQUFjLENBQUE7SUFDZCxxRUFBZSxDQUFBO0lBQ2YsNkRBQVcsQ0FBQTtJQUNYLHlEQUFTLENBQUE7SUFDVCx5REFBUyxDQUFBO0lBQ1QsNkRBQVcsQ0FBQTtJQUNYLHVFQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFWVyxZQUFZLEtBQVosWUFBWSxRQVV2QjtBQVdELE1BQU0sT0FBTyxXQUFXOztBQUNOLGNBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLGNBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLGVBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLGtCQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxpQkFBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsZ0JBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLHFCQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLGlCQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2Isb0JBQVEsR0FBRyxHQUFHLENBQUM7QUFDZix3QkFBWSxHQUFHLEdBQUcsQ0FBQztBQUNuQix3QkFBWSxHQUFHLEdBQUcsQ0FBQztBQUNuQixxQkFBUyxHQUFHLElBQUksQ0FBQztBQUduQyxNQUFNLENBQU4sSUFBWSxPQUtYO0FBTEQsV0FBWSxPQUFPO0lBQ2pCLHFDQUFJLENBQUE7SUFDSixtQ0FBRyxDQUFBO0lBQ0gsbUNBQUcsQ0FBQTtJQUNILDJDQUFPLENBQUE7QUFDVCxDQUFDLEVBTFcsT0FBTyxLQUFQLE9BQU8sUUFLbEI7QUFFRCxNQUFNLE9BQU8sR0FBRztJQXNGZDtRQXJGUSxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsWUFBTyxHQUFXLENBQUMsQ0FBQztRQUNwQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3Qix3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyxXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ25CLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDWixrQkFBYSxHQUE4QixJQUFJLFNBQVMsRUFBa0IsQ0FBQztRQUMzRSxtQkFBYyxHQUE4QixJQUFJLFNBQVMsRUFBa0IsQ0FBQztRQTBFM0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFTRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQVc7UUFDdEIsSUFBSSxLQUFLLEdBQVksS0FBSyxDQUFDO1FBQzNCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuRCxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFhTSxLQUFLLENBQUMsTUFBYyxFQUFFLFNBQXdCO1FBQ25ELElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUFJLFVBQWtCLENBQUM7UUFDdkIsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksRUFBZ0IsQ0FBQztRQUNyQixJQUFJLFNBQVMsR0FBZSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLGFBQWEsR0FBWSxLQUFLLENBQUM7UUFDbkMsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRTtZQUMvQixRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFZCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBR3RDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDO2FBQ2I7aUJBQ0k7Z0JBQ0gsUUFBUSxRQUFRLEVBQUU7b0JBQ2hCLEtBQUssV0FBVyxDQUFDLFlBQVk7d0JBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7NEJBQzdDLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU07b0JBRVIsS0FBSyxXQUFXLENBQUMsWUFBWTt3QkFDM0IsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRTs0QkFDNUMsT0FBTyxFQUFFLENBQUM7d0JBQ1osTUFBTTtvQkFFUixLQUFLLFdBQVcsQ0FBQyxTQUFTO3dCQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDO3dCQUNwQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7NEJBQ2pFLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE1BQU07b0JBRVIsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNwQixLQUFLLFdBQVcsQ0FBQyxFQUFFO3dCQUNqQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTs0QkFFNUIsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUUsRUFBRTtnQ0FDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQzs2QkFDbEM7eUJBQ0Y7NkJBQ0k7NEJBS0gsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0NBQ2xHLE1BQU07eUJBQ1Q7b0JBR0g7d0JBQ0UsSUFBSSxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUU7NEJBQzdCLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFOzRCQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7Z0NBQ2hFLE9BQU8sRUFBRSxDQUFDO3lCQUNiOzZCQUNJLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsT0FBTyxFQUFFOzRCQUNoRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRTtnQ0FDekYsT0FBTyxFQUFFLENBQUM7NEJBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO3lCQUNwQzs2QkFDSTs0QkFFSCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxDQUFDLEdBQUc7Z0NBQ3JDLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQzs0QkFDaEMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQ0FDekIsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDN0M7Z0NBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29DQUMzQixJQUFJLFFBQVEsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLEdBQUc7d0NBQ2xDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQztvQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ3REO3FDQUNJO29DQUNILElBQUksUUFBUSxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsR0FBRzt3Q0FDbEMsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO29DQUNsQyxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDdEQ7NkJBQ0Y7NEJBQ0QsT0FBTyxFQUFFLENBQUM7NEJBQ1YsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO2dDQUNqQixJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO29DQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0NBR3pDLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0NBQy9DLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0NBQ2pCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0NBQ2pCLGFBQWEsR0FBRyxJQUFJLENBQUM7cUNBQ3RCO3lDQUNJO3dDQUVILElBQUksYUFBYSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzs0Q0FDNUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs2Q0FFZDs0Q0FDSCxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRDQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lDQUNsQjt3Q0FHRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3Q0FDckMsSUFBSSxPQUFPLEdBQVcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3Q0FDaEYsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzFCLGFBQWEsR0FBRyxLQUFLLENBQUM7cUNBQ3ZCO2lDQUNGO2dDQUNELElBQUksQ0FBQyxhQUFhLEVBQUU7b0NBQ2xCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEVBQUU7d0NBQzlFLE9BQU8sRUFBRSxDQUFDO2lDQUNiO2dDQUNELE9BQU8sR0FBRyxDQUFDLENBQUM7Z0NBQ1osQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDTixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7NkJBQ3BDO3lCQUNGO3dCQUVELE1BQU07aUJBQ1Q7YUFFRjtTQUVGO1FBR0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2pCLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQztRQU10QyxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNwVixTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkMsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFXTyxTQUFTLENBQUMsRUFBVSxFQUFFLFNBQXdCO1FBQ3BELElBQUksR0FBRyxHQUFpQixZQUFZLENBQUMsRUFBRSxDQUFDO1FBRXhDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7U0FDckM7YUFFSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtZQUV6QyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDckM7YUFDSTtTQUVKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBV08sU0FBUyxDQUFDLEVBQVUsRUFBRSxTQUF3QjtRQUdwRCxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUVELE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBT08sU0FBUztRQUNmLElBQUksU0FBUyxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBRW5ELElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtZQUN0QixPQUFPLFlBQVksQ0FBQyxjQUFjLENBQUM7U0FDcEM7UUFFRCxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDaEMsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU9PLFFBQVE7UUFDZCxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVoRCxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDckIsT0FBTyxZQUFZLENBQUMsZUFBZSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFZCxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQVdPLFlBQVksQ0FBQyxNQUFjLEVBQUUsU0FBd0I7UUFDM0QsSUFBSSxFQUFVLENBQUM7UUFDZixJQUFJLElBQUksR0FBWSxLQUFLLENBQUM7UUFDMUIsSUFBSSxTQUFTLEdBQVcsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxHQUFXLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO1NBQ2pDO1FBR0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdkIsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRTdCLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUNkLElBQUksR0FBRyxJQUFJLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUM7U0FDbkM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRCxXQUFXLEdBQUcsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUVqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFMUMsSUFBSSxJQUFJO2dCQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxFQUFFLEtBQUssR0FBRztZQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVoQixJQUFJLFNBQVMsS0FBTSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBUS9CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFO2dCQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQ3hCO2FBQ0k7WUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBV08sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxTQUF3QjtRQUNsRSxJQUFJLE1BQU0sR0FBaUIsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQVksQ0FBQztRQUdqQixLQUFLLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2pELElBQUksU0FBUyxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUM5QyxNQUFNO2FBQ1A7U0FDRjtRQUdELElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2FBRWhDO1lBR0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7U0FDN0I7YUFDSTtZQUNILE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBR2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBRTVCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDM0MsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN2RTtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUN0RTtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hELE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDakM7aUJBQ0ksSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFXLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDN0U7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFTTyxZQUFZLENBQUMsS0FBZ0I7UUFDbkMsSUFBSSxHQUFHLEdBQWlCLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFFcEMsT0FBTyxHQUFHLENBQUM7U0FFWjtRQUdELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRztZQUM1RixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHO1lBQzFGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7U0FDOUI7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ3BJLEdBQUcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBT08sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtZQUVwQyxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUM7U0FFeEI7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFHL0IsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFTTyxtQkFBbUIsQ0FBQyxJQUFjO1FBQ3hDLElBQUksR0FBRyxHQUFpQixZQUFZLENBQUMsRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFFN0QsT0FBTyxHQUFHLENBQUM7YUFFWjtZQUVELElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BGLE9BQU8sR0FBRyxDQUFDO2FBQ1o7U0FDRjthQUNJO1lBQ0gsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNyRixJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDeEQsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO1FBRUQsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzVCO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjthQUNJLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQ25DO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdEM7YUFDSSxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xFO2FBQ0ksSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDdkM7YUFDSTtZQUNILEdBQUcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDekQsSUFBSSxHQUFHLEdBQVksS0FBSyxDQUFDO1FBRXpCLElBQUksU0FBUyxHQUFHLEdBQUc7WUFDakIsT0FBTyxHQUFHLENBQUM7UUFFYixRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RixNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFXTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN6RCxJQUFJLEdBQUcsR0FBWSxLQUFLLENBQUM7UUFDekIsSUFBSSxTQUFTLEdBQUcsR0FBRztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUViLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLEdBQUcsR0FBRyxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1lBQ1IsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFRTyxnQkFBZ0I7UUFFdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFTTyxXQUFXLENBQUMsT0FBZTtRQUNqQyxJQUFJLFFBQVEsR0FBVyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBU08sVUFBVSxDQUFDLElBQVk7UUFDN0IsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7QUEzckJ1QixjQUFVLEdBQVcsUUFBUSxDQUFDO0FBQzlCLFlBQVEsR0FBVyxLQUFLLENBQUM7QUFHekIsVUFBTSxHQUFlO0lBQzNDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzVGLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUM1RixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDNUYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO0NBQzdGLENBQUM7QUFHc0IsWUFBUSxHQUFpQjtJQUMvQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM1RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUM1RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUMzSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUM3SCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUN0RyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQztJQUNuSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUN6SCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMzSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUNoSSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNwSCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN6SCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNuSCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFlBQVksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN0SCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUN4RyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNqRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM5RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNqSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNqSCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNsSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3RyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUNoSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMvRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMzRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztJQUMxRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VuY29kaW5nLCBIYXNodGFibGUsIE5DaGFyLCBOTnVtYmVyLCBTdGFjaywgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7VXRpbFN0ckJ5dGVNb2RlfSBmcm9tIFwiLi9VdGlsU3RyQnl0ZU1vZGVcIjtcclxuXHJcbi8vQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFJ0Zl9TWU1CT0wge1xyXG4gIHN6S2V5d29yZDogc3RyaW5nID0gbnVsbDtcclxuICAvKiBSVEYga2V5d29yZCAqL1xyXG4gIGt3ZDogUnRmX0tXRCA9IG51bGw7XHJcbiAgLyogYmFzZSBhY3Rpb24gdG8gdGFrZSAqL1xyXG4gIGlkeEluUmdwcm9wOiBhbnkgPSBudWxsO1xyXG4gIC8qIGluZGV4IGludG8gcHJvcGVydHkgdGFibGUgaWYga3dkID09IGt3ZFByb3AgKi9cclxuXHJcbiAgLyogaW5kZXggaW50byBkZXN0aW5hdGlvbiB0YWJsZSBpZiBrd2QgPT0ga3dkRGVzdCAgKi9cclxuXHJcbiAgLyogY2hhcmFjdGVyIHRvIHByaW50IGlmIGt3ZCA9PSBrd2RDaGFyICAgICAgICAgICAgKi9cclxuICBjb25zdHJ1Y3RvcihrZXlXb3JkOiBzdHJpbmcsIGt3ZDogUnRmX0tXRCwgaWR4SW5SZ3Byb3A6IGFueSkge1xyXG4gICAgdGhpcy5zektleXdvcmQgPSBrZXlXb3JkO1xyXG4gICAgdGhpcy5rd2QgPSBrd2Q7XHJcbiAgICB0aGlzLmlkeEluUmdwcm9wID0gaWR4SW5SZ3Byb3A7XHJcbiAgfVxyXG59XHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBSdGZfUFJPUCB7XHJcbiAgYWN0bjogUnRmX0FDVE4gPSBudWxsO1xyXG4gIC8qIHNpemUgb2YgdmFsdWUgKi9cclxuICBwcm9wOiBSdGZfUFJPUFRZUEUgPSBudWxsO1xyXG5cclxuICAvKiBzdHJ1Y3R1cmUgY29udGFpbmluZyB2YWx1ZSAqL1xyXG5cclxuICBjb25zdHJ1Y3RvcihhY3RuOiBSdGZfQUNUTiwgcHJvcDogUnRmX1BST1BUWVBFKSB7XHJcbiAgICB0aGlzLmFjdG4gPSBhY3RuO1xyXG4gICAgdGhpcy5wcm9wID0gcHJvcDtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIFJ0Zl9TdGFja1NhdmUge1xyXG4gIHJkczogUnRmX1JEUyA9IG51bGw7XHJcbiAgcmlzOiBSdGZfUklTID0gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0tXRCB7XHJcbiAgQ0hBUixcclxuICBERVNULFxyXG4gIFBST1AsXHJcbiAgU1BFQ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfUFJPUFRZUEUge1xyXG4gIENIUCxcclxuICBQQVAsXHJcbiAgU0VQLFxyXG4gIERPUFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfQUNUTiB7XHJcbiAgU1BFQyxcclxuICBCWVRFLFxyXG4gIFdPUkRcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0lQRk4ge1xyXG4gIEJJTixcclxuICBIRVgsXHJcbiAgU0tJUF9ERVNULFxyXG4gIEJSRUFLLFxyXG4gIE5FVyxcclxuICBGT05ULFxyXG4gIENIQVJTRVQsXHJcbiAgVU5JQ09ERVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBSdGZfSURFU1Qge1xyXG4gIFBJQ1QsXHJcbiAgQ09MT1IsXHJcbiAgU0tJUFxyXG59XHJcblxyXG4vKiB0eXBlcyBvZiBwcm9wZXJ0aWVzICovXHJcbmV4cG9ydCBlbnVtIFJ0Zl9JUFJPUCB7XHJcbiAgQk9MRCA9IDAsXHJcbiAgSVRBTElDLFxyXG4gIFVOREVSTElORSxcclxuICBGT05ULFxyXG4gIFNJWkUsXHJcbiAgQ09MT1IsXHJcbiAgUkVELFxyXG4gIEdSRUVOLFxyXG4gIEJMVUUsXHJcbiAgTEVGVF9JTkQsXHJcbiAgUklHSFRfSU5ELFxyXG4gIEZJUlNUX0lORCxcclxuICBDT0xTLFxyXG4gIFBHTl9YLFxyXG4gIFBHTl9ZLFxyXG4gIFhBX1BBR0UsXHJcbiAgWUFfUEFHRSxcclxuICBYQV9MRUZULFxyXG4gIFhBX1JJR0hULFxyXG4gIFlBX1RPUCxcclxuICBZQV9CT1RUT00sXHJcbiAgUEdOX1NUQVJULFxyXG4gIFNCSyxcclxuICBQR05fRk9STUFULFxyXG4gIEZBQ0lOR19QLFxyXG4gIExBTkRTQ0FQRSxcclxuICBKVVNULFxyXG4gIFBBUkQsXHJcbiAgUExBSU4sXHJcbiAgU0VDVEQsXHJcbiAgQlVMTEVULFxyXG4gIFhBX0JVTExFVCxcclxuICBNQVhcclxufVxyXG5cclxuLyogUnRmIERlc3RpbmF0aW9uIFN0YXRlICovXHJcbmV4cG9ydCBlbnVtIFJ0Zl9SRFMge1xyXG4gIE5PUk0sXHJcbiAgQ09MT1IsXHJcbiAgU0tJUCxcclxuICBORVdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUnRmX0Vycm9yUnRmIHtcclxuICBPSyxcclxuICBTVEFDS19VTkRFUkZMT1csXHJcbiAgU1RBQ0tfT1ZFUkZMT1csXHJcbiAgVU5NQVRDSEVEX0JSQUNFLFxyXG4gIElOVkFMSURfSEVYLFxyXG4gIEJBRF9UQUJMRSxcclxuICBBU1NFUlRJT04sXHJcbiAgRU5EX09GX0ZJTEUsXHJcbiAgQlVGRkVSX1RPT19TTUFMTFxyXG59XHJcblxyXG4vLyBUT0RPIDpcclxuLy8gUnRmX1J0ZkNoYXIgc2hvdWxkIGFjdHVhbGx5IGJlIGVudW0uXHJcbi8vIEJ1dCBjb21wdXRlZCBzdHJpbmcgdmFsdWVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBkZWZpbmVkIGluIGVudW0uXHJcbi8vIFNvLCB3ZSBjYW5ub3QgaGF2ZSBTdHJpbmcuZnJvbUNoYXJDb2RlKFhYWCkuXHJcbi8vIFdlIGhhdmUgMiBvcHRpb25zOlxyXG4vLyAxLiBDb252ZXJ0IHRoaXMgZW51bSBpbnRvIGEgY2xhc3Mgd2l0aCBhbGwgc3RhdGljIHJlYWRvbmx5IGl0ZW1zLlxyXG4vLyAyLiBLZWVwIGl0IGFzIGVudW0gd2l0aCBudW1lcmljIHZhbHVlcyAoY2hhciBjb2RlcykuXHJcbi8vIEdvaW5nIHdpdGggIzEgbm93LCBzaW5jZSBAMiBtYWtlcyB0aGUgY29kZSB1Z2x5LlxyXG4vLyBXaWxsIGV2YWxhdXRlIGxhdGVyIGlmIHJlcXVpcmVkLlxyXG5leHBvcnQgY2xhc3MgUnRmX1J0ZkNoYXIge1xyXG4gIHN0YXRpYyByZWFkb25seSBDUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHgwZCk7XHJcbiAgc3RhdGljIHJlYWRvbmx5IExGID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDBBKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgVEFCID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDA5KTtcclxuICBzdGF0aWMgcmVhZG9ubHkgQlVMTEVUID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDk1KTtcclxuICBzdGF0aWMgcmVhZG9ubHkgVElMREEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4QTApO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQVNIID0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEFEKTtcclxuICBzdGF0aWMgcmVhZG9ubHkgREFTSF9DSEFSID0gJy0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBRVU9URSA9ICdcXCcnO1xyXG4gIHN0YXRpYyByZWFkb25seSBEQkxRVU9URSA9ICdcIic7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE9QRU5JTkdCUkFDRSA9ICd7JztcclxuICBzdGF0aWMgcmVhZG9ubHkgQ0xPU0lOR0JSQUNFID0gJ30nO1xyXG4gIHN0YXRpYyByZWFkb25seSBCQUNLU0xBU0ggPSAnXFxcXCc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJ0Zl9SSVMge1xyXG4gIE5PUk0sXHJcbiAgQklOLFxyXG4gIEhFWCxcclxuICBVTklDT0RFXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSdGYge1xyXG4gIHByaXZhdGUgX2dyb3VwOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NiQmluOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2xQYXJhbTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9za2lwRGVzdElmVW5rOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb3V0cHV0T25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3Byb2Nlc3NDcmxmU3BlY2lhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rlc3RTdGF0ZTogUnRmX1JEUyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaW50ZXJuYWxTdGF0ZTogUnRmX1JJUyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfc3RhY2s6IFN0YWNrPFJ0Zl9TdGFja1NhdmU+ID0gbnVsbDtcclxuICBwcml2YXRlIF9pbmRleDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9mb250TnVtOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYXJzZXRUYWJsZTogSGFzaHRhYmxlPG51bWJlciwgbnVtYmVyPiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZVBhZ2VUYWJsZTogSGFzaHRhYmxlPG51bWJlciwgbnVtYmVyPiA9IG5ldyBIYXNodGFibGU8bnVtYmVyLCBudW1iZXI+KCk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUlRGX1BSRUZJWDogc3RyaW5nID0gXCJ7XFxcXHJ0ZlwiO1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENIQVJfUEFSOiBzdHJpbmcgPSBcInBhclwiO1xyXG5cclxuICAvKiBQcm9wZXJ0eSBkZXNjcmlwdGlvbnMgKi9cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZ3Byb3A6IFJ0Zl9QUk9QW10gPSBbXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkNIUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuQ0hQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5QQVApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5QQVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlBBUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLlNFUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuU0VQKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuU0VQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uV09SRCwgUnRmX1BST1BUWVBFLkRPUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5XT1JELCBSdGZfUFJPUFRZUEUuRE9QKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLldPUkQsIFJ0Zl9QUk9QVFlQRS5ET1ApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLkJZVEUsIFJ0Zl9QUk9QVFlQRS5TRVApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLlNFUCksXHJcbiAgICBuZXcgUnRmX1BST1AoUnRmX0FDVE4uQllURSwgUnRmX1BST1BUWVBFLkRPUCksIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuRE9QKSxcclxuICAgIG5ldyBSdGZfUFJPUChSdGZfQUNUTi5CWVRFLCBSdGZfUFJPUFRZUEUuUEFQKSwgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLlNQRUMsIFJ0Zl9QUk9QVFlQRS5QQVApLFxyXG4gICAgbmV3IFJ0Zl9QUk9QKFJ0Zl9BQ1ROLlNQRUMsIFJ0Zl9QUk9QVFlQRS5DSFApLCBuZXcgUnRmX1BST1AoUnRmX0FDVE4uU1BFQywgUnRmX1BST1BUWVBFLlNFUClcclxuICBdO1xyXG5cclxuICAvKiBLZXl3b3JkIGRlc2NyaXB0aW9ucyAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJnc3ltUnRmOiBSdGZfU1lNQk9MW10gPSBbXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImJcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuQk9MRCksIG5ldyBSdGZfU1lNQk9MKFwidWxcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuVU5ERVJMSU5FKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiaVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5JVEFMSUMpLCBuZXcgUnRmX1NZTUJPTChcImxpXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkxFRlRfSU5EKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicmlcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUklHSFRfSU5EKSwgbmV3IFJ0Zl9TWU1CT0woXCJmaVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5GSVJTVF9JTkQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJjb2xzXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkNPTFMpLCBuZXcgUnRmX1NZTUJPTChcInNia25vbmVcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwic2JrY29sXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlNCSyksIG5ldyBSdGZfU1lNQk9MKFwic2JrZXZlblwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5TQkspLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJzYmtvZGRcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuU0JLKSwgbmV3IFJ0Zl9TWU1CT0woXCJzYmtwYWdlXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLlNCSyksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBnbnhcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1gpLCBuZXcgUnRmX1NZTUJPTChcInBnbnlcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1kpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJwZ25kZWNcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX0ZPUk1BVCksIG5ldyBSdGZfU1lNQk9MKFwicGdudWNybVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGdubGNybVwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSwgbmV3IFJ0Zl9TWU1CT0woXCJwZ251Y2x0clwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5QR05fRk9STUFUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicGdubGNsdHJcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX0ZPUk1BVCksIG5ldyBSdGZfU1lNQk9MKFwicWNcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuSlVTVCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInFsXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkpVU1QpLCBuZXcgUnRmX1NZTUJPTChcInFyXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkpVU1QpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJxalwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5KVVNUKSwgbmV3IFJ0Zl9TWU1CT0woXCJwYXBlcndcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWEFfUEFHRSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBhcGVyaFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5ZQV9QQUdFKSwgbmV3IFJ0Zl9TWU1CT0woXCJtYXJnbFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5YQV9MRUZUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwibWFyZ3JcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuWEFfUklHSFQpLCBuZXcgUnRmX1NZTUJPTChcIm1hcmd0XCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLllBX1RPUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcIm1hcmdiXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLllBX0JPVFRPTSksIG5ldyBSdGZfU1lNQk9MKFwicGduc3RhcnRcIiwgUnRmX0tXRC5QUk9QLCBSdGZfSVBST1AuUEdOX1NUQVJUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZmFjaW5ncFwiLCBSdGZfS1dELlBST1AsIFJ0Zl9JUFJPUC5GQUNJTkdfUCksIG5ldyBSdGZfU1lNQk9MKFwibGFuZHNjYXBlXCIsIFJ0Zl9LV0QuUFJPUCwgUnRmX0lQUk9QLkxBTkRTQ0FQRSksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBhclwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkxGKSwgbmV3IFJ0Zl9TWU1CT0woXCJcXDB4MGFcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5MRiksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcIlxcMHgwZFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkxGKSwgbmV3IFJ0Zl9TWU1CT0woXCJ0YWJcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5UQUIpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJsZGJscXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5EQkxRVU9URSksIG5ldyBSdGZfU1lNQk9MKFwicmRibHF1b3RlXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuREJMUVVPVEUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJscXVvdGVcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5RVU9URSksIG5ldyBSdGZfU1lNQk9MKFwicnF1b3RlXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuUVVPVEUpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJidWxsZXRcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5CVUxMRVQpLCBuZXcgUnRmX1NZTUJPTChcImVuZGFzaFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0hfQ0hBUiksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImVtZGFzaFwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0hfQ0hBUiksIG5ldyBSdGZfU1lNQk9MKFwiflwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLlRJTERBKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiLVwiLCBSdGZfS1dELkNIQVIsIFJ0Zl9SdGZDaGFyLkRBU0gpLCBuZXcgUnRmX1NZTUJPTChcIntcIiwgUnRmX0tXRC5DSEFSLCBSdGZfUnRmQ2hhci5PUEVOSU5HQlJBQ0UpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJ9XCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuQ0xPU0lOR0JSQUNFKSwgbmV3IFJ0Zl9TWU1CT0woXCJcXFxcXCIsIFJ0Zl9LV0QuQ0hBUiwgUnRmX1J0ZkNoYXIuQkFDS1NMQVNIKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiYmluXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uQklOKSwgbmV3IFJ0Zl9TWU1CT0woXCIqXCIsIFJ0Zl9LV0QuU1BFQywgUnRmX0lQRk4uU0tJUF9ERVNUKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiJ1wiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkhFWCksIG5ldyBSdGZfU1lNQk9MKFwiZlwiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkZPTlQpLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmY2hhcnNldFwiLCBSdGZfS1dELlNQRUMsIFJ0Zl9JUEZOLkNIQVJTRVQpLCBuZXcgUnRmX1NZTUJPTChcInVcIiwgUnRmX0tXRC5TUEVDLCBSdGZfSVBGTi5VTklDT0RFKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiYXV0aG9yXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImJ1cHRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiY29sb3J0YmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiY29tbWVudFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiY3JlYXRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJkb2Njb21tXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmb250dGJsXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZvb3RlclwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwiZm9vdGVyZlwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJmb290ZXJsXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmb290ZXJyXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImZvb3Rub3RlXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJmdG5jblwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJmdG5zZXBcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImZ0bnNlcGNcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiaGVhZGVyXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJoZWFkZXJmXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLCBuZXcgUnRmX1NZTUJPTChcImhlYWRlcmxcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcImhlYWRlcnJcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwiaW5mb1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwia2V5d29yZHNcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwib3BlcmF0b3JcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksXHJcbiAgICBuZXcgUnRmX1NZTUJPTChcInBpY3RcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwicHJpbnRpbVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwicHJpdmF0ZTFcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwicmV2dGltXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJyeGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwic3R5bGVzaGVldFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwic3ViamVjdFwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSwgbmV3IFJ0Zl9TWU1CT0woXCJ0Y1wiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKSxcclxuICAgIG5ldyBSdGZfU1lNQk9MKFwidGl0bGVcIiwgUnRmX0tXRC5ERVNULCBSdGZfSURFU1QuU0tJUCksIG5ldyBSdGZfU1lNQk9MKFwidHhlXCIsIFJ0Zl9LV0QuREVTVCwgUnRmX0lERVNULlNLSVApLFxyXG4gICAgbmV3IFJ0Zl9TWU1CT0woXCJ4ZVwiLCBSdGZfS1dELkRFU1QsIFJ0Zl9JREVTVC5TS0lQKVxyXG4gIF07XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ29uc3RydWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fc3RhY2sgPSBuZXcgU3RhY2s8UnRmX1N0YWNrU2F2ZT4oKTtcclxuICAgIHRoaXMuX2dyb3VwID0gMDtcclxuICAgIHRoaXMuX2NiQmluID0gMDtcclxuICAgIHRoaXMuX2xQYXJhbSA9IDA7XHJcbiAgICB0aGlzLl9vdXRwdXRPbmNlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wcm9jZXNzQ3JsZlNwZWNpYWwgPSBmYWxzZTtcclxuICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuTk9STTtcclxuICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICB0aGlzLl9mb250TnVtID0gMDtcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29kZVBhZ2VUYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDaGVja3MgaWYgdGhlIGJsb2IgaGFzIGEgUnRmIGRhdGEgb3Igbm90XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgaXNSdGYoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1J0ZjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHN0ciAhPT0gbnVsbCAmJiBzdHIuc3RhcnRzV2l0aCh0aGlzLlJURl9QUkVGSVgpKSB7XHJcbiAgICAgIGlzUnRmID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1J0ZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ29udmVydHMgUnRmIFRleHQgdG8gUGxhaW4gVGV4dFxyXG4gIC8vLyBTdGVwIDE6IElzb2xhdGUgUlRGIGtleXdvcmRzIGFuZCBzZW5kIHRoZW0gdG8gUGFyc2VLZXl3b3JkOyBQdXNoIGFuZCBwb3Agc3RhdGUgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2ZcclxuICAvLy8gUlRGIGdyb3VwcyBTZW5kIHRleHQgdG8gUGFyc2VDaGFyIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJydGZUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRwdXRUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwdWJsaWMgdG9UeHQocnRmVHh0OiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBsZXQgY05pYmJsZTogbnVtYmVyID0gMjtcclxuICAgIGxldCBiOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGN1cnJQb3M6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2tpcE5ld2xpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBibG9iU3RyTGVuOiBudW1iZXI7XHJcbiAgICBsZXQgYmxvYkNoYXI6IHN0cmluZztcclxuICAgIGxldCBlYzogUnRmX0Vycm9yUnRmO1xyXG4gICAgbGV0IGRiY3NCeXRlczogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KDIpO1xyXG4gICAgbGV0IHNraXBQYXJzZUNoYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGFyc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGNvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX291dHB1dE9uY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuX3Byb2Nlc3NDcmxmU3BlY2lhbCA9IGZhbHNlO1xyXG4gICAgYmxvYlN0ckxlbiA9IHJ0ZlR4dC5sZW5ndGg7XHJcbiAgICB0aGlzLl9pbmRleCA9IDA7XHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBSdGZfUkRTLk5PUk07XHJcbiAgICBpZiAocnRmVHh0ID09PSBudWxsIHx8IGJsb2JTdHJMZW4gPT09IDAgfHwgIVJ0Zi5pc1J0ZihydGZUeHQpKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2luZGV4IDwgYmxvYlN0ckxlbikge1xyXG4gICAgICBibG9iQ2hhciA9IHJ0ZlR4dFt0aGlzLl9pbmRleF07XHJcbiAgICAgIHRoaXMuX2luZGV4Kys7XHJcblxyXG4gICAgICBpZiAodGhpcy5fZ3JvdXAgPCAwKVxyXG4gICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuU1RBQ0tfVU5ERVJGTE9XO1xyXG5cclxuICAgICAgLyogaWYgd2UncmUgcGFyc2luZyBiaW5hcnkgZGF0YSwgaGFuZGxlIGl0IGRpcmVjdGx5ICovXHJcbiAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlID09PSBSdGZfUklTLkJJTikge1xyXG4gICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihibG9iQ2hhciwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGJsb2JDaGFyKSB7XHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLk9QRU5JTkdCUkFDRTpcclxuICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKChlYyA9IHRoaXMuUHVzaFN0YXRlKCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkNMT1NJTkdCUkFDRTpcclxuICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5Qb3BTdGF0ZSgpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBSdGZfUnRmQ2hhci5CQUNLU0xBU0g6XHJcbiAgICAgICAgICAgIHNraXBOZXdsaW5lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlS2V5d29yZChydGZUeHQsIG91dHB1dFR4dCkpICE9PSBSdGZfRXJyb3JSdGYuT0spXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFJ0Zl9SdGZDaGFyLkxGOlxyXG4gICAgICAgICAgY2FzZSBSdGZfUnRmQ2hhci5DUjogIC8qIGNyIGFuZCBsZiBhcmUgbm9pc2UgY2hhcmFjdGVycy4uLiAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsKSB7XHJcbiAgICAgICAgICAgICAgLyogT25jZSB3ZSByZWFjaCB0aGUgMHgwYSB3aGlsZSBQcm9jZXNzQ1JMRlNwZWNpYWxfLCByZXNldCB0aGUgUHJvY2Vzc0NSTEZTcGVjaWFsXyAqL1xyXG4gICAgICAgICAgICAgIGlmIChibG9iQ2hhciA9PT0gUnRmX1J0ZkNoYXIuTEYpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDcmxmU3BlY2lhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgICAgICAgICAgLyogc2tpcCBuZXcgbGluZXMgY29taW5nIG9ubHkgZnJvbSB0aGUgUlRGIGhlYWRlciAxLzEvOTggLSAjMjM5MCAqL1xyXG4gICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBMRiAoMHgwYSkgaWYgd2UgYXJlIG5vdCBpbiB0aGUgUHJvY2Vzc0NSTEZTcGVjaWFsXyAqL1xyXG4gICAgICAgICAgICAgIGlmIChibG9iQ2hhciA9PT0gUnRmX1J0ZkNoYXIuTEYgfHwgKGJsb2JDaGFyID09PSBSdGZfUnRmQ2hhci5DUiAmJiBza2lwTmV3bGluZSAmJiAhdGhpcy5fb3V0cHV0T25jZSkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGlmIChibG9iQ2hhciAhPT0gUnRmX1J0ZkNoYXIuQ1IpXHJcbiAgICAgICAgICAgICAgc2tpcE5ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsU3RhdGUgPT09IFJ0Zl9SSVMuTk9STSkge1xyXG4gICAgICAgICAgICAgIGlmICgoZWMgPSB0aGlzLlBhcnNlQ2hhcihibG9iQ2hhciwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICAgIHJldHVybiBlYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlID09PSBSdGZfUklTLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5QYXJzZUNoYXIoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9sUGFyYW0pLCBvdXRwdXRUeHQpKSAhPT0gUnRmX0Vycm9yUnRmLk9LKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLyogcGFyc2luZyBoZXggZGF0YSAqL1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbFN0YXRlICE9PSBSdGZfUklTLkhFWClcclxuICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuQVNTRVJUSU9OO1xyXG4gICAgICAgICAgICAgIGIgPSBiIDw8IDQ7XHJcbiAgICAgICAgICAgICAgaWYgKE5DaGFyLklzRGlnaXQoYmxvYkNoYXIpKVxyXG4gICAgICAgICAgICAgICAgYiArPSBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoTkNoYXIuSXNMb3dlcihibG9iQ2hhcikpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyIDwgJ2EnIHx8IGJsb2JDaGFyID4gJ2YnKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuSU5WQUxJRF9IRVg7XHJcbiAgICAgICAgICAgICAgICAgIGIgKz0gMTAgKyBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJ2EnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2JDaGFyIDwgJ0EnIHx8IGJsb2JDaGFyID4gJ0YnKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuSU5WQUxJRF9IRVg7XHJcbiAgICAgICAgICAgICAgICAgIGIgKz0gMTAgKyBibG9iQ2hhci5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNOaWJibGUtLTtcclxuICAgICAgICAgICAgICBpZiAoY05pYmJsZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IHRoaXMuZ2V0Q2hhcnNldCh0aGlzLl9mb250TnVtKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlIGNoYXJhY3RlclxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXNraXBQYXJzZUNoYXIgJiYgUnRmLmlzMXN0Qnl0ZShiLCBjaGFyc2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRiY3NCeXRlc1swXSA9IGI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBza2lwUGFyc2VDaGFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0cmFpbGluZyBieXRlIG9mIGEgZG91YmxlLWJ5dGUgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBQYXJzZUNoYXIgJiYgUnRmLmlzMm5kQnl0ZShiLCBjaGFyc2V0KSlcclxuICAgICAgICAgICAgICAgICAgICAgIGRiY3NCeXRlc1sxXSA9IGI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luZ2xlLWJ5dGUgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYmNzQnl0ZXNbMF0gPSBiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGJjc0J5dGVzWzFdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgREJDUyB0byBVbmljb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgY29kZVBhZ2UgPSB0aGlzLmdldENvZGVQYWdlKGNoYXJzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB3b3JrU3RyOiBzdHJpbmcgPSBFbmNvZGluZy5HZXRFbmNvZGluZyhjb2RlUGFnZSkuR2V0U3RyaW5nKGRiY3NCeXRlcywgMCwgMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYiA9IHdvcmtTdHIuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lwUGFyc2VDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghc2tpcFBhcnNlQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKGVjID0gdGhpcy5QYXJzZUNoYXIoU3RyaW5nLmZyb21DaGFyQ29kZShiKSwgb3V0cHV0VHh0KSkgIT09IFJ0Zl9FcnJvclJ0Zi5PSylcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjTmliYmxlID0gMjtcclxuICAgICAgICAgICAgICAgIGIgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxTdGF0ZSA9IFJ0Zl9SSVMuTk9STTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyogZW5kIGVsc2UgKHJpcyAhPSByaXNOb3JtKSAqL1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLyogc3dpdGNoICovXHJcbiAgICAgIH1cclxuICAgICAgLyogZWxzZSAocmlzICE9IHJpc0JpbikgKi9cclxuICAgIH1cclxuICAgIC8qIHdoaWxlICovXHJcblxyXG4gICAgaWYgKHRoaXMuX2dyb3VwIDwgMClcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5TVEFDS19VTkRFUkZMT1c7XHJcbiAgICBpZiAodGhpcy5fZ3JvdXAgPiAwKVxyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlVOTUFUQ0hFRF9CUkFDRTtcclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogRWxpbWluYXRlIHN1ZmZpeCBvZiBjYXJyaWdlIHJldHVybiArIGxpbmUgZmVlZCAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgIC8qIChDaGVjayBsYXN0IGNoYXJhY3RlcnMgLSBqdXN0IGluIGNhc2UgZm9ybWF0IGlzIG5vdCB0aGUgZXhwZWN0ZWQpICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgY3VyclBvcyA9IG91dHB1dFR4dC5MZW5ndGg7XHJcbiAgICBpZiAoY3VyclBvcyA+PSAzICYmIChvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDMpID09PSBSdGZfUnRmQ2hhci5DUiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDIpID09PSBSdGZfUnRmQ2hhci5MRiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDEpID09PSBSdGZfUnRmQ2hhci5DUiB8fCBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDMpID09PSBSdGZfUnRmQ2hhci5MRiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDIpID09PSBSdGZfUnRmQ2hhci5DUiAmJiBvdXRwdXRUeHQuZ2V0X0l0ZW0oY3VyclBvcyAtIDEpID09PSBSdGZfUnRmQ2hhci5DUikpXHJcbiAgICAgIG91dHB1dFR4dC5SZW1vdmUoY3VyclBvcyAtIDMsIDMpO1xyXG5cclxuICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJvdXRlIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGRlc3RpbmF0aW9uIHN0cmVhbS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib3V0cHV0VHh0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQYXJzZUNoYXIoY2g6IHN0cmluZywgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAodGhpcy5faW50ZXJuYWxTdGF0ZSA9PT0gUnRmX1JJUy5CSU4gJiYgLS10aGlzLl9jYkJpbiA8PSAwKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLk5PUk07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rlc3RTdGF0ZSA9PT0gUnRmX1JEUy5TS0lQKSB7XHJcbiAgICB9XHJcbiAgICAvKiBUb3NzIHRoaXMgY2hhcmFjdGVyLiAqL1xyXG4gICAgZWxzZSBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLk5PUk0pIHtcclxuICAgICAgLyogT3V0cHV0IGEgY2hhcmFjdGVyLiBQcm9wZXJ0aWVzIGFyZSB2YWxpZCBhdCB0aGlzIHBvaW50LiAqL1xyXG4gICAgICByZXQgPSB0aGlzLlByaW50Q2hhcihjaCwgb3V0cHV0VHh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvKiBoYW5kbGUgb3RoZXIgZGVzdGluYXRpb25zLi4uLiAqL1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2VuZCBhIGNoYXJhY3RlciB0byB0aGUgb3V0cHV0IGZpbGUuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjaFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUHJpbnRDaGFyKGNoOiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICAvKiBBbGxvdyBjYXJyaWdlIHJldHVybiArIGxpbmUgZmVlZCBpbiB0ZXh0LCBidXQgcmVtb3ZlIGJ1bGxldCBzaWduICovXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBpZiAoKGNoID49ICcgJyB8fCBjaCA9PT0gUnRmX1J0ZkNoYXIuQ1IgfHwgY2ggPT09IFJ0Zl9SdGZDaGFyLkxGKSAmJiBjaCAhPT0gU3RyaW5nLmZyb21DaGFyQ29kZSgxODMpKSB7XHJcbiAgICAgIG91dHB1dFR4dC5BcHBlbmQoY2gpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaCA+PSAnICcpIHtcclxuICAgICAgdGhpcy5fb3V0cHV0T25jZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2F2ZSByZWxldmFudCBpbmZvIG9uIGEgbGlua2VkIGxpc3Qgb2YgU0FWRSBzdHJ1Y3R1cmVzLlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQdXNoU3RhdGUoKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCBzdGFja1NhdmU6IFJ0Zl9TdGFja1NhdmUgPSBuZXcgUnRmX1N0YWNrU2F2ZSgpO1xyXG5cclxuICAgIGlmIChzdGFja1NhdmUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5TVEFDS19PVkVSRkxPVztcclxuICAgIH1cclxuXHJcbiAgICBzdGFja1NhdmUucmRzID0gdGhpcy5fZGVzdFN0YXRlO1xyXG4gICAgc3RhY2tTYXZlLnJpcyA9IHRoaXMuX2ludGVybmFsU3RhdGU7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5OT1JNO1xyXG5cclxuICAgIHRoaXMuX3N0YWNrLnB1c2goc3RhY2tTYXZlKTtcclxuICAgIHRoaXMuX2dyb3VwKys7XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWx3YXlzIHJlc3RvcmUgcmVsZXZhbnQgaW5mbyBmcm9tIHRoZSB0b3Agb2YgdGhlIFNBVkUgbGlzdC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUG9wU3RhdGUoKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCBzYXZlZFBvcDogUnRmX1N0YWNrU2F2ZSA9IHRoaXMuX3N0YWNrLnBvcCgpO1xyXG5cclxuICAgIGlmIChzYXZlZFBvcCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLlNUQUNLX1VOREVSRkxPVztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBzYXZlZFBvcC5yZHM7XHJcbiAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gc2F2ZWRQb3AucmlzO1xyXG5cclxuICAgIHRoaXMuX2dyb3VwLS07XHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU3RlcCAyOiBnZXQgYSBjb250cm9sIHdvcmQgKGFuZCBpdHMgYXNzb2NpYXRlZCB2YWx1ZSkgYW5kIGNhbGwgVHJhbnNsYXRlS2V5d29yZCB0byBkaXNwYXRjaCB0aGUgY29udHJvbC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJ0ZlR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm91dHB1dFR4dFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgUGFyc2VLZXl3b3JkKHJ0ZlR4dDogc3RyaW5nLCBvdXRwdXRUeHQ6IFN0cmluZ0J1aWxkZXIpOiBSdGZfRXJyb3JSdGYge1xyXG4gICAgbGV0IGNoOiBzdHJpbmc7XHJcbiAgICBsZXQgZk5lZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN6S2V5d29yZDogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBzelBhcmFtZXRlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBpZiAoKGNoID0gcnRmVHh0W3RoaXMuX2luZGV4KytdKSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSkge1xyXG4gICAgICByZXR1cm4gUnRmX0Vycm9yUnRmLkVORF9PRl9GSUxFO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIGEgY29udHJvbCBzeW1ib2w7IG5vIGRlbGltaXRlci4gKi9cclxuICAgIGlmICghTkNoYXIuSXNMZXR0ZXIoY2gpKSB7XHJcbiAgICAgIHN6S2V5d29yZCA9IHN6S2V5d29yZCArIGNoO1xyXG4gICAgICByZXR1cm4gdGhpcy5UcmFuc2xhdGVLZXl3b3JkKHN6S2V5d29yZCwgb3V0cHV0VHh0KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKDsgTkNoYXIuSXNMZXR0ZXIoY2gpOyBjaCA9IHJ0ZlR4dFt0aGlzLl9pbmRleCsrXSlcclxuICAgICAgc3pLZXl3b3JkID0gc3pLZXl3b3JkICsgY2g7XHJcblxyXG4gICAgaWYgKGNoID09PSAnLScpIHtcclxuICAgICAgZk5lZyA9IHRydWU7XHJcbiAgICAgIGlmICgoY2ggPSBydGZUeHRbdGhpcy5faW5kZXgrK10pID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApKVxyXG4gICAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuRU5EX09GX0ZJTEU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE5DaGFyLklzRGlnaXQoY2gpKSB7XHJcbiAgICAgIGZvciAoOyBOQ2hhci5Jc0RpZ2l0KGNoKTsgY2ggPSBydGZUeHRbdGhpcy5faW5kZXgrK10pXHJcbiAgICAgICAgc3pQYXJhbWV0ZXIgPSBzelBhcmFtZXRlciArIGNoO1xyXG5cclxuICAgICAgdGhpcy5fbFBhcmFtID0gTk51bWJlci5QYXJzZShzelBhcmFtZXRlcik7XHJcblxyXG4gICAgICBpZiAoZk5lZylcclxuICAgICAgICB0aGlzLl9sUGFyYW0gPSAtdGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoICE9PSAnICcpXHJcbiAgICAgIHRoaXMuX2luZGV4LS07XHJcblxyXG4gICAgaWYgKHN6S2V5d29yZCA9PT0gIFJ0Zi5DSEFSX1BBUikge1xyXG4gICAgICAvKiBpZiB3ZSBnZXQgYSBSVEYgc2VxdWVuY2Ugb2YgXFxwYXJbMHhkXVsweGFdLCBpZSBhIFxccGFyIGt3ZCBmb2xsb3dlZCAgICovXHJcbiAgICAgIC8qIGltbWlkaWF0ZWx5IGJ5IHRoZSBDUiBhbmQgTEYsIHRoZW4gaWdub3JlIHRoZSBcXHBhciBrd2QuIG90aGVyd2lzZSAgICAqL1xyXG4gICAgICAvKiB3ZSB3aWxsIHRyYW5zbGF0ZSB0aGUgXFxwYXIgLSB3aGljaCB0cmFuc2xhdGVzIHRvIGEgTEYgKDB4YSkgYW5kIGFsc28gKi9cclxuICAgICAgLyogdGhlIGZvbGxvd2luZyAweDBkIGlzIHRyYW5zbGF0ZWQgdG8gMHgwYSwgdGh1cyByZXN1bHRpbmcgaW4gVFdPIExGJ3MgKi9cclxuICAgICAgLyogYmVpbmcgaW5zZXJ0ZWQgaW5zdGVhZCBvZiBqdXN0IG9uZSBMRi4gU28gYnkgc2tpcHBpbmcgW1xccGFyXSBhbmQgICAgICovXHJcbiAgICAgIC8qIHRyYW5zbGF0aW5nIG9ubHkgdGhlIFsweGQgMHhhXSB3aWxsIHJlc3VsdCBpbiBvbmx5IG9uZSBMRiBhcHBlYXJpbmcgICovXHJcbiAgICAgIC8qIC0gd2hpY2ggaXMgdGhlIGRlc2lyZWQgYmVoYXZpb3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgIGlmIChydGZUeHRbdGhpcy5faW5kZXhdID09PSBSdGZfUnRmQ2hhci5DUiAmJiBydGZUeHRbdGhpcy5faW5kZXggKyAxXSA9PT0gUnRmX1J0ZkNoYXIuTEYpXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcHJvY2Vzc0NybGZTcGVjaWFsKSB7XHJcbiAgICAgIHJldHVybiBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuVHJhbnNsYXRlS2V5d29yZChzektleXdvcmQsIG91dHB1dFR4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFN0ZXAgMy4gU2VhcmNoIHJnc3ltUnRmIGZvciBzektleXdvcmQgYW5kIGV2YWx1YXRlIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzektleXdvcmRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdXRwdXRUeHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIFRyYW5zbGF0ZUtleXdvcmQoc3pLZXl3b3JkOiBzdHJpbmcsIG91dHB1dFR4dDogU3RyaW5nQnVpbGRlcik6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBsZXQgcmVzdWx0OiBSdGZfRXJyb3JSdGYgPSBSdGZfRXJyb3JSdGYuT0s7XHJcbiAgICBsZXQgaXN5bTogbnVtYmVyO1xyXG5cclxuICAgIC8qIHNlYXJjaCBmb3Igc3pLZXl3b3JkIGluIHJnc3ltUnRmICovXHJcbiAgICBmb3IgKGlzeW0gPSAwOyBpc3ltIDwgUnRmLnJnc3ltUnRmLmxlbmd0aDsgaXN5bSsrKSB7XHJcbiAgICAgIGlmIChzektleXdvcmQgPT09IFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5zektleXdvcmQpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIGNvbnRyb2wgd29yZCBub3QgZm91bmQgKi9cclxuICAgIGlmIChpc3ltID09PSBSdGYucmdzeW1SdGYubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLl9za2lwRGVzdElmVW5rKSB7XHJcbiAgICAgICAgLyogaWYgdGhpcyBpcyBhIG5ldyBkZXN0aW5hdGlvbiAqL1xyXG4gICAgICAgIHRoaXMuX2Rlc3RTdGF0ZSA9IFJ0Zl9SRFMuU0tJUDtcclxuICAgICAgICAvKiBza2lwIHRoZSBkZXN0aW5hdGlvbiAqL1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBlbHNlIGp1c3QgZGlzY2FyZCBpdCAqL1xyXG4gICAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gUnRmX0Vycm9yUnRmLkJBRF9UQUJMRTtcclxuXHJcbiAgICAgIC8qIGZvdW5kIGl0ISB1c2Uga3dkIGFuZCBpZHhJblJncHJvcCB0byBkZXRlcm1pbmUgd2hhdCB0byBkbyB3aXRoIGl0LiAqL1xyXG4gICAgICB0aGlzLl9za2lwRGVzdElmVW5rID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5QUk9QKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZVByb3AoPFJ0Zl9JUFJPUD5SdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5rd2QgPT09IFJ0Zl9LV0QuQ0hBUikge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuUGFyc2VDaGFyKChSdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApLCBvdXRwdXRUeHQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKFJ0Zi5yZ3N5bVJ0Zltpc3ltXS5rd2QgPT09IFJ0Zl9LV0QuREVTVCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2hhbmdlRGVzdFN0YXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoUnRmLnJnc3ltUnRmW2lzeW1dLmt3ZCA9PT0gUnRmX0tXRC5TUEVDKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5QYXJzZVNwZWNpYWxLZXl3b3JkKDxSdGZfSVBGTj5SdGYucmdzeW1SdGZbaXN5bV0uaWR4SW5SZ3Byb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gVmFsaWRhdGUgdGhlIHByb3BlcnR5IGlkZW50aWZpZWQgYnkgX2lwcm9wXyB0byB0aGUgdmFsdWUgX3ZhbF8uXHJcbiAgLy8vIHByZXZpb3VzbHkgY2FsbGVkIEFwcGx5cHJvcGNoYW5nZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXByb3BcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHZhbGlkYXRlUHJvcChpcHJvcDogUnRmX0lQUk9QKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVApIHtcclxuICAgICAgLyogSWYgd2UncmUgc2tpcHBpbmcgdGV4dCwgKi9cclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgLyogZG9uJ3QgZG8gYW55dGhpbmcuICovXHJcbiAgICB9XHJcblxyXG4gICAgLyogdmFsaWRhdGUgcHJvcCAqL1xyXG4gICAgaWYgKFJ0Zi5yZ3Byb3BbaXByb3BdLnByb3AgIT09IFJ0Zl9QUk9QVFlQRS5ET1AgJiYgUnRmLnJncHJvcFtpcHJvcF0ucHJvcCAhPT0gUnRmX1BST1BUWVBFLlNFUCAmJlxyXG4gICAgICBSdGYucmdwcm9wW2lwcm9wXS5wcm9wICE9PSBSdGZfUFJPUFRZUEUuUEFQICYmIFJ0Zi5yZ3Byb3BbaXByb3BdLnByb3AgIT09IFJ0Zl9QUk9QVFlQRS5DSFAgJiZcclxuICAgICAgUnRmLnJncHJvcFtpcHJvcF0uYWN0biAhPT0gUnRmX0FDVE4uU1BFQykge1xyXG4gICAgICByZXQgPSBSdGZfRXJyb3JSdGYuQkFEX1RBQkxFO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChSdGYucmdwcm9wW2lwcm9wXS5hY3RuICE9PSBSdGZfQUNUTi5CWVRFICYmIFJ0Zi5yZ3Byb3BbaXByb3BdLmFjdG4gIT09IFJ0Zl9BQ1ROLldPUkQgJiYgUnRmLnJncHJvcFtpcHJvcF0uYWN0biAhPT0gUnRmX0FDVE4uU1BFQykge1xyXG4gICAgICByZXQgPSBSdGZfRXJyb3JSdGYuQkFEX1RBQkxFO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENoYW5nZSB0byB0aGUgZGVzdGluYXRpb24gc3RhdGUuXHJcbiAgLy8vIHByZXZpb3VzbHkgY2FsbGVkIENoYW5nZURlc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY2hhbmdlRGVzdFN0YXRlKCk6IFJ0Zl9FcnJvclJ0ZiB7XHJcbiAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVApIHtcclxuICAgICAgLyogaWYgd2UncmUgc2tpcHBpbmcgdGV4dCwgKi9cclxuICAgICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICAgICAgLyogZG9uJ3QgZG8gYW55dGhpbmcgKi9cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kZXN0U3RhdGUgPSBSdGZfUkRTLlNLSVA7XHJcbiAgICAvKiB3aGVuIGluIGRvdWJ0LCBza2lwIGl0Li4uICovXHJcblxyXG4gICAgcmV0dXJuIFJ0Zl9FcnJvclJ0Zi5PSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gRXZhbHVhdGUgYW4gUlRGIGNvbnRyb2wgdGhhdCBuZWVkcyBzcGVjaWFsIHByb2Nlc3NpbmcuXHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpcGZuXCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBQYXJzZVNwZWNpYWxLZXl3b3JkKGlwZm46IFJ0Zl9JUEZOKTogUnRmX0Vycm9yUnRmIHtcclxuICAgIGxldCByZXQ6IFJ0Zl9FcnJvclJ0ZiA9IFJ0Zl9FcnJvclJ0Zi5PSztcclxuXHJcbiAgICBpZiAoIVV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgaWYgKHRoaXMuX2Rlc3RTdGF0ZSA9PT0gUnRmX1JEUy5TS0lQICYmIGlwZm4gIT09IFJ0Zl9JUEZOLkJJTikge1xyXG4gICAgICAgIC8qIGlmIHdlJ3JlIHNraXBwaW5nLCBhbmQgaXQncyBub3QgKi9cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIC8qIHRoZSBcXGJpbiBrZXl3b3JkLCBpZ25vcmUgaXQuICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpcGZuID09PSBSdGZfSVBGTi5GT05UIHx8IGlwZm4gPT09IFJ0Zl9JUEZOLkNIQVJTRVQgfHwgaXBmbiA9PT0gUnRmX0lQRk4uVU5JQ09ERSkge1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fZGVzdFN0YXRlID09PSBSdGZfUkRTLlNLSVAgJiYgaXBmbiAhPT0gUnRmX0lQRk4uQklOICYmIGlwZm4gIT09IFJ0Zl9JUEZOLkZPTlQgJiZcclxuICAgICAgICBpcGZuICE9PSBSdGZfSVBGTi5DSEFSU0VUICYmIGlwZm4gIT09IFJ0Zl9JUEZOLlVOSUNPREUpIHtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlwZm4gPT09IFJ0Zl9JUEZOLkJJTikge1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5CSU47XHJcbiAgICAgIHRoaXMuX2NiQmluID0gdGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uU0tJUF9ERVNUKSB7XHJcbiAgICAgIHRoaXMuX3NraXBEZXN0SWZVbmsgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uSEVYKSB7XHJcbiAgICAgIHRoaXMuX2ludGVybmFsU3RhdGUgPSBSdGZfUklTLkhFWDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlwZm4gPT09IFJ0Zl9JUEZOLkZPTlQpIHtcclxuICAgICAgdGhpcy5fZm9udE51bSA9IDxudW1iZXI+dGhpcy5fbFBhcmFtO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uQ0hBUlNFVCkge1xyXG4gICAgICB0aGlzLl9jaGFyc2V0VGFibGUuc2V0X0l0ZW0odGhpcy5fZm9udE51bSwgPG51bWJlcj50aGlzLl9sUGFyYW0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXBmbiA9PT0gUnRmX0lQRk4uVU5JQ09ERSkge1xyXG4gICAgICB0aGlzLl9pbnRlcm5hbFN0YXRlID0gUnRmX1JJUy5VTklDT0RFO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldCA9IFJ0Zl9FcnJvclJ0Zi5CQURfVEFCTEU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzMXN0Qnl0ZShkYmNzQnl0ZXM6IG51bWJlciwgY2hhcnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGRiY3NCeXRlcyA+IDI1NSlcclxuICAgICAgcmV0dXJuIHJldDtcclxuXHJcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcclxuICAgICAgY2FzZSAxMjg6XHJcbiAgICAgICAgcmV0ID0gKDEyOSA8PSBkYmNzQnl0ZXMgJiYgZGJjc0J5dGVzIDw9IDE1OSkgfHwgKDIyNCA8PSBkYmNzQnl0ZXMgJiYgZGJjc0J5dGVzIDw9IDI1NCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTI5OlxyXG4gICAgICBjYXNlIDEzNDpcclxuICAgICAgY2FzZSAxMzY6XHJcbiAgICAgICAgcmV0ID0gKDEyOSA8PSBkYmNzQnl0ZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ2hlY2tzIGlmIHRoZSBieXRlIGlzIHdpdGhpbiB0aGUgdHJhaWxpbmcgYnl0ZSByYW5nZS5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRiY3NCeXRlc1wiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNoYXJzZXRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBpczJuZEJ5dGUoZGJjc0J5dGVzOiBudW1iZXIsIGNoYXJzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKGRiY3NCeXRlcyA+IDI1NSlcclxuICAgICAgcmV0dXJuIHJldDtcclxuXHJcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcclxuICAgICAgY2FzZSAxMjg6XHJcbiAgICAgICAgcmV0ID0gKGRiY3NCeXRlcyAhPT0gMTI3KSAmJiAoNjQgPD0gZGJjc0J5dGVzICYmIGRiY3NCeXRlcyA8PSAyNTIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDEyOTpcclxuICAgICAgY2FzZSAxMzQ6XHJcbiAgICAgIGNhc2UgMTM2OlxyXG4gICAgICAgIHJldCA9ICg2NCA8PSBkYmNzQnl0ZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ3JlYXRlIGEgaGFzaHRhYmxlIG9mIGNvZGVwYWdlIGFzc29jaWF0ZWQgd2l0aCBjaGFyc2V0LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHNldENvZGVQYWdlVGFibGUoKTogdm9pZCB7XHJcbiAgICAvLyBhZGQgZWxlbWVudHMgd2l0aCBrZXkgKGNoYXJzZXQpIGFuZCB2YWx1ZSAoY29kZXBhZ2UpIGludG8gdGhlIHRhYmxlLlxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgwLCAxMjUyKTsgICAgLy8gQU5TSV9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDEyOCwgOTMyKTsgICAvLyBTSElGVEpJU19DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDEyOSwgOTQ5KTsgICAvLyBIQU5HVUxfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxMzQsIDkzNik7ICAgLy8gR0IyMzEyX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTM2LCA5NTApOyAgIC8vIENISU5FU0VCSUc1X0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTYxLCAxMjUzKTsgIC8vIEdSRUVLX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTYyLCAxMjU0KTsgIC8vIFRVUktJU0hfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxNzcsIDEyNTUpOyAgLy8gSEVCUkVXX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMTc4LCAxMjU2KTsgIC8vIEFSQUJJQyBfQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgxODYsIDEyNTcpOyAgLy8gQkFMVElDX0NIQVJTRVRcclxuICAgIHRoaXMuX2NvZGVQYWdlVGFibGUuc2V0X0l0ZW0oMjA0LCAxMjUxKTsgIC8vIFJVU1NJQU5fQ0hBUlNFVFxyXG4gICAgdGhpcy5fY29kZVBhZ2VUYWJsZS5zZXRfSXRlbSgyMjIsIDg3NCk7ICAgLy8gVEhBSV9DSEFSU0VUXHJcbiAgICB0aGlzLl9jb2RlUGFnZVRhYmxlLnNldF9JdGVtKDIzOCwgMTI1MCk7ICAvLyBFQVNURVVST1BFX0NIQVJTRVRcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0IGNvZGVwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjaGFyc2V0LlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY2hhcnNldFwiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0Q29kZVBhZ2UoY2hhcnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjb2RlUGFnZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fY29kZVBhZ2VUYWJsZS5Db250YWluc0tleShjaGFyc2V0KSkge1xyXG4gICAgICBjb2RlUGFnZSA9IHRoaXMuX2NvZGVQYWdlVGFibGUuZ2V0X0l0ZW0oY2hhcnNldCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvZGVQYWdlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXQgY2hhcnNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9udCBpbmRleC5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvbnRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldENoYXJzZXQoZm9udDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjaGFyc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh0aGlzLl9jaGFyc2V0VGFibGUuQ29udGFpbnNLZXkoZm9udCkpIHtcclxuICAgICAgY2hhcnNldCA9IHRoaXMuX2NoYXJzZXRUYWJsZS5nZXRfSXRlbShmb250KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaGFyc2V0O1xyXG4gIH1cclxufVxyXG4iXX0=
|