@magic-xpa/gui 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.
Files changed (105) hide show
  1. package/bundles/magic-xpa-gui.umd.js +1050 -7528
  2. package/bundles/magic-xpa-gui.umd.js.map +1 -1
  3. package/bundles/magic-xpa-gui.umd.min.js +1 -1
  4. package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
  5. package/esm2015/index.js +1 -1
  6. package/esm2015/magic-xpa-gui.js +1 -4
  7. package/esm2015/src/Commands.js +11 -114
  8. package/esm2015/src/Events.js +1 -517
  9. package/esm2015/src/EventsProcessor.js +1 -51
  10. package/esm2015/src/FocusManager.js +1 -13
  11. package/esm2015/src/GuiConstants.js +2 -11
  12. package/esm2015/src/GuiEnums.js +126 -130
  13. package/esm2015/src/GuiEnvironment.js +1 -1
  14. package/esm2015/src/IFlowMonitorQueue.js +1 -1
  15. package/esm2015/src/Manager.js +10 -148
  16. package/esm2015/src/UIBridge.js +1 -6
  17. package/esm2015/src/env/IEnvironment.js +1 -1
  18. package/esm2015/src/gui/ControlBase.js +1 -1
  19. package/esm2015/src/gui/GuiMgControl.js +1 -94
  20. package/esm2015/src/gui/GuiMgForm.js +1 -1
  21. package/esm2015/src/gui/KeyboardItem.js +5 -46
  22. package/esm2015/src/gui/LastFocusedVal.js +1 -5
  23. package/esm2015/src/gui/MgValue.js +1 -1
  24. package/esm2015/src/gui/PropParentInterface.js +1 -1
  25. package/esm2015/src/gui/low/DialogHandler.js +1 -10
  26. package/esm2015/src/gui/low/GuiCommand.js +1 -12
  27. package/esm2015/src/gui/low/GuiCommandQueue.js +1 -66
  28. package/esm2015/src/gui/low/GuiInteractive.js +8 -465
  29. package/esm2015/src/gui/low/Style.js +1 -9
  30. package/esm2015/src/management/RuntimeContextBase.js +11 -14
  31. package/esm2015/src/management/data/BlobType.js +0 -0
  32. package/esm2015/src/management/data/DcValues.js +8 -67
  33. package/esm2015/src/management/data/DcValuesBuilderBase.js +2 -37
  34. package/esm2015/src/management/data/FieldDef.js +1 -95
  35. package/esm2015/src/management/data/FieldsTable.js +2 -28
  36. package/esm2015/src/management/data/GuiDataViewBase.js +33 -72
  37. package/esm2015/src/management/data/GuiFieldBase.js +4 -39
  38. package/esm2015/src/management/data/IRecord.js +1 -1
  39. package/esm2015/src/management/data/IReferencedObject.js +1 -8
  40. package/esm2015/src/management/data/NUM_TYPE.js +14 -485
  41. package/esm2015/src/management/data/ObjectReferenceBase.js +1 -3
  42. package/esm2015/src/management/data/ObjectReferencesCollection.js +1 -2
  43. package/esm2015/src/management/data/RecordUtils.js +6 -112
  44. package/esm2015/src/management/data/VectorType.js +17 -252
  45. package/esm2015/src/management/data/VectorTypeBase.js +1 -35
  46. package/esm2015/src/management/events/IActionManager.js +1 -1
  47. package/esm2015/src/management/events/IGuiEventsManager.js +1 -1
  48. package/esm2015/src/management/exp/ExpressionInterface.js +5 -3
  49. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +38 -155
  50. package/esm2015/src/management/gui/ControlTable.js +18 -72
  51. package/esm2015/src/management/gui/DisplayConvertor.js +43 -493
  52. package/esm2015/src/management/gui/FieldValidator.js +58 -339
  53. package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +1 -1
  54. package/esm2015/src/management/gui/GuiFormPropertyAdapter.js +1 -8
  55. package/esm2015/src/management/gui/HebrewDate.js +3 -140
  56. package/esm2015/src/management/gui/Helps.js +2 -48
  57. package/esm2015/src/management/gui/MgControlBase.js +143 -876
  58. package/esm2015/src/management/gui/MgFormBase.js +68 -407
  59. package/esm2015/src/management/gui/PIC.js +58 -285
  60. package/esm2015/src/management/gui/PropDefaults.js +13 -48
  61. package/esm2015/src/management/gui/PropInterface.js +2 -4
  62. package/esm2015/src/management/gui/PropTable.js +72 -183
  63. package/esm2015/src/management/gui/Property.js +35 -372
  64. package/esm2015/src/management/gui/ValidationDetails.js +10 -52
  65. package/esm2015/src/management/gui/ValidationDetailsBase.js +12 -45
  66. package/esm2015/src/management/gui/WrongFormatException.js +1 -15
  67. package/esm2015/src/management/tasks/GuiDataCollection.js +1 -1
  68. package/esm2015/src/management/tasks/GuiTaskBase.js +38 -383
  69. package/esm2015/src/management/tasks/IMGDataTable.js +1 -1
  70. package/esm2015/src/management/tasks/ITask.js +1 -1
  71. package/esm2015/src/management/tasks/MgTimer.js +1 -16
  72. package/esm2015/src/management/tasks/TaskDefinitionId.js +8 -18
  73. package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +1 -13
  74. package/esm2015/src/util/AuthenticationDialogHandler.js +1 -4
  75. package/esm2015/src/util/MemoryUtil.js +1 -41
  76. package/esm2015/src/util/ObjectReference.js +1 -8
  77. package/esm2015/src/util/ProcessLauncher.js +3 -21
  78. package/esm2015/src/util/UsernamePasswordCredentials.js +1 -9
  79. package/fesm2015/magic-xpa-gui.js +857 -7052
  80. package/fesm2015/magic-xpa-gui.js.map +1 -1
  81. package/magic-xpa-gui.d.ts +0 -3
  82. package/package.json +2 -2
  83. package/src/Commands.d.ts +2 -0
  84. package/src/Events.d.ts +0 -2
  85. package/src/GuiEnums.d.ts +125 -128
  86. package/src/env/IEnvironment.d.ts +3 -0
  87. package/src/gui/PropParentInterface.d.ts +1 -1
  88. package/src/gui/low/GuiInteractive.d.ts +3 -1
  89. package/src/gui/low/Style.d.ts +0 -3
  90. package/src/management/RuntimeContextBase.d.ts +2 -0
  91. package/src/management/data/GuiDataViewBase.d.ts +4 -4
  92. package/src/management/data/IRecord.d.ts +1 -1
  93. package/src/management/exp/ExpressionInterface.d.ts +4 -0
  94. package/src/management/exp/GuiExpressionEvaluator.d.ts +4 -6
  95. package/src/management/gui/ControlTable.d.ts +1 -1
  96. package/src/management/gui/DisplayConvertor.d.ts +1 -1
  97. package/src/management/gui/GuiControlPropertyAdapter.d.ts +1 -1
  98. package/src/management/gui/MgControlBase.d.ts +7 -7
  99. package/src/management/gui/MgFormBase.d.ts +6 -6
  100. package/src/management/gui/PIC.d.ts +1 -0
  101. package/src/management/gui/PropInterface.d.ts +2 -4
  102. package/src/management/gui/PropTable.d.ts +4 -5
  103. package/src/management/gui/Property.d.ts +1 -1
  104. package/src/management/tasks/GuiTaskBase.d.ts +8 -14
  105. package/src/management/tasks/TaskDefinitionId.d.ts +1 -0
@@ -2,59 +2,42 @@ import { MsgInterface, PICInterface, StorageAttribute, UtilImeJpn, UtilStrByteMo
2
2
  import { Events } from '../../Events';
3
3
  import { ApplicationException, Int32, NString, StringBuilder } from '@magic-xpa/mscorelib';
4
4
  import { GuiEnvironment } from '../../GuiEnvironment';
5
- /// <summary>
6
- /// The class handles the process of converting internal data to displayed data
7
- /// by using a specific format.
8
- /// The class implements the PIC structure of Magic, and all its related operations.
9
- /// </summary>
10
- // @dynamic
11
5
  export class PIC {
12
- /// <summary>
13
- /// Builds a PIC class from picture format and attribute
14
- /// </summary>
15
- /// <param name = "picStr">The picture format string</param>
16
- /// <param name = "attr">The data attribute (N/A/D/T/...)</param>
17
6
  constructor(picStr, attr, compIdx) {
18
- // --------------------------------------------------------------------------
19
- // Original members of the Magic PIC structure
20
- // --------------------------------------------------------------------------
21
- this._mskLen = 0; // The mask len
7
+ this._mskLen = 0;
22
8
  this._negPref = new StringBuilder();
23
9
  this._negSuff = new StringBuilder();
24
10
  this._picAttr = StorageAttribute.NONE;
25
11
  this._posPref = new StringBuilder();
26
12
  this._posSuff = new StringBuilder();
27
- this._autoSkip_ = false; // Autoskip ?
28
- this._padFill = false; // Pad fill ?
29
- this._zeroFill = false; // Zero fill ?
30
- this._comma = false; // Display numbers with commas ?
31
- this._decimalDigits = 0; // Decimal digits
13
+ this._autoSkip_ = false;
14
+ this._padFill = false;
15
+ this._zeroFill = false;
16
+ this._comma = false;
17
+ this._decimalDigits = 0;
32
18
  this._decPointIsFirst = false;
33
- this._decimal = false; // Decimals ?
34
- this._embeded = false; // Embeded characters ?
35
- this._formatIdx = 0; // Current char processed in format_;
36
- this._format = null; // The format processed
37
- this.hebrew = false; // Hebrew ?
38
- this._imeMode = -1; // JPN: IME support
39
- this._left = false; // Left justified ?
19
+ this._decimal = false;
20
+ this._embeded = false;
21
+ this._formatIdx = 0;
22
+ this._format = null;
23
+ this.hebrew = false;
24
+ this._imeMode = -1;
25
+ this._left = false;
40
26
  this._maskLength = 0;
41
- this._maskChars = 0; // Mask chars count
42
- this._maskSize = 0; // Size of picture i/o mask
43
- this._mixed = false; // Mixed language ?
44
- // --------------------------------------------------------------------------
45
- // Added variables
46
- // --------------------------------------------------------------------------
47
- this._msk = null; // The mask for the specified picture format
48
- this._needLength = false; // get length of the picture after parsing
49
- this._negative = false; // Negative values allowed ?
50
- this._pad = '\0'; // Pad character
27
+ this._maskChars = 0;
28
+ this._maskSize = 0;
29
+ this._mixed = false;
30
+ this._msk = null;
31
+ this._needLength = false;
32
+ this._negative = false;
33
+ this._pad = '\0';
51
34
  this._prefLen = 0;
52
- this._size = 0; // Size of Alpha data without mask characters
35
+ this._size = 0;
53
36
  this._suffLen = 0;
54
- this._termFlag = false; // are terminators specified ?
55
- this._trim = false; // Trim ?
56
- this._whole = 0; // Whole digits
57
- this._zero = '\0'; // Zero character
37
+ this._termFlag = false;
38
+ this._trim = false;
39
+ this._whole = 0;
40
+ this._zero = '\0';
58
41
  this._picAttr = attr;
59
42
  if (this._picAttr === StorageAttribute.BLOB ||
60
43
  this._picAttr === StorageAttribute.BLOB_VECTOR) {
@@ -68,10 +51,6 @@ export class PIC {
68
51
  this._mskLen = this.getMaskLen(compIdx);
69
52
  this.prs_all(compIdx);
70
53
  }
71
- /// <summary>
72
- /// Get information methods
73
- /// </summary>
74
- /// <returns></returns>
75
54
  isHebrew() {
76
55
  return this.hebrew;
77
56
  }
@@ -162,9 +141,6 @@ export class PIC {
162
141
  getImeMode() {
163
142
  return this._imeMode;
164
143
  }
165
- /// <summary>
166
- /// Parse the picture format by the attribute
167
- /// </summary>
168
144
  prs_all(compIdx) {
169
145
  if (!this._needLength) {
170
146
  this._msk = new Array(this._mskLen);
@@ -189,14 +165,10 @@ export class PIC {
189
165
  this.bool_prs();
190
166
  break;
191
167
  case StorageAttribute.BLOB:
192
- // do nothing
193
168
  case StorageAttribute.BLOB_VECTOR:
194
169
  break;
195
170
  }
196
171
  }
197
- /// <summary>
198
- /// Parse an alpha picture format
199
- /// </summary>
200
172
  alpha_prs() {
201
173
  let currChr;
202
174
  let drv;
@@ -236,9 +208,7 @@ export class PIC {
236
208
  this.pik_drv_fill(drv, count);
237
209
  break;
238
210
  default:
239
- if (UtilStrByteMode.isLocaleDefLangDBCS()) // JPN: DBCS support
240
- {
241
- // JPN: IME support
211
+ if (UtilStrByteMode.isLocaleDefLangDBCS()) {
242
212
  let useImeJpn = UtilStrByteMode.isLocaleDefLangJPN();
243
213
  if (currChr === 'K' && useImeJpn) {
244
214
  if (this.pic_kanji())
@@ -255,8 +225,6 @@ export class PIC {
255
225
  else if (currChr === 'S')
256
226
  drv = PICInterface.PIC_S;
257
227
  if (drv !== 0) {
258
- // JPN: IME support
259
- // calculate IME mode from AS/400 pictures if Kanji parameter isn't specified.
260
228
  if (this._imeMode === -1 && useImeJpn) {
261
229
  if (drv === PICInterface.PIC_J || drv === PICInterface.PIC_G)
262
230
  this._imeMode = UtilImeJpn.IME_ZEN_HIRAGANA_ROMAN;
@@ -279,17 +247,12 @@ export class PIC {
279
247
  break;
280
248
  }
281
249
  }
282
- // In case that no picture is specified, assume all is Xs
283
250
  if (this._maskSize === 0)
284
251
  this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);
285
- // Compute mask size without the mask characters
286
252
  this._size = this._maskSize;
287
253
  if (!this._embeded)
288
254
  this._size -= this._maskChars;
289
255
  }
290
- /// <summary>
291
- /// Parse a numeric picture format
292
- /// </summary>
293
256
  num_prs() {
294
257
  let i;
295
258
  let j;
@@ -299,17 +262,17 @@ export class PIC {
299
262
  let tmps;
300
263
  let tmp_c = 0;
301
264
  let first = true;
302
- this._zero = ' ' /*' '*/;
303
- this._pad = ' ' /*' '*/;
304
- this._negPref.Append('-') /*'-'*/;
265
+ this._zero = ' ';
266
+ this._pad = ' ';
267
+ this._negPref.Append('-');
305
268
  for (i = 0; i < this._format.length; i = i + 1) {
306
- if (this._format[i] === '+' /*'+'*/ || this._format[i] === '-' /*'-'*/) {
269
+ if (this._format[i] === '+' || this._format[i] === '-') {
307
270
  break;
308
271
  }
309
- if (this._format[i] === '\\' /*'\'*/ || this._format[i] === 'P' /*'P'*/) {
272
+ if (this._format[i] === '\\' || this._format[i] === 'P') {
310
273
  i = i + 1;
311
274
  }
312
- if (this._format[i] === 'C' /*'C'*/) {
275
+ if (this._format[i] === 'C') {
313
276
  this._comma = true;
314
277
  }
315
278
  }
@@ -351,10 +314,6 @@ export class PIC {
351
314
  this._decimal = true;
352
315
  if (this._maskSize < this._mskLen)
353
316
  this._msk[this._maskSize] = String.fromCharCode(PICInterface.PIC_N);
354
- // --------------------------------------------------------------
355
- // 26/11/97 Shay Z. Bug #770526 - Mark that
356
- // Decimal Point is in First Position:
357
- // --------------------------------------------------------------
358
317
  if (this._maskSize === 0)
359
318
  this._decPointIsFirst = true;
360
319
  this._maskSize++;
@@ -380,13 +339,11 @@ export class PIC {
380
339
  if (first && (tmp_c > 0 || count > 1)) {
381
340
  if (count > 1)
382
341
  tmp_c = count;
383
- // add commas befor places
384
342
  if (this._comma && !this._decimal)
385
343
  this.pik_drv_fill(PICInterface.PIC_N, Math.floor((tmp_c - 1) / 3));
386
344
  first = false;
387
345
  }
388
346
  }
389
- // add commas befor places
390
347
  else if (this._comma && !this._decimal)
391
348
  this.pik_drv_fill(PICInterface.PIC_N, Math.floor((count - 1) / 3));
392
349
  if (this._decimal)
@@ -399,7 +356,6 @@ export class PIC {
399
356
  break;
400
357
  }
401
358
  }
402
- // Store the maximal length of sign prefix and suffix between negative and positive
403
359
  this._prefLen = this._posPref.Length;
404
360
  this._suffLen = this._posSuff.Length;
405
361
  if (this._negative) {
@@ -410,7 +366,6 @@ export class PIC {
410
366
  this._suffLen = this._negSuff.Length;
411
367
  }
412
368
  }
413
- // Check for a format without digits
414
369
  if (this._whole === 0 && this._decimalDigits === 0) {
415
370
  count = PICInterface.PIC_MAX_MSK_LEN - this._prefLen - this._suffLen;
416
371
  if (this._maskSize < count) {
@@ -420,11 +375,9 @@ export class PIC {
420
375
  this.pik_drv_fill(PICInterface.PIC_N, this._whole);
421
376
  }
422
377
  }
423
- // add extra for pref/suff and commas
424
378
  if (this._comma) {
425
379
  count = Math.floor((this._whole - 1) / 3);
426
380
  this.pik_drv_fill(PICInterface.PIC_N, count);
427
- // remove commas places
428
381
  this._maskSize -= count;
429
382
  }
430
383
  i = this._prefLen;
@@ -432,7 +385,6 @@ export class PIC {
432
385
  if ((this._maskSize + i) <= this._mskLen) {
433
386
  for (j = this._maskSize - 1; j >= 0; j--)
434
387
  this._msk[j + i] = this._msk[j];
435
- // memset (this->msk, PIC_N, i); // Original Line
436
388
  for (j = 0; j < i; j++)
437
389
  if (this._msk != null && j < this._msk.length)
438
390
  this._msk[j] = String.fromCharCode(PICInterface.PIC_N);
@@ -442,30 +394,32 @@ export class PIC {
442
394
  i = this._suffLen;
443
395
  if (i > 0 && this._msk != null) {
444
396
  if (this._maskSize + this._suffLen <= this._mskLen)
445
- // memset (&Msk[this->pic->mask_size], PIC_N, this->pic->suff_len); // Original Line
446
397
  for (j = 0; j < this._suffLen; j++)
447
398
  this._msk[this._maskSize + j] = String.fromCharCode(PICInterface.PIC_N);
448
399
  this._maskSize += i;
449
400
  }
450
401
  }
451
- /// <summary>
452
- /// Parse a date picture format
453
- /// </summary>
402
+ getUnformattedNumericPic() {
403
+ let picStr = '';
404
+ if (this.isNegative())
405
+ picStr = this.isNegative() ? 'N' : '';
406
+ picStr += this.getWholes().toString();
407
+ if (this.getDec() > 0)
408
+ picStr += '.' + this.getDec().toString();
409
+ if (this._zeroFill)
410
+ picStr += 'Z';
411
+ let newPic = new PIC(picStr, StorageAttribute.NUMERIC, 0);
412
+ return newPic;
413
+ }
454
414
  date_prs(compIdx) {
455
- // -----------------------------------------------------------------------
456
- // Original vars
457
- // -----------------------------------------------------------------------
458
415
  let i;
459
416
  let ocr;
460
417
  let count;
461
418
  let drv = 0;
462
419
  let SwitchAndExpandDate = false;
463
420
  let SWExpandDateChecked = false;
464
- // -----------------------------------------------------------------------
465
- // Added vars
466
- // -----------------------------------------------------------------------
467
421
  let currChr;
468
- let isJpnEraYear = false; // JPN: Japanese date picture support
422
+ let isJpnEraYear = false;
469
423
  this._zero = ' ';
470
424
  ocr = 0;
471
425
  if (this._format.length === 0 || this._format[0] === '\0')
@@ -557,7 +511,6 @@ export class PIC {
557
511
  drv = PICInterface.PIC_DD;
558
512
  break;
559
513
  }
560
- /* falls through */
561
514
  case 3:
562
515
  if (!this.hebrew)
563
516
  drv = PICInterface.PIC_DDD;
@@ -618,7 +571,6 @@ export class PIC {
618
571
  switch (ocr) {
619
572
  case 1:
620
573
  if (!SWExpandDateChecked) {
621
- // Check if format_ contains "####"
622
574
  SwitchAndExpandDate = NString.FromChars(this._format).indexOf("####") > -1;
623
575
  SWExpandDateChecked = true;
624
576
  }
@@ -656,7 +608,6 @@ export class PIC {
656
608
  drv = PICInterface.PIC_YYYY;
657
609
  else {
658
610
  if (!SWExpandDateChecked) {
659
- // Check if format_ contains "####"
660
611
  SwitchAndExpandDate = NString.FromChars(this._format).indexOf("####") > -1;
661
612
  SWExpandDateChecked = true;
662
613
  }
@@ -691,7 +642,7 @@ export class PIC {
691
642
  this._formatIdx++;
692
643
  this.pik_drv_fill(GuiEnvironment.Environment.GetDate().charCodeAt(0), 1);
693
644
  break;
694
- case 'S': // JPN: Japanese date picture support
645
+ case 'S':
695
646
  if (UtilStrByteMode.isLocaleDefLangJPN()) {
696
647
  count = this.pik_dup();
697
648
  i = count;
@@ -705,7 +656,7 @@ export class PIC {
705
656
  this.pik_mask();
706
657
  }
707
658
  break;
708
- case 'J': // JPN: Japanese date picture support
659
+ case 'J':
709
660
  if (UtilStrByteMode.isLocaleDefLangJPN()) {
710
661
  count = this.pik_dup();
711
662
  i = count;
@@ -737,9 +688,7 @@ export class PIC {
737
688
  break;
738
689
  }
739
690
  }
740
- if (!this._needLength && isJpnEraYear)
741
- // JPN: Japanese date picture support
742
- {
691
+ if (!this._needLength && isJpnEraYear) {
743
692
  for (i = 0; i < this._msk.length; i++) {
744
693
  if (this._msk[i].charCodeAt(0) === PICInterface.PIC_YY)
745
694
  this._msk[i] = String.fromCharCode(PICInterface.PIC_YJ);
@@ -748,27 +697,15 @@ export class PIC {
748
697
  }
749
698
  }
750
699
  }
751
- /// <summary>
752
- /// Parse a numeric picture format
753
- /// </summary>
754
700
  time_prs() {
755
- // -----------------------------------------------------------------------
756
- // Original vars
757
- // -----------------------------------------------------------------------
758
701
  let drv;
759
702
  let NoFormat;
760
- // -----------------------------------------------------------------------
761
- // Added vars
762
- // -----------------------------------------------------------------------
763
703
  let currChr;
764
704
  this._zero = ' ';
765
- // -----------------------------------------------------------------------
766
- // Use a default format, if one is not specified
767
- // -----------------------------------------------------------------------
768
705
  if (this._format.length === 0 || this._format[0].charCodeAt(0) === 0) {
769
706
  NoFormat = "HH:MM:SS";
770
707
  if (this._mskLen < 8)
771
- NoFormat = NoFormat.substr(0, this._mskLen); // NoFormat[this->msk_len] = 0; // Original Line
708
+ NoFormat = NoFormat.substr(0, this._mskLen);
772
709
  this._format = NString.ToCharArray(NoFormat);
773
710
  }
774
711
  while (this._formatIdx < this._format.length) {
@@ -779,7 +716,6 @@ export class PIC {
779
716
  case 'M':
780
717
  case 'S':
781
718
  maskLength = 2;
782
- /* we parse 'H/M/S' only if it has one similar character after it (i.e. 'HH'/'MM'/'SS') */
783
719
  if (this._formatIdx + 1 < this._format.length && this._format[this._formatIdx] === this._format[this._formatIdx + 1]) {
784
720
  switch (currChr) {
785
721
  case 'H':
@@ -803,7 +739,6 @@ export class PIC {
803
739
  break;
804
740
  case 'm':
805
741
  maskLength = 3;
806
- /* we parse 'm' only if it has 2 similar characters after it (i.e. 'mmm') */
807
742
  if (this._formatIdx + 2 < this._format.length &&
808
743
  (this._format[this._formatIdx] === this._format[this._formatIdx + 1] &&
809
744
  this._format[this._formatIdx + 1] === this._format[this._formatIdx + 2])) {
@@ -829,9 +764,7 @@ export class PIC {
829
764
  this._autoSkip_ = true;
830
765
  break;
831
766
  case 'P':
832
- if (this._format[this._formatIdx + 1] === 'M')
833
- // changed from format_[1] -> format_[formatIdx_+1]
834
- {
767
+ if (this._format[this._formatIdx + 1] === 'M') {
835
768
  this._formatIdx += 2;
836
769
  this.pik_drv_fill(PICInterface.PIC_PM, 2);
837
770
  }
@@ -844,12 +777,6 @@ export class PIC {
844
777
  }
845
778
  }
846
779
  }
847
- /// <summary>
848
- /// Build Picture for the variable of the 'type' with 'value'
849
- /// </summary>
850
- /// <param name = "type">of the picture</param>
851
- /// <param name = "value">is needed to be evaluated with the picture</param>
852
- /// <returns> PICture of the needed 'type'</returns>
853
780
  static buildPicture(type, val, compIdx, useDecimal) {
854
781
  let pic = null;
855
782
  let mask = new StringBuilder(10);
@@ -895,7 +822,7 @@ export class PIC {
895
822
  break;
896
823
  }
897
824
  counter++;
898
- } // end of while for looking in the value
825
+ }
899
826
  mask.Append("" + beforeDec + decimalSeparator + afterDec);
900
827
  if (isNegative)
901
828
  mask.Append('N');
@@ -912,24 +839,15 @@ export class PIC {
912
839
  default:
913
840
  Events.WriteDevToLog("Event.buildPicture() there is no PICTURE building for type :" + type +
914
841
  " and value :" + val);
915
- return pic; // null, the PIC didn't build
842
+ return pic;
916
843
  }
917
844
  pic = new PIC(mask.ToString(), type, compIdx);
918
845
  return pic;
919
846
  }
920
- /// <summary>
921
- /// set Hebrew to true
922
- /// </summary>
923
847
  setHebrew() {
924
- // Defect 116258. Set hebrew flag only for hebrew mgconst.
925
848
  if (GuiEnvironment.Environment.Language === 'H')
926
849
  this.hebrew = true;
927
850
  }
928
- /// <summary>
929
- /// get default mask for Date type
930
- /// </summary>
931
- /// <param name = "dataMode">- data mode (J,S,B,E,A)</param>
932
- /// <returns> mask of default date</returns>
933
851
  static getDefaultDateMask(dataMode) {
934
852
  let frmt;
935
853
  switch (dataMode) {
@@ -946,17 +864,8 @@ export class PIC {
946
864
  }
947
865
  return frmt;
948
866
  }
949
- /// <summary>
950
- /// Parse a numeric picture format
951
- /// </summary>
952
867
  bool_prs() {
953
- // -----------------------------------------------------------------------
954
- // Original vars
955
- // -----------------------------------------------------------------------
956
- let count; // Count of direvtive or mask character
957
- // -----------------------------------------------------------------------
958
- // Added vars
959
- // -----------------------------------------------------------------------
868
+ let count;
960
869
  let currChr;
961
870
  while (this._formatIdx < this._format.length) {
962
871
  currChr = this._format[this._formatIdx];
@@ -984,15 +893,9 @@ export class PIC {
984
893
  break;
985
894
  }
986
895
  }
987
- // -----------------------------------------------------------------------
988
- // Fill in an empty format
989
- // -----------------------------------------------------------------------
990
896
  if (this._maskSize === 0)
991
897
  this.pik_drv_fill(PICInterface.PIC_X, this._mskLen);
992
898
  }
993
- /// <summary>
994
- /// Parse the sign prefix/suffix from the format
995
- /// </summary>
996
899
  pik_sign() {
997
900
  let posSign;
998
901
  let signStr;
@@ -1025,7 +928,6 @@ export class PIC {
1025
928
  if (this._formatIdx >= this._format.length)
1026
929
  return;
1027
930
  currChr = this._format[this._formatIdx];
1028
- /* falls through */
1029
931
  default:
1030
932
  signStr.Append(currChr);
1031
933
  this._formatIdx++;
@@ -1033,9 +935,6 @@ export class PIC {
1033
935
  }
1034
936
  }
1035
937
  }
1036
- /// <summary>
1037
- /// Parse a number which is a counter of specific char in the format
1038
- /// </summary>
1039
938
  pik_count() {
1040
939
  let specialValNewPolicy = GuiEnvironment.Environment.GetSpecialValNewPolicy();
1041
940
  let val;
@@ -1050,7 +949,6 @@ export class PIC {
1050
949
  if (val > 32000)
1051
950
  val = 32000;
1052
951
  else if (val <= 0) {
1053
- // If flag SpecialValNewPolicy is set, then picture having whole/dec as 0 e.g. '3.0' should return as 0.
1054
952
  if (specialValNewPolicy && isDigit && val === 0)
1055
953
  return 0;
1056
954
  else
@@ -1060,11 +958,6 @@ export class PIC {
1060
958
  throw new ApplicationException(Events.GetMessageString(MsgInterface.STR_ERR_MAX_VAR_SIZE));
1061
959
  return (val);
1062
960
  }
1063
- /// <summary>
1064
- /// Fill a specific mask character in the mask string
1065
- /// </summary>
1066
- /// <param name = "drv"> The mask character to fill</param>
1067
- /// <param name = "count"> Number of times for the mask character to apear</param>
1068
961
  pik_drv_fill(drv, count) {
1069
962
  let MskZ;
1070
963
  let i = 0;
@@ -1077,15 +970,11 @@ export class PIC {
1077
970
  if (MskZ + count > this._mskLen)
1078
971
  count = this._mskLen - MskZ;
1079
972
  if (count > 0) {
1080
- // memset (&this->msk[this.MskZ], (Uchar) drv, count); // Original Line
1081
973
  for (i = 0; i < count; i++)
1082
974
  this._msk[MskZ + i] = String.fromCharCode(drv);
1083
975
  return;
1084
976
  }
1085
977
  }
1086
- /// <summary>
1087
- /// Parse a general mask character
1088
- /// </summary>
1089
978
  pik_mask() {
1090
979
  let currChr;
1091
980
  let count;
@@ -1099,9 +988,6 @@ export class PIC {
1099
988
  this._maskChars += count;
1100
989
  }
1101
990
  }
1102
- /// <summary>
1103
- /// Count continues occurrences of a mask character in the format string
1104
- /// </summary>
1105
991
  pik_dup() {
1106
992
  let dupCount = 1;
1107
993
  let c;
@@ -1114,10 +1000,6 @@ export class PIC {
1114
1000
  }
1115
1001
  return dupCount;
1116
1002
  }
1117
- /// <summary>
1118
- /// set IME mode depends on K picture (K0 - K9)
1119
- /// (JPN: IME support)
1120
- /// </summary>
1121
1003
  pic_kanji() {
1122
1004
  let count;
1123
1005
  if (this._formatIdx + 1 >= this._format.length)
@@ -1125,32 +1007,25 @@ export class PIC {
1125
1007
  if (!UtilStrByteMode.isDigit(this._format[this._formatIdx + 1]))
1126
1008
  return false;
1127
1009
  this._formatIdx++;
1128
- if (this._format[this._formatIdx] === '0') // K0
1129
- {
1010
+ if (this._format[this._formatIdx] === '0') {
1130
1011
  this._imeMode = UtilImeJpn.IME_FORCE_OFF;
1131
1012
  this._formatIdx++;
1132
1013
  }
1133
1014
  else {
1134
1015
  count = this.pik_count();
1135
- if (1 <= count && count <= 9) // K1 - K9
1016
+ if (1 <= count && count <= 9)
1136
1017
  this._imeMode = count;
1137
1018
  }
1138
1019
  return true;
1139
1020
  }
1140
- /// <summary>
1141
- /// Find length of the picture after parsing the picture
1142
- /// </summary>
1143
- /// <returns> length of the picture</returns>
1144
1021
  getMaskLen(compIdx) {
1145
1022
  this._needLength = true;
1146
1023
  this._maskLength = 0;
1147
1024
  this._formatIdx = 0;
1148
1025
  this.prs_all(compIdx);
1149
- // add prefix and suffix length to the mask
1150
1026
  if (this._picAttr === StorageAttribute.NUMERIC && (this._prefLen > 0 || this._suffLen > 0))
1151
1027
  this._maskLength += (this._prefLen + this._suffLen);
1152
1028
  this._needLength = false;
1153
- // init for next running :
1154
1029
  this._formatIdx = this._maskChars = this._whole = this._decimalDigits = this._size = this._maskSize = this._prefLen = this._suffLen = 0;
1155
1030
  this._pad = this._zero = String.fromCharCode(0);
1156
1031
  this.hebrew = this._mixed = this._embeded = this._negative = this._comma = this._left = this._padFill = this._zeroFill = this._trim = this._autoSkip_ = this._decimal = this._termFlag = this._decPointIsFirst = false;
@@ -1160,11 +1035,6 @@ export class PIC {
1160
1035
  this._negSuff.Remove(0, this._negSuff.Length);
1161
1036
  return this._maskLength;
1162
1037
  }
1163
- /// <summary>
1164
- /// returns true if there is an embeded char in the mask in a givven position.
1165
- /// </summary>
1166
- /// <param name = "pos"></param>
1167
- /// <returns> true if pic is mask</returns>
1168
1038
  picIsMask(pos) {
1169
1039
  if (pos < 0 || pos >= this._maskLength)
1170
1040
  pos = 0;
@@ -1176,11 +1046,6 @@ export class PIC {
1176
1046
  else
1177
1047
  return this.getDirectiveLen_1(posOrMskPos, bufPos, buf);
1178
1048
  }
1179
- /// <summary>
1180
- /// returns the number of chars till the end of the sequence.
1181
- /// </summary>
1182
- /// <param name = "pos"></param>
1183
- /// <returns> number of chars till the end of the sequence</returns>
1184
1049
  getDirectiveLen_0(pos) {
1185
1050
  let c = this._msk[pos];
1186
1051
  let num = pos;
@@ -1189,47 +1054,23 @@ export class PIC {
1189
1054
  }
1190
1055
  return num - pos;
1191
1056
  }
1192
- /// <summary>
1193
- /// returns the number of chars till the end of the sequence.
1194
- /// </summary>
1195
- /// <param name = "mskPos"></param>
1196
- /// <param name = "bufPos"></param>
1197
- /// <param name = "buf"></param>
1198
- /// <returns></returns>
1199
1057
  getDirectiveLen_1(mskPos, bufPos, buf) {
1200
1058
  let drv = this._msk[mskPos];
1201
1059
  let currMskPos = mskPos;
1202
1060
  let currBufPos = bufPos;
1203
- // till the end of the mask, if mask[pos] has same directive as ours, this is the same sequence.
1204
1061
  while (currMskPos < this._maskSize && drv === this._msk[currMskPos]) {
1205
- // Ignore the change of sequence if it is in-between a DBCS char.
1206
- // If the current char is a Full Width char, then the next mask bit
1207
- // is actually not used. So, ignore that bit and move on.
1208
1062
  if (currBufPos < buf.length && UtilStrByteMode.isLocaleDefLangDBCS() && this.isAttrAlphaOrDate()) {
1209
1063
  if (!UtilStrByteMode.isHalfWidth(buf[currBufPos++]))
1210
1064
  currMskPos++;
1211
1065
  }
1212
1066
  currMskPos++;
1213
1067
  }
1214
- // return only how many chars to the end, including our pos.
1215
1068
  return (currMskPos - mskPos);
1216
1069
  }
1217
- /// <summary>
1218
- /// check if char is valid in the given mask position
1219
- /// </summary>
1220
- /// <param name = "charToValidate">
1221
- /// </param>
1222
- /// <param name = "pos">of directive mask to check
1223
- /// The returned char might be different then the char that was checked.
1224
- /// The reason is that 'U' and 'L' directive might change it, and in numeric,
1225
- /// decimal separator and thousand separator might be changed as well while typing.
1226
- /// </param>
1227
- /// <returns> 0 if not valid or a char if valid.</returns>
1228
1070
  validateChar(charToValidate, pos) {
1229
1071
  let charReturned = charToValidate;
1230
1072
  if (pos >= this.getMaskSize())
1231
1073
  return charReturned;
1232
- // we need to skip any characters which are embeded into the picture
1233
1074
  while (this.picIsMask(pos))
1234
1075
  pos++;
1235
1076
  switch (this._msk[pos].charCodeAt(0)) {
@@ -1238,7 +1079,6 @@ export class PIC {
1238
1079
  break;
1239
1080
  case PICInterface.PIC_L:
1240
1081
  charReturned = charToValidate.toLowerCase();
1241
- /* falls through */
1242
1082
  default:
1243
1083
  if (!UtilStrByteMode.isDigit(charToValidate))
1244
1084
  for (let i = 0; i < PICInterface.NumDirective.length; i++)
@@ -1250,19 +1090,9 @@ export class PIC {
1250
1090
  }
1251
1091
  return charReturned;
1252
1092
  }
1253
- /// <summary>
1254
- /// Checks whether a non digit character is valid in a numeric mask
1255
- /// </summary>
1256
- /// <param name = "letter:">a character to be checked.</param>
1257
- /// <returns> 0 if not valid. char if valid. char might be different then letter.</returns>
1258
1093
  isValidInNum(letter) {
1259
1094
  let charRet = '\0';
1260
1095
  let decimalChar = GuiEnvironment.Environment.GetDecimal();
1261
- /***********************************************************************/
1262
- /* replace '.' with a different char for numeric seperator only if
1263
- * SpecialModifiedDecimalSeparator = Y*/
1264
- // for numeric, if '.' was entered, change it to the env seperator.
1265
- // #931784: If SpecialModifiedDecimalSeparator = Y then replace '.' by decimal separator.
1266
1096
  if (GuiEnvironment.Environment.CanReplaceDecimalSeparator() && this.isAttrNumeric())
1267
1097
  if (letter === '.')
1268
1098
  letter = decimalChar;
@@ -1275,104 +1105,51 @@ export class PIC {
1275
1105
  charRet = letter;
1276
1106
  break;
1277
1107
  default:
1278
- // the env decimal seperator and thousands seperator are also valid
1279
1108
  if (letter === decimalChar || letter === GuiEnvironment.Environment.GetThousands())
1280
1109
  charRet = letter;
1281
1110
  break;
1282
1111
  }
1283
1112
  return charRet;
1284
1113
  }
1285
- /// <summary>
1286
- /// check if the attribute is logical
1287
- /// </summary>
1288
- /// <returns></returns>
1289
1114
  isAttrLogical() {
1290
1115
  return (this._picAttr === StorageAttribute.BOOLEAN);
1291
1116
  }
1292
- /// <summary>
1293
- /// check if the attribute is numeric
1294
- /// </summary>
1295
- /// <returns></returns>
1296
1117
  isAttrNumeric() {
1297
1118
  return (this._picAttr === StorageAttribute.NUMERIC);
1298
1119
  }
1299
- /// <summary>
1300
- /// check if the attribute is alpha
1301
- /// </summary>
1302
- /// <returns></returns>
1303
1120
  isAttrAlpha() {
1304
1121
  return (this._picAttr === StorageAttribute.ALPHA);
1305
1122
  }
1306
- /// <summary>
1307
- /// check if the attribute is unicode
1308
- /// </summary>
1309
- /// <returns></returns>
1310
1123
  isAttrUnicode() {
1311
1124
  return (this._picAttr === StorageAttribute.UNICODE);
1312
1125
  }
1313
- /// <summary>
1314
- /// check if the attribute is alpha or date
1315
- /// </summary>
1316
- /// <returns></returns>
1317
1126
  isAttrAlphaOrDate() {
1318
1127
  return (this._picAttr === StorageAttribute.ALPHA || this._picAttr === StorageAttribute.DATE);
1319
1128
  }
1320
- /// <summary>
1321
- /// check if the attribute is time or date
1322
- /// </summary>
1323
- /// <returns></returns>
1324
1129
  isAttrDateOrTime() {
1325
1130
  return (this._picAttr === StorageAttribute.TIME || this._picAttr === StorageAttribute.DATE);
1326
1131
  }
1327
- /// <summary>
1328
- /// check if the attribute is blob
1329
- /// </summary>
1330
- /// <returns></returns>
1331
1132
  isAttrBlob() {
1332
1133
  return (this._picAttr === StorageAttribute.BLOB ||
1333
1134
  this._picAttr === StorageAttribute.BLOB_VECTOR);
1334
1135
  }
1335
- /// <summary>
1336
- /// check if the mask at a given position is numeric
1337
- /// </summary>
1338
- /// <param name = "pos"></param>
1339
- /// <returns></returns>
1340
1136
  isNumeric(pos) {
1341
1137
  return this._msk[pos] === String.fromCharCode(PICInterface.PIC_N);
1342
1138
  }
1343
- /// <summary>
1344
- /// check if the mask is all X
1345
- /// </summary>
1346
- /// <returns></returns>
1347
1139
  isAllX() {
1348
1140
  return (this._msk[0] === String.fromCharCode(PICInterface.PIC_X) && this.getDirectiveLen(0) === this._maskSize);
1349
1141
  }
1350
- /// <summary>
1351
- /// check is mask at position pos is same as parameter maskPic
1352
- /// </summary>
1353
- /// <param name = "pos"></param>
1354
- /// <param name = "maskPic"></param>
1355
- /// <returns></returns>
1356
1142
  isMaskPicEq(pos, maskPic) {
1357
1143
  return this._msk[pos] === String.fromCharCode(maskPic);
1358
1144
  }
1359
- /// <summary>
1360
- /// check if the input char is valid for local AS400 (system i) pictures.
1361
- /// (DBCS Support)
1362
- /// </summary>
1363
- /// <param name = "charToValidate"></param>
1364
- /// <param name = "firstChar"></param>
1365
- /// <param name = "pos"></param>
1366
- /// <returns> 0 if not valid or a char if valid.</returns>
1367
1145
  isValidChar_as400(charToValidate, firstChar, pos) {
1368
1146
  let ret = true;
1369
1147
  switch (this._msk[pos].charCodeAt(0)) {
1370
1148
  case PICInterface.PIC_J:
1371
- // only full-width characters are allowed
1372
1149
  case PICInterface.PIC_G:
1373
1150
  ret = !UtilStrByteMode.isHalfWidth(charToValidate);
1374
1151
  break;
1375
- case (PICInterface.PIC_T): // mixture of full-width and half-width is not allowed
1152
+ case (PICInterface.PIC_T):
1376
1153
  if (firstChar === '\x0000')
1377
1154
  ret = true;
1378
1155
  else if (UtilStrByteMode.isHalfWidth(firstChar))
@@ -1380,7 +1157,7 @@ export class PIC {
1380
1157
  else
1381
1158
  ret = !UtilStrByteMode.isHalfWidth(charToValidate);
1382
1159
  break;
1383
- case (PICInterface.PIC_S): // only half-width characters are allowed
1160
+ case (PICInterface.PIC_S):
1384
1161
  ret = UtilStrByteMode.isHalfWidth(charToValidate);
1385
1162
  break;
1386
1163
  default:
@@ -1388,12 +1165,8 @@ export class PIC {
1388
1165
  }
1389
1166
  return ret;
1390
1167
  }
1391
- /// <summary>
1392
- /// returns the minimum value length
1393
- /// </summary>
1394
1168
  getMinimumValueLength() {
1395
1169
  let minLength = this.getMaskLength();
1396
- // traverse from right till a valid mask char is encountered
1397
1170
  while (minLength > 0 && !this.picIsMask(minLength - 1))
1398
1171
  minLength--;
1399
1172
  return minLength;
@@ -1402,4 +1175,4 @@ export class PIC {
1402
1175
  return "{Picture: " + this._format + "}";
1403
1176
  }
1404
1177
  }
1405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUElDLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9QSUMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELGFBQWE7QUFDYixpRkFBaUY7QUFDakYsaUNBQWlDO0FBQ2pDLHNGQUFzRjtBQUN0RixjQUFjO0FBQ2QsV0FBVztBQUNYLE1BQU0sT0FBTyxHQUFHO0lBNENkLGFBQWE7SUFDYiwwREFBMEQ7SUFDMUQsY0FBYztJQUNkLDREQUE0RDtJQUM1RCxpRUFBaUU7SUFDakUsWUFBWSxNQUFjLEVBQUUsSUFBc0IsRUFBRSxPQUFlO1FBaERuRSw2RUFBNkU7UUFDN0UsOENBQThDO1FBQzlDLDZFQUE2RTtRQUNyRSxZQUFPLEdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUNwQyxhQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsYUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLGFBQVEsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ25ELGFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxhQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsZUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFFLGFBQWE7UUFDM0MsYUFBUSxHQUFZLEtBQUssQ0FBQyxDQUFDLGFB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Qy9FLElBQUksU0FBUyxLQUFLLFFBQVE7b0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUM7cUJBQ1IsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztvQkFDN0MsR0FBRyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7O29CQUVsRCxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNO1lBRVIsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSx5Q0FBeUM7Z0JBQ2xFLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUgsYUFBYTtJQUNiLHNDQUFzQztJQUN0QyxjQUFjO0lBQ1oscUJBQXFCO1FBQ25CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQyw0REFBNEQ7UUFDNUQsT0FBTyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELFNBQVMsRUFBRSxDQUFDO1FBRWQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNc2dJbnRlcmZhY2UsIFBJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZSwgVXRpbEltZUpwbiwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uRXhjZXB0aW9uLCBJbnQzMiwgTlN0cmluZywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoZSBjbGFzcyBoYW5kbGVzIHRoZSBwcm9jZXNzIG9mIGNvbnZlcnRpbmcgaW50ZXJuYWwgZGF0YSB0byBkaXNwbGF5ZWQgZGF0YVxyXG4vLy8gICBieSB1c2luZyBhIHNwZWNpZmljIGZvcm1hdC5cclxuLy8vICAgVGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIFBJQyBzdHJ1Y3R1cmUgb2YgTWFnaWMsIGFuZCBhbGwgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucy5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFBJQyB7XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBPcmlnaW5hbCBtZW1iZXJzIG9mIHRoZSBNYWdpYyBQSUMgc3RydWN0dXJlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIF9tc2tMZW46IG51bWJlciA9IDA7IC8vIFRoZSBtYXNrIGxlblxyXG4gIHByaXZhdGUgX25lZ1ByZWY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX25lZ1N1ZmY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX3BpY0F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgcHJpdmF0ZSBfcG9zUHJlZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfcG9zU3VmZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfYXV0b1NraXBfOiBib29sZWFuID0gZmFsc2U7ICAvLyBBdXRvc2tpcCA/XHJcbiAgcHJpdmF0ZSBfcGFkRmlsbDogYm9vbGVhbiA9IGZhbHNlOyAvLyBQYWQgZmlsbCA/XHJcbiAgcHJpdmF0ZSBfemVyb0ZpbGw6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIFplcm8gZmlsbCA/XHJcbiAgcHJpdmF0ZSBfY29tbWE6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRGlzcGxheSBudW1iZXJzIHdpdGggY29tbWFzID9cclxuICBwcml2YXRlIF9kZWNpbWFsRGlnaXRzOiBudW1iZXIgPSAwOyAvLyBEZWNpbWFsIGRpZ2l0c1xyXG4gIHByaXZhdGUgX2RlY1BvaW50SXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RlY2ltYWw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRGVjaW1hbHMgP1xyXG4gIHByaXZhdGUgX2VtYmVkZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW1iZWRlZCBjaGFyYWN0ZXJzID9cclxuICBwcml2YXRlIF9mb3JtYXRJZHg6IG51bWJlciA9IDA7IC8vIEN1cnJlbnQgY2hhciBwcm9jZXNzZWQgaW4gZm9ybWF0XztcclxuICBwcml2YXRlIF9mb3JtYXQ6IHN0cmluZ1tdID0gbnVsbDsgLy8gVGhlIGZvcm1hdCBwcm9jZXNzZWRcclxuICBwcml2YXRlIGhlYnJldzogYm9vbGVhbiA9IGZhbHNlOyAvLyBIZWJyZXcgP1xyXG4gIHByaXZhdGUgX2ltZU1vZGU6IG51bWJlciA9IC0xOyAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgcHJpdmF0ZSBfbGVmdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBMZWZ0IGp1c3RpZmllZCA/XHJcbiAgcHJpdmF0ZSBfbWFza0xlbmd0aDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9tYXNrQ2hhcnM6IG51bWJlciA9IDA7IC8vIE1hc2sgY2hhcnMgY291bnRcclxuICBwcml2YXRlIF9tYXNrU2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBwaWN0dXJlIGkvbyBtYXNrXHJcbiAgcHJpdmF0ZSBfbWl4ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gTWl4ZWQgbGFuZ3VhZ2UgP1xyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEFkZGVkIHZhcmlhYmxlc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBfbXNrOiBzdHJpbmdbXSA9IG51bGw7IC8vIFRoZSBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHBpY3R1cmUgZm9ybWF0XHJcbiAgcHJpdmF0ZSBfbmVlZExlbmd0aDogYm9vbGVhbiA9IGZhbHNlOyAvLyBnZXQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmdcclxuICBwcml2YXRlIF9uZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBOZWdhdGl2ZSB2YWx1ZXMgYWxsb3dlZCA/XHJcbiAgcHJpdmF0ZSBfcGFkOiBzdHJpbmcgPSAnXFwwJzsgLy8gUGFkIGNoYXJhY3RlclxyXG4gIHByaXZhdGUgX3ByZWZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBBbHBoYSBkYXRhICB3aXRob3V0IG1hc2sgY2hhcmFjdGVyc1xyXG4gIHByaXZhdGUgX3N1ZmZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGVybUZsYWc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXJlIHRlcm1pbmF0b3JzIHNwZWNpZmllZCA/XHJcbiAgcHJpdmF0ZSBfdHJpbTogYm9vbGVhbiA9IGZhbHNlOyAvLyBUcmltID9cclxuICBwcml2YXRlIF93aG9sZTogbnVtYmVyID0gMDsgLy8gV2hvbGUgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfemVybzogc3RyaW5nID0gJ1xcMCc7IC8vIFplcm8gY2hhcmFjdGVyXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGRzIGEgUElDIGNsYXNzIGZyb20gcGljdHVyZSBmb3JtYXQgYW5kIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj5UaGUgcGljdHVyZSBmb3JtYXQgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImF0dHJcIj5UaGUgZGF0YSBhdHRyaWJ1dGUgKE4vQS9EL1QvLi4uKTwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IocGljU3RyOiBzdHJpbmcsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fFxyXG4gICAgICB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGlmIChwaWNTdHIudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcIlBJQy5QSUMgdGhlIHBpY3R1cmUgb2YgQkxPQiBtdXN0IGJlIGVtcHR5IHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWNTdHIpO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLl9tc2tMZW4gPSB0aGlzLmdldE1hc2tMZW4oY29tcElkeCk7XHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgaW5mb3JtYXRpb24gbWV0aG9kc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0hlYnJldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYnJldztcclxuICB9XHJcblxyXG4gIGlzTWl4ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZWQ7XHJcbiAgfVxyXG5cclxuICBlbWJlZGVkQ2hhcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW1iZWRlZDtcclxuICB9XHJcblxyXG4gIGlzTmVnYXRpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XHJcbiAgfVxyXG5cclxuICB3aXRoQ29tYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21tYTtcclxuICB9XHJcblxyXG4gIGlzTGVmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcGFkRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWRGaWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFkO1xyXG4gIH1cclxuXHJcbiAgemVyb0ZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5femVyb0ZpbGw7XHJcbiAgfVxyXG5cclxuICBnZXRaZXJvUGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5femVybztcclxuICB9XHJcblxyXG4gIGlzVHJpbWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyaW07XHJcbiAgfVxyXG5cclxuICBhdXRvU2tpcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvU2tpcF87XHJcbiAgfVxyXG5cclxuICB3aXRoRGVjaW1hbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsO1xyXG4gIH1cclxuXHJcbiAgd2l0aFRlcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybUZsYWc7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrQ2hhcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrQ2hhcnM7XHJcbiAgfVxyXG5cclxuICBnZXRXaG9sZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl93aG9sZTtcclxuICB9XHJcblxyXG4gIGdldERlYygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxEaWdpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcblxyXG4gIGdldE1hc2tTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza1NpemU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4gIGRlY0luRmlyc3RQb3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zUHJlZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wb3NQcmVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQb3NTdWZmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Bvc1N1ZmYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldE5lZ1ByZWZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnUHJlZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmVnU3VmZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdTdWZmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fbXNrKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBnZXRBdHRyKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0F0dHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0QXR0cihzZXQ6U3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9PSBzZXQ7XHJcbiAgfVxyXG5cclxuICBnZXRJbWVNb2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1lTW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSB0aGUgcGljdHVyZSBmb3JtYXQgYnkgdGhlIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwcnNfYWxsKGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9uZWVkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX21zayA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX21za0xlbik7XHJcbiAgICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fbXNrLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgICAgdGhpcy5fbXNrW19haV0gPSAnXFwwJztcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5fcGljQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHRoaXMuYWxwaGFfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICB0aGlzLm51bV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZGF0ZV9wcnMoY29tcElkeCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICB0aGlzLnRpbWVfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmJvb2xfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYW4gYWxwaGEgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYWxwaGFfcHJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBkcnY6IG51bWJlcjtcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnIyc6XHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJyMnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ1UnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfVTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSAvLyBKUE46IERCQ1Mgc3VwcG9ydFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgICAgICAgICAgIGxldCB1c2VJbWVKcG46IGJvb2xlYW4gPSBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyQ2hyID09PSAnSycgJiYgdXNlSW1lSnBuKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGljX2thbmppKCkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldExvY2FsQXM0MDBTZXQoKSkge1xyXG4gICAgICAgICAgICAgIGRydiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChjdXJyQ2hyID09PSAnSicpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0o7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNociA9PT0gJ1QnKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19UO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaHIgPT09ICdHJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfRztcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hyID09PSAnUycpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1M7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBJTUUgbW9kZSBmcm9tIEFTLzQwMCBwaWN0dXJlcyBpZiBLYW5qaSBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ltZU1vZGUgPT09IC0xICYmIHVzZUltZUpwbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX0ogfHwgZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX0cpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1lTW9kZSA9IFV0aWxJbWVKcG4uSU1FX1pFTl9ISVJBR0FOQV9ST01BTjtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX1MpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1lTW9kZSA9IFV0aWxJbWVKcG4uSU1FX0ZPUkNFX09GRjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIGNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbiBjYXNlIHRoYXQgbm8gcGljdHVyZSBpcyBzcGVjaWZpZWQsIGFzc3VtZSBhbGwgaXMgWHNcclxuICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA9PT0gMClcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCB0aGlzLl9tc2tMZW4pO1xyXG5cclxuICAgIC8vIENvbXB1dGUgbWFzayBzaXplIHdpdGhvdXQgdGhlIG1hc2sgY2hhcmFjdGVyc1xyXG4gICAgdGhpcy5fc2l6ZSA9IHRoaXMuX21hc2tTaXplO1xyXG4gICAgaWYgKCF0aGlzLl9lbWJlZGVkKVxyXG4gICAgICB0aGlzLl9zaXplIC09IHRoaXMuX21hc2tDaGFycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhIG51bWVyaWMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgbnVtX3BycygpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDogbnVtYmVyO1xyXG4gICAgbGV0IHRtcHM6IG51bWJlcjtcclxuICAgIGxldCB0bXBfYzogbnVtYmVyID0gMDtcclxuICAgIGxldCBmaXJzdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMuX3plcm8gPSAnICcvKicgJyovO1xyXG4gICAgdGhpcy5fcGFkID0gJyAnLyonICcqLztcclxuICAgIHRoaXMuX25lZ1ByZWYuQXBwZW5kKCctJykvKictJyovO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9mb3JtYXQubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtpXSA9PT0gJysnIC8qJysnKi8gfHwgdGhpcy5fZm9ybWF0W2ldID09PSAnLScvKictJyovKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtpXSA9PT0gJ1xcXFwnIC8qJ1xcJyovIHx8IHRoaXMuX2Zvcm1hdFtpXSA9PT0gJ1AnLyonUCcqLykge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnQycvKidDJyovKSB7XHJcbiAgICAgICAgdGhpcy5fY29tbWEgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdOJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fbmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0MnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9jb21tYSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2xlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9wYWRGaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9wYWQgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4KytdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnLic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGlmICh0aGlzLl9uZWVkTGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9tYXNrTGVuZ3RoKys7XHJcbiAgICAgICAgICB0aGlzLl9kZWNpbWFsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA8IHRoaXMuX21za0xlbilcclxuICAgICAgICAgICAgdGhpcy5fbXNrW3RoaXMuX21hc2tTaXplXSA9ICBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIE1hcmsgdGhhdFxyXG4gICAgICAgICAgLy8gRGVjaW1hbCBQb2ludCBpcyBpbiBGaXJzdCBQb3NpdGlvbjpcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICBpZiAodGhpcy5fbWFza1NpemUgPT09IDApXHJcbiAgICAgICAgICAgIHRoaXMuX2RlY1BvaW50SXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9tYXNrU2l6ZSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJysnOlxyXG4gICAgICAgIGNhc2UgJy0nOlxyXG4gICAgICAgICAgdGhpcy5waWtfc2lnbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikgfHwgY3VyckNociA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHRtcCA9IHRoaXMuX2Zvcm1hdElkeDtcclxuICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICcjJylcclxuICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIGNvdW50KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdFt0bXBdID09PSAnIycpIHtcclxuICAgICAgICAgICAgICBpZiAoY291bnQgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRtcHMgPSB0aGlzLl9mb3JtYXRJZHg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB0bXBfYyA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ID0gdG1wcztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGZpcnN0ICYmICh0bXBfYyA+IDAgfHwgY291bnQgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMSlcclxuICAgICAgICAgICAgICAgICAgdG1wX2MgPSBjb3VudDtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCBjb21tYXMgYmVmb3IgcGxhY2VzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tbWEgJiYgIXRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgTWF0aC5mbG9vcigodG1wX2MgLSAxKSAvIDMpKTtcclxuICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFkZCBjb21tYXMgYmVmb3IgcGxhY2VzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hICYmICF0aGlzLl9kZWNpbWFsKVxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgTWF0aC5mbG9vcigoY291bnQgLSAxKSAvIDMpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWNpbWFsKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2RlY2ltYWxEaWdpdHMgKz0gY291bnQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLl93aG9sZSArPSBjb3VudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbi8vIFN0b3JlIHRoZSBtYXhpbWFsIGxlbmd0aCBvZiBzaWduIHByZWZpeCBhbmQgc3VmZml4IGJldHdlZW4gbmVnYXRpdmUgYW5kIHBvc2l0aXZlXHJcbiAgICB0aGlzLl9wcmVmTGVuID0gdGhpcy5fcG9zUHJlZi5MZW5ndGg7XHJcbiAgICB0aGlzLl9zdWZmTGVuID0gdGhpcy5fcG9zU3VmZi5MZW5ndGg7XHJcbiAgICBpZiAodGhpcy5fbmVnYXRpdmUpIHtcclxuICAgICAgaWYgKHRoaXMuX25lZ1ByZWYuTGVuZ3RoID4gdGhpcy5fcHJlZkxlbikge1xyXG4gICAgICAgIHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9uZWdQcmVmLkxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fbmVnU3VmZi5MZW5ndGggPiB0aGlzLl9zdWZmTGVuKSB7XHJcbiAgICAgICAgdGhpcy5fc3VmZkxlbiA9IHRoaXMuX25lZ1N1ZmYuTGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGEgZm9ybWF0IHdpdGhvdXQgZGlnaXRzXHJcbiAgICBpZiAodGhpcy5fd2hvbGUgPT09IDAgJiYgdGhpcy5fZGVjaW1hbERpZ2l0cyA9PT0gMCkge1xyXG4gICAgICBjb3VudCA9IFBJQ0ludGVyZmFjZS5QSUNfTUFYX01TS19MRU4gLSB0aGlzLl9wcmVmTGVuIC0gdGhpcy5fc3VmZkxlbjtcclxuICAgICAgaWYgKHRoaXMuX21hc2tTaXplIDwgY291bnQpIHtcclxuICAgICAgICB0aGlzLl93aG9sZSA9IGNvdW50IC0gdGhpcy5fbWFza1NpemU7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbW1hKVxyXG4gICAgICAgICAgdGhpcy5fd2hvbGUgLT0gTWF0aC5mbG9vcih0aGlzLl93aG9sZSAvIDQpO1xyXG4gICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgdGhpcy5fd2hvbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIGV4dHJhIGZvciBwcmVmL3N1ZmYgYW5kIGNvbW1hc1xyXG4gICAgaWYgKHRoaXMuX2NvbW1hKSB7XHJcbiAgICAgIGNvdW50ID0gTWF0aC5mbG9vcigodGhpcy5fd2hvbGUgLSAxKSAvIDMpO1xyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIGNvdW50KTtcclxuICAgICAgLy8gcmVtb3ZlIGNvbW1hcyBwbGFjZXNcclxuICAgICAgdGhpcy5fbWFza1NpemUgLT0gY291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaSA9IHRoaXMuX3ByZWZMZW47XHJcbiAgICBpZiAoaSA+IDAgJiYgdGhpcy5fbXNrICE9IG51bGwpIHtcclxuICAgICAgaWYgKCh0aGlzLl9tYXNrU2l6ZSArIGkpIDw9IHRoaXMuX21za0xlbikge1xyXG4gICAgICAgIGZvciAoaiA9IHRoaXMuX21hc2tTaXplIC0gMTtcclxuICAgICAgICAgICAgIGogPj0gMDtcclxuICAgICAgICAgICAgIGotLSlcclxuICAgICAgICAgIHRoaXMuX21za1tqICsgaV0gPSB0aGlzLl9tc2tbal07XHJcbiAgICAgICAgLy8gbWVtc2V0ICh0aGlzLT5tc2ssIFBJQ19OLCBpKTsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICAgIGZvciAoaiA9IDA7XHJcbiAgICAgICAgICAgICBqIDwgaTtcclxuICAgICAgICAgICAgIGorKylcclxuICAgICAgICAgIGlmICh0aGlzLl9tc2sgIT0gbnVsbCAmJiBqIDwgdGhpcy5fbXNrLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5fbXNrW2pdID0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21hc2tTaXplICs9IGk7XHJcbiAgICB9XHJcbiAgICBpID0gdGhpcy5fc3VmZkxlbjtcclxuICAgIGlmIChpID4gMCAmJiB0aGlzLl9tc2sgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5fbWFza1NpemUgKyB0aGlzLl9zdWZmTGVuIDw9IHRoaXMuX21za0xlbilcclxuICAgICAgLy8gbWVtc2V0ICgmTXNrW3RoaXMtPnBpYy0+bWFza19zaXplXSwgUElDX04sIHRoaXMtPnBpYy0+c3VmZl9sZW4pOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgICAgZm9yIChqID0gMDtcclxuICAgICAgICAgICAgIGogPCB0aGlzLl9zdWZmTGVuO1xyXG4gICAgICAgICAgICAgaisrKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW3RoaXMuX21hc2tTaXplICsgal0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgIHRoaXMuX21hc2tTaXplICs9IGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYSBkYXRlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfcHJzKGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IG9jcjogbnVtYmVyO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcbiAgICBsZXQgZHJ2OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IFN3aXRjaEFuZEV4cGFuZERhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBTV0V4cGFuZERhdGVDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEFkZGVkIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGlzSnBuRXJhWWVhcjogYm9vbGVhbiA9IGZhbHNlOyAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICB0aGlzLl96ZXJvID0gJyAnO1xyXG4gICAgb2NyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mb3JtYXRbMF0gPT09ICdcXDAnKVxyXG4gICAgICB0aGlzLl9mb3JtYXQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFBJQy5nZXREZWZhdWx0RGF0ZU1hc2soR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpKTtcclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuX2Zvcm1hdC5sZW5ndGg7IGorKylcclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtqXSA9PT0gJ0gnKVxyXG4gICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnVCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3RyaW0gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgaWYgKHRoaXMuaGVicmV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX0hMLCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1knOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBpID0gY291bnQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDIpXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPiAyKSB7XHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1NO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAxMClcclxuICAgICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnRCc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpIHtcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19EREQ7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IREQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfRERERDtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcjJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDIpIHtcclxuICAgICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgICAgb2NyKys7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdFJzpcclxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChvY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChvY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdKJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghU1dFeHBhbmREYXRlQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmb3JtYXRfIGNvbnRhaW5zIFwiIyMjI1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaEFuZEV4cGFuZERhdGUgPSBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9mb3JtYXQpLmluZGV4T2YoXCIjIyMjXCIpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNXRXhwYW5kRGF0ZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFN3aXRjaEFuZEV4cGFuZERhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWVlZWSwgNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRydiAhPT0gMClcclxuICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIDIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPT09IDQpIHtcclxuICAgICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgICAgb2NyKys7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdFJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAob2NyID09PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVlZWTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnSic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKG9jciA9PT0gMSlcclxuICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZWVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghU1dFeHBhbmREYXRlQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZm9ybWF0XyBjb250YWlucyBcIiMjIyNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQW5kRXhwYW5kRGF0ZSA9ICBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9mb3JtYXQpLmluZGV4T2YoXCIjIyMjXCIpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICBTV0V4cGFuZERhdGVDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFN3aXRjaEFuZEV4cGFuZERhdGUgJiYgb2NyID09PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19ERCwgMik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkcnYgIT09IDApXHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCA0KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ1cnOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMSlcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19XO1xyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gNSlcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1dXVztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPiAyICYmIGNvdW50IDw9IDEwKVxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1dXVztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJy8nOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlKCkuY2hhckNvZGVBdCgwKSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUyc6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgIGkgPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMiAmJiBjb3VudCAhPT0gNCAmJiBjb3VudCAhPT0gNilcclxuICAgICAgICAgICAgICBpID0gMDtcclxuXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfQkI7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnSic6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgICAgaXNKcG5FcmFZZWFyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZNDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpc0pwbkVyYVllYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX25lZWRMZW5ndGggJiYgaXNKcG5FcmFZZWFyKVxyXG4vLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICB7XHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IHRoaXMuX21zay5sZW5ndGg7XHJcbiAgICAgICAgICAgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21za1tpXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX1lZKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSggUElDSW50ZXJmYWNlLlBJQ19ZSik7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fbXNrW2ldLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVlZWSlcclxuICAgICAgICAgIHRoaXMuX21za1tpXSA9ICdZJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSB0aW1lX3BycygpOiB2b2lkIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGRydjogbnVtYmVyO1xyXG4gICAgbGV0IE5vRm9ybWF0OiBzdHJpbmc7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQWRkZWQgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy5femVybyA9ICcgJztcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVXNlIGEgZGVmYXVsdCBmb3JtYXQsIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdC5sZW5ndGggPT09IDAgfHwgdGhpcy5fZm9ybWF0WzBdLmNoYXJDb2RlQXQoMCkgPT09IDApIHtcclxuICAgICAgTm9Gb3JtYXQgPSBcIkhIOk1NOlNTXCI7XHJcbiAgICAgIGlmICh0aGlzLl9tc2tMZW4gPCA4KVxyXG4gICAgICAgIE5vRm9ybWF0ID0gTm9Gb3JtYXQuc3Vic3RyKDAsIHRoaXMuX21za0xlbik7IC8vIE5vRm9ybWF0W3RoaXMtPm1za19sZW5dID0gMDsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICB0aGlzLl9mb3JtYXQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KE5vRm9ybWF0KTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcblxyXG4gICAgICBsZXQgbWFza0xlbmd0aDogbnVtYmVyO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgIG1hc2tMZW5ndGggPSAyO1xyXG4gICAgICAgICAgLyogd2UgcGFyc2UgJ0gvTS9TJyBvbmx5IGlmIGl0IGhhcyBvbmUgc2ltaWxhciBjaGFyYWN0ZXIgYWZ0ZXIgaXQgKGkuZS4gJ0hIJy8nTU0nLydTUycpICovXHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMSA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSEg7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfU1M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5OVUxMX0NIQVI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gbWFza0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBtYXNrTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ20nOlxyXG4gICAgICAgICAgbWFza0xlbmd0aCA9IDM7XHJcbiAgICAgICAgICAvKiB3ZSBwYXJzZSAnbScgb25seSBpZiBpdCBoYXMgMiBzaW1pbGFyIGNoYXJhY3RlcnMgYWZ0ZXIgaXQgKGkuZS4gJ21tbScpICovXHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMiA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiZcclxuICAgICAgICAgICAgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAyXSkpIHtcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NUztcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IG1hc2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgbWFza0xlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICc6JzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGltZSgpLmNoYXJDb2RlQXQoMCksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUCc6XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdID09PSAnTScpXHJcbiAgICAgICAgICAvLyBjaGFuZ2VkIGZyb20gZm9ybWF0X1sxXSAtPiBmb3JtYXRfW2Zvcm1hdElkeF8rMV1cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IDI7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfUE0sIDIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIFBpY3R1cmUgZm9yIHRoZSB2YXJpYWJsZSBvZiB0aGUgJ3R5cGUnIHdpdGggJ3ZhbHVlJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVcIj5pcyBuZWVkZWQgdG8gYmUgZXZhbHVhdGVkIHdpdGggdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gUElDdHVyZSBvZiB0aGUgbmVlZGVkICd0eXBlJzwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIGJ1aWxkUGljdHVyZSh0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB2YWw6IHN0cmluZywgY29tcElkeDogbnVtYmVyLCB1c2VEZWNpbWFsOiBib29sZWFuKTogUElDIHtcclxuICAgIGxldCBwaWM6IFBJQyA9IG51bGw7XHJcbiAgICBsZXQgbWFzazogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKDEwKTtcclxuICAgIGxldCBkZWNpbWFsU2VwYXJhdG9yOiBzdHJpbmc7XHJcbiAgICBsZXQgdGhvdXNhbmRzOiBzdHJpbmc7XHJcbiAgICBsZXQgY3VyckNoYXI6IHN0cmluZztcclxuICAgIGxldCBjb3VudGVyOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZXQgYmVmb3JlRGVjOiBudW1iZXI7XHJcbiAgICBsZXQgYWZ0ZXJEZWM6IG51bWJlcjtcclxuICAgIGxldCBkZWNpbWFsRGVsaW1Gb3VuZDogYm9vbGVhbjtcclxuICAgIGxldCBpc1Rob3VzYW5kc0RlbGltOiBib29sZWFuO1xyXG4gICAgbGV0IGlzTmVnYXRpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3IgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcbiAgICAgICAgdGhvdXNhbmRzID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCk7XHJcbiAgICAgICAgYmVmb3JlRGVjID0gYWZ0ZXJEZWMgPSAwO1xyXG4gICAgICAgIGRlY2ltYWxEZWxpbUZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgaXNUaG91c2FuZHNEZWxpbSA9IGZhbHNlO1xyXG4gICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgYmVmb3JlRGVjID0gYWZ0ZXJEZWMgPSAxO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGVuZ3RoID0gdmFsLmxlbmd0aDtcclxuICAgICAgICAgIGNvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1cnJDaGFyID0gdmFsW2NvdW50ZXJdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJDaGFyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnKyc6XHJcbiAgICAgICAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmICh1c2VEZWNpbWFsICYmIGN1cnJDaGFyID09PSBkZWNpbWFsU2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgICBkZWNpbWFsRGVsaW1Gb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hhciA9PT0gdGhvdXNhbmRzKVxyXG4gICAgICAgICAgICAgICAgICBpc1Rob3VzYW5kc0RlbGltID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2ltYWxEZWxpbUZvdW5kKVxyXG4gICAgICAgICAgICAgICAgICBhZnRlckRlYysrO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICBiZWZvcmVEZWMrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgIH0gLy8gZW5kIG9mIHdoaWxlIGZvciBsb29raW5nIGluIHRoZSB2YWx1ZVxyXG5cclxuICAgICAgICAgIG1hc2suQXBwZW5kKFwiXCIgKyBiZWZvcmVEZWMgKyBkZWNpbWFsU2VwYXJhdG9yICsgYWZ0ZXJEZWMpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnYXRpdmUpXHJcbiAgICAgICAgICAgIG1hc2suQXBwZW5kKCdOJyk7XHJcbiAgICAgICAgICBpZiAoaXNUaG91c2FuZHNEZWxpbSlcclxuICAgICAgICAgICAgbWFzay5BcHBlbmQoJ0MnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgbWFzay5BcHBlbmQodGhpcy5nZXREZWZhdWx0RGF0ZU1hc2soR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBtYXNrLkFwcGVuZChcIkhIXCIgKyBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkgKyBcIk1NXCIgKyBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkgKyBcIlNTXCIpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiRXZlbnQuYnVpbGRQaWN0dXJlKCkgdGhlcmUgaXMgbm8gUElDVFVSRSBidWlsZGluZyBmb3IgdHlwZSA6XCIgKyB0eXBlICtcclxuICAgICAgICAgIFwiIGFuZCB2YWx1ZSA6XCIgKyB2YWwpO1xyXG4gICAgICAgIHJldHVybiBwaWM7IC8vIG51bGwsIHRoZSBQSUMgZGlkbid0IGJ1aWxkXHJcbiAgICB9XHJcblxyXG4gICAgcGljID0gbmV3IFBJQyhtYXNrLlRvU3RyaW5nKCksIHR5cGUsIGNvbXBJZHgpO1xyXG4gICAgcmV0dXJuIHBpYztcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHNldCBIZWJyZXcgdG8gdHJ1ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEhlYnJldygpOiB2b2lkIHtcclxuICAgIC8vIERlZmVjdCAxMTYyNTguIFNldCBoZWJyZXcgZmxhZyBvbmx5IGZvciBoZWJyZXcgbWdjb25zdC5cclxuICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5MYW5ndWFnZSA9PT0gJ0gnKVxyXG4gICAgICB0aGlzLmhlYnJldyA9IHRydWU7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBnZXQgZGVmYXVsdCBtYXNrIGZvciBEYXRlIHR5cGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhTW9kZVwiPi0gZGF0YSBtb2RlIChKLFMsQixFLEEpPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiBtYXNrIG9mIGRlZmF1bHQgZGF0ZTwvcmV0dXJucz5cclxuICBwcm90ZWN0ZWQgc3RhdGljIGdldERlZmF1bHREYXRlTWFzayhkYXRhTW9kZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZnJtdDogc3RyaW5nO1xyXG4gICAgc3dpdGNoIChkYXRhTW9kZSkge1xyXG4gICAgICBjYXNlICdKJzpcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgZnJtdCA9IFwiIyMjIy8jIy8jI1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnQic6XHJcbiAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICBjYXNlICdBJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBmcm10ID0gXCIjIy8jIy8jIyMjXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJtdDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYm9vbF9wcnMoKTogdm9pZCB7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjb3VudDogbnVtYmVyOyAvLyBDb3VudCBvZiBkaXJldnRpdmUgb3IgbWFzayBjaGFyYWN0ZXJcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBBZGRlZCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnNldEhlYnJldygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgY291bnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaHIpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEZpbGwgaW4gYW4gZW1wdHkgZm9ybWF0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKHRoaXMuX21hc2tTaXplID09PSAwKVxyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIHRoaXMuX21za0xlbik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSB0aGUgc2lnbiBwcmVmaXgvc3VmZml4IGZyb20gdGhlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX3NpZ24oKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zU2lnbjogYm9vbGVhbjtcclxuICAgIGxldCBzaWduU3RyOiBTdHJpbmdCdWlsZGVyO1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICBwb3NTaWduID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICcrJ1xyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG5cclxuICAgIGlmIChwb3NTaWduKVxyXG4gICAgICBzaWduU3RyID0gdGhpcy5fcG9zUHJlZjtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9uZWdQcmVmLlJlbW92ZSgwLCB0aGlzLl9uZWdQcmVmLkxlbmd0aCk7XHJcbiAgICAgIHNpZ25TdHIgPSB0aGlzLl9uZWdQcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnOyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJywnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBpZiAocG9zU2lnbilcclxuICAgICAgICAgICAgc2lnblN0ciA9IHRoaXMuX3Bvc1N1ZmY7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHNpZ25TdHIgPSB0aGlzLl9uZWdTdWZmO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdcXFxcJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA+PSB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBzaWduU3RyLkFwcGVuZChjdXJyQ2hyKTtcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIGEgbnVtYmVyIHdoaWNoIGlzIGEgY291bnRlciBvZiBzcGVjaWZpYyBjaGFyIGluIHRoZSBmb3JtYXRcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19jb3VudCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHNwZWNpYWxWYWxOZXdQb2xpY3k6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcbiAgICBsZXQgdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgaXNEaWdpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHZhbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0pKSB7XHJcbiAgICAgIHZhbCAqPSAxMDtcclxuICAgICAgaXNEaWdpdCA9IHRydWU7XHJcbiAgICAgIHZhbCArPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XS5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwgPiAzMjAwMClcclxuICAgICAgdmFsID0gMzIwMDA7XHJcbiAgICBlbHNlIGlmICh2YWwgPD0gMCkge1xyXG4gICAgICAvLyBJZiAgZmxhZyBTcGVjaWFsVmFsTmV3UG9saWN5IGlzIHNldCwgdGhlbiBwaWN0dXJlIGhhdmluZyB3aG9sZS9kZWMgYXMgMCBlLmcuICczLjAnIHNob3VsZCByZXR1cm4gYXMgMC5cclxuICAgICAgaWYgKHNwZWNpYWxWYWxOZXdQb2xpY3kgJiYgaXNEaWdpdCAmJiB2YWwgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwgPiBJbnQzMi5NYXhWYWx1ZSlcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5TVFJfRVJSX01BWF9WQVJfU0laRSkpO1xyXG5cclxuICAgIHJldHVybiAodmFsKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEZpbGwgYSBzcGVjaWZpYyBtYXNrIGNoYXJhY3RlciBpbiB0aGUgbWFzayBzdHJpbmdcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJkcnZcIj4gICAgVGhlIG1hc2sgY2hhcmFjdGVyIHRvIGZpbGw8L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImNvdW50XCI+ICBOdW1iZXIgb2YgdGltZXMgZm9yIHRoZSBtYXNrIGNoYXJhY3RlciB0byBhcGVhcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBwaWtfZHJ2X2ZpbGwoZHJ2OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgTXNrWjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLl9uZWVkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX21hc2tMZW5ndGggKz0gY291bnQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBNc2taID0gdGhpcy5fbWFza1NpemU7XHJcbiAgICB0aGlzLl9tYXNrU2l6ZSArPSBjb3VudDtcclxuXHJcbiAgICBpZiAoTXNrWiArIGNvdW50ID4gdGhpcy5fbXNrTGVuKVxyXG4gICAgICBjb3VudCA9IHRoaXMuX21za0xlbiAtIE1za1o7XHJcblxyXG4gICAgaWYgKGNvdW50ID4gMCkge1xyXG4gICAgICAvLyBtZW1zZXQgKCZ0aGlzLT5tc2tbdGhpcy5Nc2taXSwgKFVjaGFyKSBkcnYsIGNvdW50KTsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICAgIGkgPCBjb3VudDtcclxuICAgICAgICAgICBpKyspXHJcbiAgICAgICAgdGhpcy5fbXNrW01za1ogKyBpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZHJ2KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBnZW5lcmFsIG1hc2sgY2hhcmFjdGVyXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfbWFzaygpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICdcXFxcJylcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKGN1cnJDaHIuY2hhckNvZGVBdCgwKSwgY291bnQpO1xyXG4gICAgICB0aGlzLl9tYXNrQ2hhcnMgKz0gY291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBDb3VudCBjb250aW51ZXMgb2NjdXJyZW5jZXMgb2YgYSBtYXNrIGNoYXJhY3RlciBpbiB0aGUgZm9ybWF0IHN0cmluZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX2R1cCgpOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBkdXBDb3VudCA9IDE7XHJcblxyXG4gICAgbGV0IGM6IHN0cmluZztcclxuXHJcbiAgICBsZXQgdG1wSWR4ID0gdGhpcy5fZm9ybWF0SWR4O1xyXG5cclxuICAgIGMgPSB0aGlzLl9mb3JtYXRbdG1wSWR4XTtcclxuICAgIHRtcElkeCsrO1xyXG4gICAgd2hpbGUgKHRtcElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgYyA9PT0gdGhpcy5fZm9ybWF0W3RtcElkeF0pIHtcclxuICAgICAgZHVwQ291bnQrKztcclxuICAgICAgdG1wSWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR1cENvdW50O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgc2V0IElNRSBtb2RlIGRlcGVuZHMgb24gSyBwaWN0dXJlIChLMCAtIEs5KVxyXG4vLy8gICAoSlBOOiBJTUUgc3VwcG9ydClcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpY19rYW5qaSgpOiBib29sZWFuIHtcclxuICAgIGxldCBjb3VudDtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMSA+PSB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0pKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSAnMCcpICAvLyBLMFxyXG4gICAge1xyXG4gICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfRk9SQ0VfT0ZGO1xyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgIGlmICgxIDw9IGNvdW50ICYmIGNvdW50IDw9IDkpIC8vIEsxIC0gSzlcclxuICAgICAgICB0aGlzLl9pbWVNb2RlID0gY291bnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEZpbmQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmcgdGhlIHBpY3R1cmVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPiBsZW5ndGggb2YgdGhlIHBpY3R1cmU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRNYXNrTGVuKGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbmVlZExlbmd0aCA9IHRydWU7XHJcbiAgICB0aGlzLl9tYXNrTGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2Zvcm1hdElkeCA9IDA7XHJcblxyXG4gICAgdGhpcy5wcnNfYWxsKGNvbXBJZHgpO1xyXG5cclxuICAgIC8vIGFkZCBwcmVmaXggYW5kIHN1ZmZpeCBsZW5ndGggdG8gdGhlIG1hc2tcclxuICAgIGlmICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgJiYgKHRoaXMuX3ByZWZMZW4gPiAwIHx8IHRoaXMuX3N1ZmZMZW4gPiAwKSlcclxuICAgICAgdGhpcy5fbWFza0xlbmd0aCArPSAodGhpcy5fcHJlZkxlbiArIHRoaXMuX3N1ZmZMZW4pO1xyXG5cclxuICAgIHRoaXMuX25lZWRMZW5ndGggPSBmYWxzZTtcclxuICAgIC8vIGluaXQgZm9yIG5leHQgcnVubmluZyA6XHJcbiAgICB0aGlzLl9mb3JtYXRJZHggPSB0aGlzLl9tYXNrQ2hhcnMgPSB0aGlzLl93aG9sZSA9IHRoaXMuX2RlY2ltYWxEaWdpdHMgPSB0aGlzLl9zaXplID0gdGhpcy5fbWFza1NpemUgPSB0aGlzLl9wcmVmTGVuID0gdGhpcy5fc3VmZkxlbiA9IDA7XHJcbiAgICB0aGlzLl9wYWQgPSB0aGlzLl96ZXJvID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTtcclxuICAgIHRoaXMuaGVicmV3ID0gdGhpcy5fbWl4ZWQgPSB0aGlzLl9lbWJlZGVkID0gdGhpcy5fbmVnYXRpdmUgPSB0aGlzLl9jb21tYSA9IHRoaXMuX2xlZnQgPSB0aGlzLl9wYWRGaWxsID0gdGhpcy5femVyb0ZpbGwgPSB0aGlzLl90cmltID0gdGhpcy5fYXV0b1NraXBfID0gdGhpcy5fZGVjaW1hbCA9IHRoaXMuX3Rlcm1GbGFnID0gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wb3NQcmVmLlJlbW92ZSgwLCB0aGlzLl9wb3NQcmVmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9wb3NTdWZmLlJlbW92ZSgwLCB0aGlzLl9wb3NTdWZmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9uZWdQcmVmLlJlbW92ZSgwLCB0aGlzLl9uZWdQcmVmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9uZWdTdWZmLlJlbW92ZSgwLCB0aGlzLl9uZWdTdWZmLkxlbmd0aCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbWJlZGVkIGNoYXIgaW4gdGhlIG1hc2sgaW4gYSBnaXZ2ZW4gcG9zaXRpb24uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHBpYyBpcyBtYXNrPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBwaWNJc01hc2socG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmIChwb3MgPCAwIHx8IHBvcyA+PSB0aGlzLl9tYXNrTGVuZ3RoKVxyXG4gICAgICBwb3MgPSAwO1xyXG4gICAgcmV0dXJuIHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkgPiBQSUNJbnRlcmZhY2UuUElDX01BWF9PUDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcIm1za1Bvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmUG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJidWZcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldERpcmVjdGl2ZUxlbihwb3M6IG51bWJlcik6IG51bWJlcjtcclxuICBnZXREaXJlY3RpdmVMZW4obXNrUG9zOiBudW1iZXIsIGJ1ZlBvczogbnVtYmVyLCBidWY6IHN0cmluZyk6IG51bWJlcjtcclxuICBnZXREaXJlY3RpdmVMZW4ocG9zT3JNc2tQb3M6IG51bWJlciwgYnVmUG9zPzogbnVtYmVyLCBidWY/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERpcmVjdGl2ZUxlbl8wKHBvc09yTXNrUG9zKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlyZWN0aXZlTGVuXzEocG9zT3JNc2tQb3MsIGJ1ZlBvcywgYnVmKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgdGlsbCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlTGVuXzAocG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGM6IHN0cmluZyA9IHRoaXMuX21za1twb3NdO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gcG9zO1xyXG4gICAgd2hpbGUgKG51bSA8IHRoaXMuX21hc2tTaXplICYmIGMgPT09IHRoaXMuX21za1tudW1dKSB7XHJcbiAgICAgIG51bSA9IG51bSArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtIC0gcG9zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tQb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmUG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldERpcmVjdGl2ZUxlbl8xKG1za1BvczogbnVtYmVyLCBidWZQb3M6IG51bWJlciwgYnVmOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGRydjogc3RyaW5nID0gdGhpcy5fbXNrW21za1Bvc107XHJcbiAgICBsZXQgY3Vyck1za1BvczogbnVtYmVyID0gbXNrUG9zO1xyXG4gICAgbGV0IGN1cnJCdWZQb3M6IG51bWJlciA9IGJ1ZlBvcztcclxuXHJcbiAgICAvLyB0aWxsIHRoZSBlbmQgb2YgdGhlIG1hc2ssIGlmIG1hc2tbcG9zXSBoYXMgc2FtZSBkaXJlY3RpdmUgYXMgb3VycywgdGhpcyBpcyB0aGUgc2FtZSBzZXF1ZW5jZS5cclxuICAgIHdoaWxlIChjdXJyTXNrUG9zIDwgdGhpcy5fbWFza1NpemUgJiYgZHJ2ID09PSB0aGlzLl9tc2tbY3Vyck1za1Bvc10pIHtcclxuICAgICAgLy8gSWdub3JlIHRoZSBjaGFuZ2Ugb2Ygc2VxdWVuY2UgaWYgaXQgaXMgaW4tYmV0d2VlbiBhIERCQ1MgY2hhci5cclxuICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhciBpcyBhIEZ1bGwgV2lkdGggY2hhciwgdGhlbiB0aGUgbmV4dCBtYXNrIGJpdFxyXG4gICAgICAvLyBpcyBhY3R1YWxseSBub3QgdXNlZC4gU28sIGlnbm9yZSB0aGF0IGJpdCBhbmQgbW92ZSBvbi5cclxuICAgICAgaWYgKGN1cnJCdWZQb3MgPCBidWYubGVuZ3RoICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgdGhpcy5pc0F0dHJBbHBoYU9yRGF0ZSgpKSB7XHJcbiAgICAgICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoYnVmW2N1cnJCdWZQb3MrK10pKVxyXG4gICAgICAgICAgY3Vyck1za1BvcysrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyTXNrUG9zKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIG9ubHkgaG93IG1hbnkgY2hhcnMgdG8gdGhlIGVuZCwgaW5jbHVkaW5nIG91ciBwb3MuXHJcbiAgICByZXR1cm4gKGN1cnJNc2tQb3MgLSBtc2tQb3MpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgY2hhciBpcyB2YWxpZCBpbiB0aGUgZ2l2ZW4gbWFzayBwb3NpdGlvblxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImNoYXJUb1ZhbGlkYXRlXCI+XHJcbi8vLyA8L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPm9mIGRpcmVjdGl2ZSBtYXNrIHRvIGNoZWNrXHJcbi8vLyAgIFRoZSByZXR1cm5lZCBjaGFyIG1pZ2h0IGJlIGRpZmZlcmVudCB0aGVuIHRoZSBjaGFyIHRoYXQgd2FzIGNoZWNrZWQuXHJcbi8vLyAgIFRoZSByZWFzb24gaXMgdGhhdCAnVScgYW5kICdMJyBkaXJlY3RpdmUgbWlnaHQgY2hhbmdlIGl0LCBhbmQgaW4gbnVtZXJpYyxcclxuLy8vICAgZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kIHNlcGFyYXRvciBtaWdodCBiZSBjaGFuZ2VkIGFzIHdlbGwgd2hpbGUgdHlwaW5nLlxyXG4vLy8gPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZCBvciBhIGNoYXIgaWYgdmFsaWQuPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyB2YWxpZGF0ZUNoYXIoY2hhclRvVmFsaWRhdGU6IHN0cmluZywgcG9zOiBudW1iZXIpIHtcclxuICAgIGxldCBjaGFyUmV0dXJuZWQgPSBjaGFyVG9WYWxpZGF0ZTtcclxuICAgIGlmIChwb3MgPj0gdGhpcy5nZXRNYXNrU2l6ZSgpKVxyXG4gICAgICByZXR1cm4gY2hhclJldHVybmVkO1xyXG5cclxuICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBhbnkgY2hhcmFjdGVycyB3aGljaCBhcmUgZW1iZWRlZCBpbnRvIHRoZSBwaWN0dXJlXHJcbiAgICB3aGlsZSAodGhpcy5waWNJc01hc2socG9zKSlcclxuICAgICAgcG9zKys7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgIGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICBjaGFyUmV0dXJuZWQgPSBjaGFyVG9WYWxpZGF0ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlmICghVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY2hhclRvVmFsaWRhdGUpKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBQSUNJbnRlcmZhY2UuTnVtRGlyZWN0aXZlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLk51bURpcmVjdGl2ZVtpXSkge1xyXG4gICAgICAgICAgICAgIGNoYXJSZXR1cm5lZCA9IHRoaXMuaXNWYWxpZEluTnVtKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJSZXR1cm5lZDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIENoZWNrcyB3aGV0aGVyIGEgbm9uIGRpZ2l0IGNoYXJhY3RlciBpcyB2YWxpZCBpbiBhIG51bWVyaWMgbWFza1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImxldHRlcjpcIj5hIGNoYXJhY3RlciB0byBiZSBjaGVja2VkLjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gMCBpZiBub3QgdmFsaWQuIGNoYXIgaWYgdmFsaWQuIGNoYXIgbWlnaHQgYmUgZGlmZmVyZW50IHRoZW4gbGV0dGVyLjwvcmV0dXJucz5cclxuICBpc1ZhbGlkSW5OdW0obGV0dGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNoYXJSZXQgPSAnXFwwJztcclxuICAgIGxldCBkZWNpbWFsQ2hhcjogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIC8qICByZXBsYWNlICcuJyB3aXRoIGEgZGlmZmVyZW50IGNoYXIgZm9yIG51bWVyaWMgc2VwZXJhdG9yIG9ubHkgaWZcclxuICAgICogIFNwZWNpYWxNb2RpZmllZERlY2ltYWxTZXBhcmF0b3IgPSBZKi9cclxuICAgIC8vIGZvciBudW1lcmljLCBpZiAnLicgd2FzIGVudGVyZWQsIGNoYW5nZSBpdCB0byB0aGUgZW52IHNlcGVyYXRvci5cclxuICAgIC8vICM5MzE3ODQ6IElmIFNwZWNpYWxNb2RpZmllZERlY2ltYWxTZXBhcmF0b3IgPSBZIHRoZW4gcmVwbGFjZSAnLicgYnkgZGVjaW1hbCBzZXBhcmF0b3IuXHJcbiAgICBpZiAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuQ2FuUmVwbGFjZURlY2ltYWxTZXBhcmF0b3IoKSAmJiB0aGlzLmlzQXR0ck51bWVyaWMoKSlcclxuICAgICAgaWYgKGxldHRlciA9PT0gJy4nKVxyXG4gICAgICAgIGxldHRlciA9IGRlY2ltYWxDaGFyO1xyXG5cclxuICAgIHN3aXRjaCAobGV0dGVyKSB7XHJcbiAgICAgIGNhc2UgJyAnOlxyXG4gICAgICBjYXNlICctJzpcclxuICAgICAgY2FzZSAnKic6XHJcbiAgICAgIGNhc2UgJysnOlxyXG4gICAgICBjYXNlICcvJzpcclxuICAgICAgICBjaGFyUmV0ID0gbGV0dGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyB0aGUgZW52IGRlY2ltYWwgc2VwZXJhdG9yIGFuZCB0aG91c2FuZHMgc2VwZXJhdG9yIGFyZSBhbHNvIHZhbGlkXHJcbiAgICAgICAgaWYgKGxldHRlciA9PT0gZGVjaW1hbENoYXIgfHwgbGV0dGVyID09PSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKSlcclxuICAgICAgICAgIGNoYXJSZXQgPSBsZXR0ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoYXJSZXQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGxvZ2ljYWxcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyTG9naWNhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbnVtZXJpY1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJOdW1lcmljKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHBoYVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJBbHBoYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIHVuaWNvZGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyVW5pY29kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYWxwaGEgb3IgZGF0ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJBbHBoYU9yRGF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyB0aW1lIG9yIGRhdGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyRGF0ZU9yVGltZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FIHx8IHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGJsb2JcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyQmxvYigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8XHJcbiAgICAgIHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIG1hc2sgYXQgYSBnaXZlbiBwb3NpdGlvbiBpcyBudW1lcmljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNOdW1lcmljKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrIFtwb3NdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgbWFzayBpcyBhbGwgWFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0FsbFgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX21za1swXSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX1gpICYmIHRoaXMuZ2V0RGlyZWN0aXZlTGVuKDApID09PSB0aGlzLl9tYXNrU2l6ZSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpcyBtYXNrIGF0IHBvc2l0aW9uIHBvcyBpcyBzYW1lIGFzIHBhcmFtZXRlciBtYXNrUGljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrUGljXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNNYXNrUGljRXEocG9zOiBudW1iZXIsIG1hc2tQaWM6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21za1twb3NdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKG1hc2tQaWMpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGlucHV0IGNoYXIgaXMgdmFsaWQgZm9yIGxvY2FsIEFTNDAwIChzeXN0ZW0gaSkgcGljdHVyZXMuXHJcbi8vLyAgIChEQkNTIFN1cHBvcnQpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY2hhclRvVmFsaWRhdGVcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImZpcnN0Q2hhclwiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZCBvciBhIGNoYXIgaWYgdmFsaWQuPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc1ZhbGlkQ2hhcl9hczQwMChjaGFyVG9WYWxpZGF0ZTogc3RyaW5nLCBmaXJzdENoYXI6IHN0cmluZywgcG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZXQgPSB0cnVlO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSjpcclxuICAgICAgLy8gb25seSBmdWxsLXdpZHRoIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWRcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0c6XHJcbiAgICAgICAgcmV0ID0gIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1QpOiAvLyBtaXh0dXJlIG9mIGZ1bGwtd2lkdGggYW5kIGhhbGYtd2lkdGggaXMgbm90IGFsbG93ZWRcclxuICAgICAgICBpZiAoZmlyc3RDaGFyID09PSAnXFx4MDAwMCcpXHJcbiAgICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgICAgIGVsc2UgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChmaXJzdENoYXIpKVxyXG4gICAgICAgICAgcmV0ID0gVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXQgPSAhVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUyk6IC8vIG9ubHkgaGFsZi13aWR0aCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkXHJcbiAgICAgICAgcmV0ID0gVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBsZW5ndGhcclxuLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNaW5pbXVtVmFsdWVMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW5MZW5ndGggPSB0aGlzLmdldE1hc2tMZW5ndGgoKTtcclxuXHJcbiAgICAvLyB0cmF2ZXJzZSBmcm9tIHJpZ2h0IHRpbGwgYSB2YWxpZCBtYXNrIGNoYXIgaXMgZW5jb3VudGVyZWRcclxuICAgIHdoaWxlIChtaW5MZW5ndGggPiAwICYmICF0aGlzLnBpY0lzTWFzayhtaW5MZW5ndGggLSAxKSlcclxuICAgICAgbWluTGVuZ3RoLS07XHJcblxyXG4gICAgcmV0dXJuIG1pbkxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwie1BpY3R1cmU6IFwiICsgdGhpcy5fZm9ybWF0ICsgXCJ9XCI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUElDLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9QSUMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXRELE1BQU0sT0FBTyxHQUFHO0lBaURkLFlBQVksTUFBYyxFQUFFLElBQXNCLEVBQUUsT0FBZTtRQTdDM0QsWUFBTyxHQUFXLENBQUMsQ0FBQztRQUNwQixhQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsYUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLGFBQVEsR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ25ELGFBQVEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxhQUFRLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUMzQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIs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Q0FBQyxTQUFTLENBQUM7b0JBQzdDLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDOztvQkFFbEQsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDckQsTUFBTTtZQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEQsTUFBTTtZQUVSO2dCQUNFLE1BQU07U0FDVDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUtELHFCQUFxQjtRQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFHckMsT0FBTyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELFNBQVMsRUFBRSxDQUFDO1FBRWQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNc2dJbnRlcmZhY2UsIFBJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZSwgVXRpbEltZUpwbiwgVXRpbFN0ckJ5dGVNb2RlIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uRXhjZXB0aW9uLCBJbnQzMiwgTlN0cmluZywgU3RyaW5nQnVpbGRlciB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgR3VpRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9HdWlFbnZpcm9ubWVudCc7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoZSBjbGFzcyBoYW5kbGVzIHRoZSBwcm9jZXNzIG9mIGNvbnZlcnRpbmcgaW50ZXJuYWwgZGF0YSB0byBkaXNwbGF5ZWQgZGF0YVxyXG4vLy8gICBieSB1c2luZyBhIHNwZWNpZmljIGZvcm1hdC5cclxuLy8vICAgVGhlIGNsYXNzIGltcGxlbWVudHMgdGhlIFBJQyBzdHJ1Y3R1cmUgb2YgTWFnaWMsIGFuZCBhbGwgaXRzIHJlbGF0ZWQgb3BlcmF0aW9ucy5cclxuLy8vIDwvc3VtbWFyeT5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFBJQyB7XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBPcmlnaW5hbCBtZW1iZXJzIG9mIHRoZSBNYWdpYyBQSUMgc3RydWN0dXJlXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIF9tc2tMZW46IG51bWJlciA9IDA7IC8vIFRoZSBtYXNrIGxlblxyXG4gIHByaXZhdGUgX25lZ1ByZWY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX25lZ1N1ZmY6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIHByaXZhdGUgX3BpY0F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgcHJpdmF0ZSBfcG9zUHJlZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfcG9zU3VmZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgcHJpdmF0ZSBfYXV0b1NraXBfOiBib29sZWFuID0gZmFsc2U7ICAvLyBBdXRvc2tpcCA/XHJcbiAgcHJpdmF0ZSBfcGFkRmlsbDogYm9vbGVhbiA9IGZhbHNlOyAvLyBQYWQgZmlsbCA/XHJcbiAgcHJpdmF0ZSBfemVyb0ZpbGw6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIFplcm8gZmlsbCA/XHJcbiAgcHJpdmF0ZSBfY29tbWE6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRGlzcGxheSBudW1iZXJzIHdpdGggY29tbWFzID9cclxuICBwcml2YXRlIF9kZWNpbWFsRGlnaXRzOiBudW1iZXIgPSAwOyAvLyBEZWNpbWFsIGRpZ2l0c1xyXG4gIHByaXZhdGUgX2RlY1BvaW50SXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RlY2ltYWw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRGVjaW1hbHMgP1xyXG4gIHByaXZhdGUgX2VtYmVkZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW1iZWRlZCBjaGFyYWN0ZXJzID9cclxuICBwcml2YXRlIF9mb3JtYXRJZHg6IG51bWJlciA9IDA7IC8vIEN1cnJlbnQgY2hhciBwcm9jZXNzZWQgaW4gZm9ybWF0XztcclxuICBwcml2YXRlIF9mb3JtYXQ6IHN0cmluZ1tdID0gbnVsbDsgLy8gVGhlIGZvcm1hdCBwcm9jZXNzZWRcclxuICBwcml2YXRlIGhlYnJldzogYm9vbGVhbiA9IGZhbHNlOyAvLyBIZWJyZXcgP1xyXG4gIHByaXZhdGUgX2ltZU1vZGU6IG51bWJlciA9IC0xOyAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgcHJpdmF0ZSBfbGVmdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBMZWZ0IGp1c3RpZmllZCA/XHJcbiAgcHJpdmF0ZSBfbWFza0xlbmd0aDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9tYXNrQ2hhcnM6IG51bWJlciA9IDA7IC8vIE1hc2sgY2hhcnMgY291bnRcclxuICBwcml2YXRlIF9tYXNrU2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBwaWN0dXJlIGkvbyBtYXNrXHJcbiAgcHJpdmF0ZSBfbWl4ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gTWl4ZWQgbGFuZ3VhZ2UgP1xyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEFkZGVkIHZhcmlhYmxlc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBfbXNrOiBzdHJpbmdbXSA9IG51bGw7IC8vIFRoZSBtYXNrIGZvciB0aGUgc3BlY2lmaWVkIHBpY3R1cmUgZm9ybWF0XHJcbiAgcHJpdmF0ZSBfbmVlZExlbmd0aDogYm9vbGVhbiA9IGZhbHNlOyAvLyBnZXQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmdcclxuICBwcml2YXRlIF9uZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBOZWdhdGl2ZSB2YWx1ZXMgYWxsb3dlZCA/XHJcbiAgcHJpdmF0ZSBfcGFkOiBzdHJpbmcgPSAnXFwwJzsgLy8gUGFkIGNoYXJhY3RlclxyXG4gIHByaXZhdGUgX3ByZWZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2l6ZTogbnVtYmVyID0gMDsgLy8gU2l6ZSBvZiBBbHBoYSBkYXRhICB3aXRob3V0IG1hc2sgY2hhcmFjdGVyc1xyXG4gIHByaXZhdGUgX3N1ZmZMZW46IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdGVybUZsYWc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXJlIHRlcm1pbmF0b3JzIHNwZWNpZmllZCA/XHJcbiAgcHJpdmF0ZSBfdHJpbTogYm9vbGVhbiA9IGZhbHNlOyAvLyBUcmltID9cclxuICBwcml2YXRlIF93aG9sZTogbnVtYmVyID0gMDsgLy8gV2hvbGUgZGlnaXRzXHJcbiAgcHJpdmF0ZSBfemVybzogc3RyaW5nID0gJ1xcMCc7IC8vIFplcm8gY2hhcmFjdGVyXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGRzIGEgUElDIGNsYXNzIGZyb20gcGljdHVyZSBmb3JtYXQgYW5kIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj5UaGUgcGljdHVyZSBmb3JtYXQgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImF0dHJcIj5UaGUgZGF0YSBhdHRyaWJ1dGUgKE4vQS9EL1QvLi4uKTwvcGFyYW0+XHJcbiAgY29uc3RydWN0b3IocGljU3RyOiBzdHJpbmcsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fFxyXG4gICAgICB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGlmIChwaWNTdHIudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcIlBJQy5QSUMgdGhlIHBpY3R1cmUgb2YgQkxPQiBtdXN0IGJlIGVtcHR5IHN0cmluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShwaWNTdHIpO1xyXG4gICAgdGhpcy5fZm9ybWF0SWR4ID0gMDtcclxuXHJcbiAgICB0aGlzLl9tc2tMZW4gPSB0aGlzLmdldE1hc2tMZW4oY29tcElkeCk7XHJcbiAgICB0aGlzLnByc19hbGwoY29tcElkeCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgaW5mb3JtYXRpb24gbWV0aG9kc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc0hlYnJldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYnJldztcclxuICB9XHJcblxyXG4gIGlzTWl4ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZWQ7XHJcbiAgfVxyXG5cclxuICBlbWJlZGVkQ2hhcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW1iZWRlZDtcclxuICB9XHJcblxyXG4gIGlzTmVnYXRpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnYXRpdmU7XHJcbiAgfVxyXG5cclxuICB3aXRoQ29tYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21tYTtcclxuICB9XHJcblxyXG4gIGlzTGVmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcGFkRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWRGaWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFkO1xyXG4gIH1cclxuXHJcbiAgemVyb0ZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5femVyb0ZpbGw7XHJcbiAgfVxyXG5cclxuICBnZXRaZXJvUGFkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5femVybztcclxuICB9XHJcblxyXG4gIGlzVHJpbWVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyaW07XHJcbiAgfVxyXG5cclxuICBhdXRvU2tpcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvU2tpcF87XHJcbiAgfVxyXG5cclxuICB3aXRoRGVjaW1hbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNpbWFsO1xyXG4gIH1cclxuXHJcbiAgd2l0aFRlcm0oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybUZsYWc7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrQ2hhcnMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXNrQ2hhcnM7XHJcbiAgfVxyXG5cclxuICBnZXRXaG9sZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl93aG9sZTtcclxuICB9XHJcblxyXG4gIGdldERlYygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxEaWdpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcblxyXG4gIGdldE1hc2tTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza1NpemU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4gIGRlY0luRmlyc3RQb3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zUHJlZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wb3NQcmVmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQb3NTdWZmXygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Bvc1N1ZmYuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldE5lZ1ByZWZfKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVnUHJlZi5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmVnU3VmZl8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWdTdWZmLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXRNYXNrKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnModGhpcy5fbXNrKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHRoaXMuX2Zvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBnZXRBdHRyKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0F0dHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0QXR0cihzZXQ6U3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGljQXR0ciA9PSBzZXQ7XHJcbiAgfVxyXG5cclxuICBnZXRJbWVNb2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1lTW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSB0aGUgcGljdHVyZSBmb3JtYXQgYnkgdGhlIGF0dHJpYnV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwcnNfYWxsKGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9uZWVkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX21zayA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX21za0xlbik7XHJcbiAgICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fbXNrLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgICAgdGhpcy5fbXNrW19haV0gPSAnXFwwJztcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5fcGljQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHRoaXMuYWxwaGFfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICB0aGlzLm51bV9wcnMoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZGF0ZV9wcnMoY29tcElkeCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICB0aGlzLnRpbWVfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmJvb2xfcHJzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgLy8gZG8gbm90aGluZ1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYW4gYWxwaGEgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYWxwaGFfcHJzKCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBkcnY6IG51bWJlcjtcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnIyc6XHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgY2FzZSAnVSc6XHJcbiAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJyMnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ1UnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfVTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ1gnOlxyXG4gICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSAvLyBKUE46IERCQ1Mgc3VwcG9ydFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBKUE46IElNRSBzdXBwb3J0XHJcbiAgICAgICAgICAgIGxldCB1c2VJbWVKcG46IGJvb2xlYW4gPSBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyQ2hyID09PSAnSycgJiYgdXNlSW1lSnBuKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGljX2thbmppKCkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldExvY2FsQXM0MDBTZXQoKSkge1xyXG4gICAgICAgICAgICAgIGRydiA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChjdXJyQ2hyID09PSAnSicpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0o7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyckNociA9PT0gJ1QnKVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19UO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJDaHIgPT09ICdHJylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfRztcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hyID09PSAnUycpXHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1M7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnRcclxuICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBJTUUgbW9kZSBmcm9tIEFTLzQwMCBwaWN0dXJlcyBpZiBLYW5qaSBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ltZU1vZGUgPT09IC0xICYmIHVzZUltZUpwbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX0ogfHwgZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX0cpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1lTW9kZSA9IFV0aWxJbWVKcG4uSU1FX1pFTl9ISVJBR0FOQV9ST01BTjtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHJ2ID09PSBQSUNJbnRlcmZhY2UuUElDX1MpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1lTW9kZSA9IFV0aWxJbWVKcG4uSU1FX0ZPUkNFX09GRjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikpIHtcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIGNvdW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbiBjYXNlIHRoYXQgbm8gcGljdHVyZSBpcyBzcGVjaWZpZWQsIGFzc3VtZSBhbGwgaXMgWHNcclxuICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA9PT0gMClcclxuICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCB0aGlzLl9tc2tMZW4pO1xyXG5cclxuICAgIC8vIENvbXB1dGUgbWFzayBzaXplIHdpdGhvdXQgdGhlIG1hc2sgY2hhcmFjdGVyc1xyXG4gICAgdGhpcy5fc2l6ZSA9IHRoaXMuX21hc2tTaXplO1xyXG4gICAgaWYgKCF0aGlzLl9lbWJlZGVkKVxyXG4gICAgICB0aGlzLl9zaXplIC09IHRoaXMuX21hc2tDaGFycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQYXJzZSBhIG51bWVyaWMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgbnVtX3BycygpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuICAgIGxldCBjb3VudDogbnVtYmVyO1xyXG4gICAgbGV0IHRtcDogbnVtYmVyO1xyXG4gICAgbGV0IHRtcHM6IG51bWJlcjtcclxuICAgIGxldCB0bXBfYzogbnVtYmVyID0gMDtcclxuICAgIGxldCBmaXJzdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMuX3plcm8gPSAnICcvKicgJyovO1xyXG4gICAgdGhpcy5fcGFkID0gJyAnLyonICcqLztcclxuICAgIHRoaXMuX25lZ1ByZWYuQXBwZW5kKCctJykvKictJyovO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9mb3JtYXQubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtpXSA9PT0gJysnIC8qJysnKi8gfHwgdGhpcy5fZm9ybWF0W2ldID09PSAnLScvKictJyovKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtpXSA9PT0gJ1xcXFwnIC8qJ1xcJyovIHx8IHRoaXMuX2Zvcm1hdFtpXSA9PT0gJ1AnLyonUCcqLykge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fZm9ybWF0W2ldID09PSAnQycvKidDJyovKSB7XHJcbiAgICAgICAgdGhpcy5fY29tbWEgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdOJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fbmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0MnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9jb21tYSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnTCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2xlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9wYWRGaWxsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9wYWQgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4KytdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnLic6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGlmICh0aGlzLl9uZWVkTGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9tYXNrTGVuZ3RoKys7XHJcbiAgICAgICAgICB0aGlzLl9kZWNpbWFsID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLl9tYXNrU2l6ZSA8IHRoaXMuX21za0xlbilcclxuICAgICAgICAgICAgdGhpcy5fbXNrW3RoaXMuX21hc2tTaXplXSA9ICBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgLy8gMjYvMTEvOTcgU2hheSBaLiBCdWcgIzc3MDUyNiAtIE1hcmsgdGhhdFxyXG4gICAgICAgICAgLy8gRGVjaW1hbCBQb2ludCBpcyBpbiBGaXJzdCBQb3NpdGlvbjpcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICBpZiAodGhpcy5fbWFza1NpemUgPT09IDApXHJcbiAgICAgICAgICAgIHRoaXMuX2RlY1BvaW50SXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9tYXNrU2l6ZSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJysnOlxyXG4gICAgICAgIGNhc2UgJy0nOlxyXG4gICAgICAgICAgdGhpcy5waWtfc2lnbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY3VyckNocikgfHwgY3VyckNociA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHRtcCA9IHRoaXMuX2Zvcm1hdElkeDtcclxuICAgICAgICAgICAgaWYgKGN1cnJDaHIgPT09ICcjJylcclxuICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgICAgY291bnQgPSB0aGlzLnBpa19jb3VudCgpO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIGNvdW50KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdFt0bXBdID09PSAnIycpIHtcclxuICAgICAgICAgICAgICBpZiAoY291bnQgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRtcHMgPSB0aGlzLl9mb3JtYXRJZHg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB0bXBfYyA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ID0gdG1wcztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGZpcnN0ICYmICh0bXBfYyA+IDAgfHwgY291bnQgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMSlcclxuICAgICAgICAgICAgICAgICAgdG1wX2MgPSBjb3VudDtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCBjb21tYXMgYmVmb3IgcGxhY2VzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tbWEgJiYgIXRoaXMuX2RlY2ltYWwpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgTWF0aC5mbG9vcigodG1wX2MgLSAxKSAvIDMpKTtcclxuICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFkZCBjb21tYXMgYmVmb3IgcGxhY2VzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hICYmICF0aGlzLl9kZWNpbWFsKVxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgTWF0aC5mbG9vcigoY291bnQgLSAxKSAvIDMpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWNpbWFsKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2RlY2ltYWxEaWdpdHMgKz0gY291bnQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLl93aG9sZSArPSBjb3VudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbi8vIFN0b3JlIHRoZSBtYXhpbWFsIGxlbmd0aCBvZiBzaWduIHByZWZpeCBhbmQgc3VmZml4IGJldHdlZW4gbmVnYXRpdmUgYW5kIHBvc2l0aXZlXHJcbiAgICB0aGlzLl9wcmVmTGVuID0gdGhpcy5fcG9zUHJlZi5MZW5ndGg7XHJcbiAgICB0aGlzLl9zdWZmTGVuID0gdGhpcy5fcG9zU3VmZi5MZW5ndGg7XHJcbiAgICBpZiAodGhpcy5fbmVnYXRpdmUpIHtcclxuICAgICAgaWYgKHRoaXMuX25lZ1ByZWYuTGVuZ3RoID4gdGhpcy5fcHJlZkxlbikge1xyXG4gICAgICAgIHRoaXMuX3ByZWZMZW4gPSB0aGlzLl9uZWdQcmVmLkxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5fbmVnU3VmZi5MZW5ndGggPiB0aGlzLl9zdWZmTGVuKSB7XHJcbiAgICAgICAgdGhpcy5fc3VmZkxlbiA9IHRoaXMuX25lZ1N1ZmYuTGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGEgZm9ybWF0IHdpdGhvdXQgZGlnaXRzXHJcbiAgICBpZiAodGhpcy5fd2hvbGUgPT09IDAgJiYgdGhpcy5fZGVjaW1hbERpZ2l0cyA9PT0gMCkge1xyXG4gICAgICBjb3VudCA9IFBJQ0ludGVyZmFjZS5QSUNfTUFYX01TS19MRU4gLSB0aGlzLl9wcmVmTGVuIC0gdGhpcy5fc3VmZkxlbjtcclxuICAgICAgaWYgKHRoaXMuX21hc2tTaXplIDwgY291bnQpIHtcclxuICAgICAgICB0aGlzLl93aG9sZSA9IGNvdW50IC0gdGhpcy5fbWFza1NpemU7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbW1hKVxyXG4gICAgICAgICAgdGhpcy5fd2hvbGUgLT0gTWF0aC5mbG9vcih0aGlzLl93aG9sZSAvIDQpO1xyXG4gICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfTiwgdGhpcy5fd2hvbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIGV4dHJhIGZvciBwcmVmL3N1ZmYgYW5kIGNvbW1hc1xyXG4gICAgaWYgKHRoaXMuX2NvbW1hKSB7XHJcbiAgICAgIGNvdW50ID0gTWF0aC5mbG9vcigodGhpcy5fd2hvbGUgLSAxKSAvIDMpO1xyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX04sIGNvdW50KTtcclxuICAgICAgLy8gcmVtb3ZlIGNvbW1hcyBwbGFjZXNcclxuICAgICAgdGhpcy5fbWFza1NpemUgLT0gY291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaSA9IHRoaXMuX3ByZWZMZW47XHJcbiAgICBpZiAoaSA+IDAgJiYgdGhpcy5fbXNrICE9IG51bGwpIHtcclxuICAgICAgaWYgKCh0aGlzLl9tYXNrU2l6ZSArIGkpIDw9IHRoaXMuX21za0xlbikge1xyXG4gICAgICAgIGZvciAoaiA9IHRoaXMuX21hc2tTaXplIC0gMTtcclxuICAgICAgICAgICAgIGogPj0gMDtcclxuICAgICAgICAgICAgIGotLSlcclxuICAgICAgICAgIHRoaXMuX21za1tqICsgaV0gPSB0aGlzLl9tc2tbal07XHJcbiAgICAgICAgLy8gbWVtc2V0ICh0aGlzLT5tc2ssIFBJQ19OLCBpKTsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICAgIGZvciAoaiA9IDA7XHJcbiAgICAgICAgICAgICBqIDwgaTtcclxuICAgICAgICAgICAgIGorKylcclxuICAgICAgICAgIGlmICh0aGlzLl9tc2sgIT0gbnVsbCAmJiBqIDwgdGhpcy5fbXNrLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5fbXNrW2pdID0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX04pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX21hc2tTaXplICs9IGk7XHJcbiAgICB9XHJcbiAgICBpID0gdGhpcy5fc3VmZkxlbjtcclxuICAgIGlmIChpID4gMCAmJiB0aGlzLl9tc2sgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5fbWFza1NpemUgKyB0aGlzLl9zdWZmTGVuIDw9IHRoaXMuX21za0xlbilcclxuICAgICAgLy8gbWVtc2V0ICgmTXNrW3RoaXMtPnBpYy0+bWFza19zaXplXSwgUElDX04sIHRoaXMtPnBpYy0+c3VmZl9sZW4pOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgICAgZm9yIChqID0gMDtcclxuICAgICAgICAgICAgIGogPCB0aGlzLl9zdWZmTGVuO1xyXG4gICAgICAgICAgICAgaisrKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW3RoaXMuX21hc2tTaXplICsgal0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgICAgIHRoaXMuX21hc2tTaXplICs9IGk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0VW5mb3JtYXR0ZWROdW1lcmljUGljIGZyb20gY3VycmVudCBwaWNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMoKTogUElDIHtcclxuICAgIGxldCBwaWNTdHIgPSAnJztcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSlcclxuICAgICAgcGljU3RyID0gdGhpcy5pc05lZ2F0aXZlKCkgPyAnTic6ICcnO1xyXG5cclxuICAgIHBpY1N0ciArPSB0aGlzLmdldFdob2xlcygpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0RGVjKCkgPiAwKVxyXG4gICAgICBwaWNTdHIgKz0gICcuJyArIHRoaXMuZ2V0RGVjKCkudG9TdHJpbmcoKTtcclxuICAgIGlmICh0aGlzLl96ZXJvRmlsbClcclxuICAgICAgcGljU3RyICs9ICdaJztcclxuICAgIGxldCAgbmV3UGljID0gbmV3IFBJQyAocGljU3RyLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIDApO1xyXG5cclxuICAgIHJldHVybiBuZXdQaWM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUGFyc2UgYSBkYXRlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfcHJzKGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIE9yaWdpbmFsIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IG9jcjogbnVtYmVyO1xyXG4gICAgbGV0IGNvdW50OiBudW1iZXI7XHJcbiAgICBsZXQgZHJ2OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IFN3aXRjaEFuZEV4cGFuZERhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBTV0V4cGFuZERhdGVDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEFkZGVkIHZhcnNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgY3VyckNocjogc3RyaW5nO1xyXG4gICAgbGV0IGlzSnBuRXJhWWVhcjogYm9vbGVhbiA9IGZhbHNlOyAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICB0aGlzLl96ZXJvID0gJyAnO1xyXG4gICAgb2NyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mb3JtYXRbMF0gPT09ICdcXDAnKVxyXG4gICAgICB0aGlzLl9mb3JtYXQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFBJQy5nZXREZWZhdWx0RGF0ZU1hc2soR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpKTtcclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuX2Zvcm1hdC5sZW5ndGg7IGorKylcclxuICAgICAgaWYgKHRoaXMuX2Zvcm1hdFtqXSA9PT0gJ0gnKVxyXG4gICAgICAgIHRoaXMuc2V0SGVicmV3KCk7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGgpIHtcclxuICAgICAgY3VyckNociA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnVCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX3RyaW0gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvU2tpcF8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgaWYgKHRoaXMuaGVicmV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX0hMLCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1knOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBpID0gY291bnQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ZWVlZO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZHJ2ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGRydiA9IDA7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDIpXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPiAyKSB7XHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1NO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAxMClcclxuICAgICAgICAgICAgICBkcnYgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRydiAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgY291bnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnRCc6XHJcbiAgICAgICAgICBjb3VudCA9IHRoaXMucGlrX2R1cCgpO1xyXG4gICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpIHtcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfREQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVicmV3KVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19EREQ7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19IREQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmhlYnJldylcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfRERERDtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkcnYgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBjb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcjJzpcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICBpZiAoY291bnQgPT09IDIpIHtcclxuICAgICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgICAgb2NyKys7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdFJzpcclxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChvY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfTU1EO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChvY3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NRDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0REO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdKJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9jcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghU1dFeHBhbmREYXRlQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmb3JtYXRfIGNvbnRhaW5zIFwiIyMjI1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN3aXRjaEFuZEV4cGFuZERhdGUgPSBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9mb3JtYXQpLmluZGV4T2YoXCIjIyMjXCIpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNXRXhwYW5kRGF0ZUNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFN3aXRjaEFuZEV4cGFuZERhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWVlZWSwgNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NTUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19ERDtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRydiAhPT0gMClcclxuICAgICAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIDIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPT09IDQpIHtcclxuICAgICAgICAgICAgZHJ2ID0gMDtcclxuICAgICAgICAgICAgb2NyKys7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdFJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAob2NyID09PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfWVlZWTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnSic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKG9jciA9PT0gMSlcclxuICAgICAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1lZWVk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghU1dFeHBhbmREYXRlQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZm9ybWF0XyBjb250YWlucyBcIiMjIyNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQW5kRXhwYW5kRGF0ZSA9ICBOU3RyaW5nLkZyb21DaGFycyh0aGlzLl9mb3JtYXQpLmluZGV4T2YoXCIjIyMjXCIpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICBTV0V4cGFuZERhdGVDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFN3aXRjaEFuZEV4cGFuZERhdGUgJiYgb2NyID09PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19ERCwgMik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkcnYgIT09IDApXHJcbiAgICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCA0KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJ1cnOlxyXG4gICAgICAgICAgY291bnQgPSB0aGlzLnBpa19kdXAoKTtcclxuICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgIGlmIChjb3VudCA9PT0gMSlcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19XO1xyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5oZWJyZXcpXHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gNSlcclxuICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1dXVztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgZWxzZSBpZiAoY291bnQgPiAyICYmIGNvdW50IDw9IDEwKVxyXG4gICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX1dXVztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChkcnYsIGkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJy8nOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnBpa19kcnZfZmlsbChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREYXRlKCkuY2hhckNvZGVBdCgwKSwgMSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUyc6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgIGkgPSBjb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMiAmJiBjb3VudCAhPT0gNCAmJiBjb3VudCAhPT0gNilcclxuICAgICAgICAgICAgICBpID0gMDtcclxuXHJcbiAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfQkI7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCArPSBjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnSic6IC8vIEpQTjogSmFwYW5lc2UgZGF0ZSBwaWN0dXJlIHN1cHBvcnRcclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfZHVwKCk7XHJcbiAgICAgICAgICAgIGkgPSBjb3VudDtcclxuICAgICAgICAgICAgaXNKcG5FcmFZZWFyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY291bnQpIHtcclxuICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZMjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX0pZNDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpc0pwbkVyYVllYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgaSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX25lZWRMZW5ndGggJiYgaXNKcG5FcmFZZWFyKVxyXG4vLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICB7XHJcbiAgICAgIGZvciAoaSA9IDA7XHJcbiAgICAgICAgICAgaSA8IHRoaXMuX21zay5sZW5ndGg7XHJcbiAgICAgICAgICAgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21za1tpXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX1lZKVxyXG4gICAgICAgICAgdGhpcy5fbXNrW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSggUElDSW50ZXJmYWNlLlBJQ19ZSik7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fbXNrW2ldLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWVlZWSlcclxuICAgICAgICAgIHRoaXMuX21za1tpXSA9ICdZJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSB0aW1lX3BycygpOiB2b2lkIHtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGRydjogbnVtYmVyO1xyXG4gICAgbGV0IE5vRm9ybWF0OiBzdHJpbmc7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQWRkZWQgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy5femVybyA9ICcgJztcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVXNlIGEgZGVmYXVsdCBmb3JtYXQsIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdC5sZW5ndGggPT09IDAgfHwgdGhpcy5fZm9ybWF0WzBdLmNoYXJDb2RlQXQoMCkgPT09IDApIHtcclxuICAgICAgTm9Gb3JtYXQgPSBcIkhIOk1NOlNTXCI7XHJcbiAgICAgIGlmICh0aGlzLl9tc2tMZW4gPCA4KVxyXG4gICAgICAgIE5vRm9ybWF0ID0gTm9Gb3JtYXQuc3Vic3RyKDAsIHRoaXMuX21za0xlbik7IC8vIE5vRm9ybWF0W3RoaXMtPm1za19sZW5dID0gMDsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICB0aGlzLl9mb3JtYXQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KE5vRm9ybWF0KTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcblxyXG4gICAgICBsZXQgbWFza0xlbmd0aDogbnVtYmVyO1xyXG4gICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgIG1hc2tMZW5ndGggPSAyO1xyXG4gICAgICAgICAgLyogd2UgcGFyc2UgJ0gvTS9TJyBvbmx5IGlmIGl0IGhhcyBvbmUgc2ltaWxhciBjaGFyYWN0ZXIgYWZ0ZXIgaXQgKGkuZS4gJ0hIJy8nTU0nLydTUycpICovXHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMSA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAxXSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJDaHIpIHtcclxuICAgICAgICAgICAgICBjYXNlICdIJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfSEg7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSAnTSc6XHJcbiAgICAgICAgICAgICAgICBkcnYgPSBQSUNJbnRlcmZhY2UuUElDX01NVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5QSUNfU1M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGRydiA9IFBJQ0ludGVyZmFjZS5OVUxMX0NIQVI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mb3JtYXRJZHggKz0gbWFza0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoZHJ2LCBtYXNrTGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5waWtfbWFzaygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ20nOlxyXG4gICAgICAgICAgbWFza0xlbmd0aCA9IDM7XHJcbiAgICAgICAgICAvKiB3ZSBwYXJzZSAnbScgb25seSBpZiBpdCBoYXMgMiBzaW1pbGFyIGNoYXJhY3RlcnMgYWZ0ZXIgaXQgKGkuZS4gJ21tbScpICovXHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMiA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiZcclxuICAgICAgICAgICAgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gJiZcclxuICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0gPT09IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHggKyAyXSkpIHtcclxuICAgICAgICAgICAgZHJ2ID0gUElDSW50ZXJmYWNlLlBJQ19NUztcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IG1hc2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKGRydiwgbWFza0xlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICc6JzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGltZSgpLmNoYXJDb2RlQXQoMCksIDEpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgJ1onOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLl96ZXJvRmlsbCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5femVybyA9IHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHgrK107XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnQSc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHRoaXMuX2F1dG9Ta2lwXyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAnUCc6XHJcbiAgICAgICAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeCArIDFdID09PSAnTScpXHJcbiAgICAgICAgICAvLyBjaGFuZ2VkIGZyb20gZm9ybWF0X1sxXSAtPiBmb3JtYXRfW2Zvcm1hdElkeF8rMV1cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fZm9ybWF0SWR4ICs9IDI7XHJcbiAgICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfUE0sIDIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnBpa19tYXNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIFBpY3R1cmUgZm9yIHRoZSB2YXJpYWJsZSBvZiB0aGUgJ3R5cGUnIHdpdGggJ3ZhbHVlJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVcIj5pcyBuZWVkZWQgdG8gYmUgZXZhbHVhdGVkIHdpdGggdGhlIHBpY3R1cmU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gUElDdHVyZSBvZiB0aGUgbmVlZGVkICd0eXBlJzwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIGJ1aWxkUGljdHVyZSh0eXBlOiBTdG9yYWdlQXR0cmlidXRlLCB2YWw6IHN0cmluZywgY29tcElkeDogbnVtYmVyLCB1c2VEZWNpbWFsOiBib29sZWFuKTogUElDIHtcclxuICAgIGxldCBwaWM6IFBJQyA9IG51bGw7XHJcbiAgICBsZXQgbWFzazogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKDEwKTtcclxuICAgIGxldCBkZWNpbWFsU2VwYXJhdG9yOiBzdHJpbmc7XHJcbiAgICBsZXQgdGhvdXNhbmRzOiBzdHJpbmc7XHJcbiAgICBsZXQgY3VyckNoYXI6IHN0cmluZztcclxuICAgIGxldCBjb3VudGVyOiBudW1iZXI7XHJcbiAgICBsZXQgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZXQgYmVmb3JlRGVjOiBudW1iZXI7XHJcbiAgICBsZXQgYWZ0ZXJEZWM6IG51bWJlcjtcclxuICAgIGxldCBkZWNpbWFsRGVsaW1Gb3VuZDogYm9vbGVhbjtcclxuICAgIGxldCBpc1Rob3VzYW5kc0RlbGltOiBib29sZWFuO1xyXG4gICAgbGV0IGlzTmVnYXRpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGRlY2ltYWxTZXBhcmF0b3IgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcbiAgICAgICAgdGhvdXNhbmRzID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCk7XHJcbiAgICAgICAgYmVmb3JlRGVjID0gYWZ0ZXJEZWMgPSAwO1xyXG4gICAgICAgIGRlY2ltYWxEZWxpbUZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgaXNUaG91c2FuZHNEZWxpbSA9IGZhbHNlO1xyXG4gICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgYmVmb3JlRGVjID0gYWZ0ZXJEZWMgPSAxO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGVuZ3RoID0gdmFsLmxlbmd0aDtcclxuICAgICAgICAgIGNvdW50ZXIgPSAwO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1cnJDaGFyID0gdmFsW2NvdW50ZXJdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGN1cnJDaGFyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnKyc6XHJcbiAgICAgICAgICAgICAgY2FzZSAnLSc6XHJcbiAgICAgICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmICh1c2VEZWNpbWFsICYmIGN1cnJDaGFyID09PSBkZWNpbWFsU2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgICBkZWNpbWFsRGVsaW1Gb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyQ2hhciA9PT0gdGhvdXNhbmRzKVxyXG4gICAgICAgICAgICAgICAgICBpc1Rob3VzYW5kc0RlbGltID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2ltYWxEZWxpbUZvdW5kKVxyXG4gICAgICAgICAgICAgICAgICBhZnRlckRlYysrO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICBiZWZvcmVEZWMrKztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgIH0gLy8gZW5kIG9mIHdoaWxlIGZvciBsb29raW5nIGluIHRoZSB2YWx1ZVxyXG5cclxuICAgICAgICAgIG1hc2suQXBwZW5kKFwiXCIgKyBiZWZvcmVEZWMgKyBkZWNpbWFsU2VwYXJhdG9yICsgYWZ0ZXJEZWMpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnYXRpdmUpXHJcbiAgICAgICAgICAgIG1hc2suQXBwZW5kKCdOJyk7XHJcbiAgICAgICAgICBpZiAoaXNUaG91c2FuZHNEZWxpbSlcclxuICAgICAgICAgICAgbWFzay5BcHBlbmQoJ0MnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgbWFzay5BcHBlbmQodGhpcy5nZXREZWZhdWx0RGF0ZU1hc2soR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBtYXNrLkFwcGVuZChcIkhIXCIgKyBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkgKyBcIk1NXCIgKyBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaW1lKCkgKyBcIlNTXCIpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiRXZlbnQuYnVpbGRQaWN0dXJlKCkgdGhlcmUgaXMgbm8gUElDVFVSRSBidWlsZGluZyBmb3IgdHlwZSA6XCIgKyB0eXBlICtcclxuICAgICAgICAgIFwiIGFuZCB2YWx1ZSA6XCIgKyB2YWwpO1xyXG4gICAgICAgIHJldHVybiBwaWM7IC8vIG51bGwsIHRoZSBQSUMgZGlkbid0IGJ1aWxkXHJcbiAgICB9XHJcblxyXG4gICAgcGljID0gbmV3IFBJQyhtYXNrLlRvU3RyaW5nKCksIHR5cGUsIGNvbXBJZHgpO1xyXG4gICAgcmV0dXJuIHBpYztcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHNldCBIZWJyZXcgdG8gdHJ1ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEhlYnJldygpOiB2b2lkIHtcclxuICAgIC8vIERlZmVjdCAxMTYyNTguIFNldCBoZWJyZXcgZmxhZyBvbmx5IGZvciBoZWJyZXcgbWdjb25zdC5cclxuICAgIGlmIChHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5MYW5ndWFnZSA9PT0gJ0gnKVxyXG4gICAgICB0aGlzLmhlYnJldyA9IHRydWU7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBnZXQgZGVmYXVsdCBtYXNrIGZvciBEYXRlIHR5cGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhTW9kZVwiPi0gZGF0YSBtb2RlIChKLFMsQixFLEEpPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiBtYXNrIG9mIGRlZmF1bHQgZGF0ZTwvcmV0dXJucz5cclxuICBwcm90ZWN0ZWQgc3RhdGljIGdldERlZmF1bHREYXRlTWFzayhkYXRhTW9kZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZnJtdDogc3RyaW5nO1xyXG4gICAgc3dpdGNoIChkYXRhTW9kZSkge1xyXG4gICAgICBjYXNlICdKJzpcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgZnJtdCA9IFwiIyMjIy8jIy8jI1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnQic6XHJcbiAgICAgIGNhc2UgJ0UnOlxyXG4gICAgICBjYXNlICdBJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBmcm10ID0gXCIjIy8jIy8jIyMjXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJtdDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIGEgbnVtZXJpYyBwaWN0dXJlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYm9vbF9wcnMoKTogdm9pZCB7XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBjb3VudDogbnVtYmVyOyAvLyBDb3VudCBvZiBkaXJldnRpdmUgb3IgbWFzayBjaGFyYWN0ZXJcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBBZGRlZCB2YXJzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICB3aGlsZSAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHN3aXRjaCAoY3VyckNocikge1xyXG4gICAgICAgIGNhc2UgJ0gnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICB0aGlzLnNldEhlYnJldygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdBJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgdGhpcy5fYXV0b1NraXBfID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAnWCc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgIHRoaXMucGlrX2Rydl9maWxsKFBJQ0ludGVyZmFjZS5QSUNfWCwgY291bnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KGN1cnJDaHIpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5waWtfY291bnQoKTtcclxuICAgICAgICAgICAgdGhpcy5waWtfZHJ2X2ZpbGwoUElDSW50ZXJmYWNlLlBJQ19YLCBjb3VudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucGlrX21hc2soKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEZpbGwgaW4gYW4gZW1wdHkgZm9ybWF0XHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKHRoaXMuX21hc2tTaXplID09PSAwKVxyXG4gICAgICB0aGlzLnBpa19kcnZfZmlsbChQSUNJbnRlcmZhY2UuUElDX1gsIHRoaXMuX21za0xlbik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQYXJzZSB0aGUgc2lnbiBwcmVmaXgvc3VmZml4IGZyb20gdGhlIGZvcm1hdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX3NpZ24oKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zU2lnbjogYm9vbGVhbjtcclxuICAgIGxldCBzaWduU3RyOiBTdHJpbmdCdWlsZGVyO1xyXG4gICAgbGV0IGN1cnJDaHI6IHN0cmluZztcclxuXHJcbiAgICBwb3NTaWduID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICcrJ1xyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG5cclxuICAgIGlmIChwb3NTaWduKVxyXG4gICAgICBzaWduU3RyID0gdGhpcy5fcG9zUHJlZjtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9uZWdQcmVmLlJlbW92ZSgwLCB0aGlzLl9uZWdQcmVmLkxlbmd0aCk7XHJcbiAgICAgIHNpZ25TdHIgPSB0aGlzLl9uZWdQcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlICh0aGlzLl9mb3JtYXRJZHggPCB0aGlzLl9mb3JtYXQubGVuZ3RoKSB7XHJcbiAgICAgIGN1cnJDaHIgPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnOyc6XHJcbiAgICAgICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcblxyXG4gICAgICAgIGNhc2UgJywnOlxyXG4gICAgICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICAgICAgICBpZiAocG9zU2lnbilcclxuICAgICAgICAgICAgc2lnblN0ciA9IHRoaXMuX3Bvc1N1ZmY7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHNpZ25TdHIgPSB0aGlzLl9uZWdTdWZmO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlICdcXFxcJzpcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdElkeCA+PSB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBzaWduU3RyLkFwcGVuZChjdXJyQ2hyKTtcclxuICAgICAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFBhcnNlIGEgbnVtYmVyIHdoaWNoIGlzIGEgY291bnRlciBvZiBzcGVjaWZpYyBjaGFyIGluIHRoZSBmb3JtYXRcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpa19jb3VudCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHNwZWNpYWxWYWxOZXdQb2xpY3k6IGJvb2xlYW4gPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk7XHJcbiAgICBsZXQgdmFsOiBudW1iZXI7XHJcbiAgICBsZXQgaXNEaWdpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHZhbCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuX2Zvcm1hdElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0pKSB7XHJcbiAgICAgIHZhbCAqPSAxMDtcclxuICAgICAgaXNEaWdpdCA9IHRydWU7XHJcbiAgICAgIHZhbCArPSB0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4XS5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwgPiAzMjAwMClcclxuICAgICAgdmFsID0gMzIwMDA7XHJcbiAgICBlbHNlIGlmICh2YWwgPD0gMCkge1xyXG4gICAgICAvLyBJZiAgZmxhZyBTcGVjaWFsVmFsTmV3UG9saWN5IGlzIHNldCwgdGhlbiBwaWN0dXJlIGhhdmluZyB3aG9sZS9kZWMgYXMgMCBlLmcuICczLjAnIHNob3VsZCByZXR1cm4gYXMgMC5cclxuICAgICAgaWYgKHNwZWNpYWxWYWxOZXdQb2xpY3kgJiYgaXNEaWdpdCAmJiB2YWwgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwgPiBJbnQzMi5NYXhWYWx1ZSlcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5TVFJfRVJSX01BWF9WQVJfU0laRSkpO1xyXG5cclxuICAgIHJldHVybiAodmFsKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEZpbGwgYSBzcGVjaWZpYyBtYXNrIGNoYXJhY3RlciBpbiB0aGUgbWFzayBzdHJpbmdcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJkcnZcIj4gICAgVGhlIG1hc2sgY2hhcmFjdGVyIHRvIGZpbGw8L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImNvdW50XCI+ICBOdW1iZXIgb2YgdGltZXMgZm9yIHRoZSBtYXNrIGNoYXJhY3RlciB0byBhcGVhcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBwaWtfZHJ2X2ZpbGwoZHJ2OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgTXNrWjogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLl9uZWVkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX21hc2tMZW5ndGggKz0gY291bnQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBNc2taID0gdGhpcy5fbWFza1NpemU7XHJcbiAgICB0aGlzLl9tYXNrU2l6ZSArPSBjb3VudDtcclxuXHJcbiAgICBpZiAoTXNrWiArIGNvdW50ID4gdGhpcy5fbXNrTGVuKVxyXG4gICAgICBjb3VudCA9IHRoaXMuX21za0xlbiAtIE1za1o7XHJcblxyXG4gICAgaWYgKGNvdW50ID4gMCkge1xyXG4gICAgICAvLyBtZW1zZXQgKCZ0aGlzLT5tc2tbdGhpcy5Nc2taXSwgKFVjaGFyKSBkcnYsIGNvdW50KTsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICBmb3IgKGkgPSAwO1xyXG4gICAgICAgICAgIGkgPCBjb3VudDtcclxuICAgICAgICAgICBpKyspXHJcbiAgICAgICAgdGhpcy5fbXNrW01za1ogKyBpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZHJ2KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUGFyc2UgYSBnZW5lcmFsIG1hc2sgY2hhcmFjdGVyXHJcbi8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBwaWtfbWFzaygpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyQ2hyOiBzdHJpbmc7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF0gPT09ICdcXFxcJylcclxuICAgICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcbiAgICBpZiAodGhpcy5fZm9ybWF0SWR4IDwgdGhpcy5fZm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICBjdXJyQ2hyID0gdGhpcy5fZm9ybWF0W3RoaXMuX2Zvcm1hdElkeF07XHJcbiAgICAgIHRoaXMuX2Zvcm1hdElkeCsrO1xyXG4gICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgIHRoaXMucGlrX2Rydl9maWxsKGN1cnJDaHIuY2hhckNvZGVBdCgwKSwgY291bnQpO1xyXG4gICAgICB0aGlzLl9tYXNrQ2hhcnMgKz0gY291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBDb3VudCBjb250aW51ZXMgb2NjdXJyZW5jZXMgb2YgYSBtYXNrIGNoYXJhY3RlciBpbiB0aGUgZm9ybWF0IHN0cmluZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgcGlrX2R1cCgpOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBkdXBDb3VudCA9IDE7XHJcblxyXG4gICAgbGV0IGM6IHN0cmluZztcclxuXHJcbiAgICBsZXQgdG1wSWR4ID0gdGhpcy5fZm9ybWF0SWR4O1xyXG5cclxuICAgIGMgPSB0aGlzLl9mb3JtYXRbdG1wSWR4XTtcclxuICAgIHRtcElkeCsrO1xyXG4gICAgd2hpbGUgKHRtcElkeCA8IHRoaXMuX2Zvcm1hdC5sZW5ndGggJiYgYyA9PT0gdGhpcy5fZm9ybWF0W3RtcElkeF0pIHtcclxuICAgICAgZHVwQ291bnQrKztcclxuICAgICAgdG1wSWR4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGR1cENvdW50O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgc2V0IElNRSBtb2RlIGRlcGVuZHMgb24gSyBwaWN0dXJlIChLMCAtIEs5KVxyXG4vLy8gICAoSlBOOiBJTUUgc3VwcG9ydClcclxuLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHBpY19rYW5qaSgpOiBib29sZWFuIHtcclxuICAgIGxldCBjb3VudDtcclxuXHJcbiAgICBpZiAodGhpcy5fZm9ybWF0SWR4ICsgMSA+PSB0aGlzLl9mb3JtYXQubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdCh0aGlzLl9mb3JtYXRbdGhpcy5fZm9ybWF0SWR4ICsgMV0pKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5fZm9ybWF0SWR4Kys7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Zvcm1hdFt0aGlzLl9mb3JtYXRJZHhdID09PSAnMCcpICAvLyBLMFxyXG4gICAge1xyXG4gICAgICB0aGlzLl9pbWVNb2RlID0gVXRpbEltZUpwbi5JTUVfRk9SQ0VfT0ZGO1xyXG4gICAgICB0aGlzLl9mb3JtYXRJZHgrKztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb3VudCA9IHRoaXMucGlrX2NvdW50KCk7XHJcbiAgICAgIGlmICgxIDw9IGNvdW50ICYmIGNvdW50IDw9IDkpIC8vIEsxIC0gSzlcclxuICAgICAgICB0aGlzLl9pbWVNb2RlID0gY291bnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEZpbmQgbGVuZ3RoIG9mIHRoZSBwaWN0dXJlIGFmdGVyIHBhcnNpbmcgdGhlIHBpY3R1cmVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPiBsZW5ndGggb2YgdGhlIHBpY3R1cmU8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRNYXNrTGVuKGNvbXBJZHg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbmVlZExlbmd0aCA9IHRydWU7XHJcbiAgICB0aGlzLl9tYXNrTGVuZ3RoID0gMDtcclxuICAgIHRoaXMuX2Zvcm1hdElkeCA9IDA7XHJcblxyXG4gICAgdGhpcy5wcnNfYWxsKGNvbXBJZHgpO1xyXG5cclxuICAgIC8vIGFkZCBwcmVmaXggYW5kIHN1ZmZpeCBsZW5ndGggdG8gdGhlIG1hc2tcclxuICAgIGlmICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgJiYgKHRoaXMuX3ByZWZMZW4gPiAwIHx8IHRoaXMuX3N1ZmZMZW4gPiAwKSlcclxuICAgICAgdGhpcy5fbWFza0xlbmd0aCArPSAodGhpcy5fcHJlZkxlbiArIHRoaXMuX3N1ZmZMZW4pO1xyXG5cclxuICAgIHRoaXMuX25lZWRMZW5ndGggPSBmYWxzZTtcclxuICAgIC8vIGluaXQgZm9yIG5leHQgcnVubmluZyA6XHJcbiAgICB0aGlzLl9mb3JtYXRJZHggPSB0aGlzLl9tYXNrQ2hhcnMgPSB0aGlzLl93aG9sZSA9IHRoaXMuX2RlY2ltYWxEaWdpdHMgPSB0aGlzLl9zaXplID0gdGhpcy5fbWFza1NpemUgPSB0aGlzLl9wcmVmTGVuID0gdGhpcy5fc3VmZkxlbiA9IDA7XHJcbiAgICB0aGlzLl9wYWQgPSB0aGlzLl96ZXJvID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTtcclxuICAgIHRoaXMuaGVicmV3ID0gdGhpcy5fbWl4ZWQgPSB0aGlzLl9lbWJlZGVkID0gdGhpcy5fbmVnYXRpdmUgPSB0aGlzLl9jb21tYSA9IHRoaXMuX2xlZnQgPSB0aGlzLl9wYWRGaWxsID0gdGhpcy5femVyb0ZpbGwgPSB0aGlzLl90cmltID0gdGhpcy5fYXV0b1NraXBfID0gdGhpcy5fZGVjaW1hbCA9IHRoaXMuX3Rlcm1GbGFnID0gdGhpcy5fZGVjUG9pbnRJc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wb3NQcmVmLlJlbW92ZSgwLCB0aGlzLl9wb3NQcmVmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9wb3NTdWZmLlJlbW92ZSgwLCB0aGlzLl9wb3NTdWZmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9uZWdQcmVmLlJlbW92ZSgwLCB0aGlzLl9uZWdQcmVmLkxlbmd0aCk7XHJcbiAgICB0aGlzLl9uZWdTdWZmLlJlbW92ZSgwLCB0aGlzLl9uZWdTdWZmLkxlbmd0aCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFza0xlbmd0aDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbWJlZGVkIGNoYXIgaW4gdGhlIG1hc2sgaW4gYSBnaXZ2ZW4gcG9zaXRpb24uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHBpYyBpcyBtYXNrPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBwaWNJc01hc2socG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmIChwb3MgPCAwIHx8IHBvcyA+PSB0aGlzLl9tYXNrTGVuZ3RoKVxyXG4gICAgICBwb3MgPSAwO1xyXG4gICAgcmV0dXJuIHRoaXMuX21za1twb3NdLmNoYXJDb2RlQXQoMCkgPiBQSUNJbnRlcmZhY2UuUElDX01BWF9PUDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcIm1za1Bvc1wiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmUG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJidWZcIj48L3BhcmFtPlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldERpcmVjdGl2ZUxlbihwb3M6IG51bWJlcik6IG51bWJlcjtcclxuICBnZXREaXJlY3RpdmVMZW4obXNrUG9zOiBudW1iZXIsIGJ1ZlBvczogbnVtYmVyLCBidWY6IHN0cmluZyk6IG51bWJlcjtcclxuICBnZXREaXJlY3RpdmVMZW4ocG9zT3JNc2tQb3M6IG51bWJlciwgYnVmUG9zPzogbnVtYmVyLCBidWY/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldERpcmVjdGl2ZUxlbl8wKHBvc09yTXNrUG9zKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlyZWN0aXZlTGVuXzEocG9zT3JNc2tQb3MsIGJ1ZlBvcywgYnVmKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcnMgdGlsbCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RGlyZWN0aXZlTGVuXzAocG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGM6IHN0cmluZyA9IHRoaXMuX21za1twb3NdO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gcG9zO1xyXG4gICAgd2hpbGUgKG51bSA8IHRoaXMuX21hc2tTaXplICYmIGMgPT09IHRoaXMuX21za1tudW1dKSB7XHJcbiAgICAgIG51bSA9IG51bSArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtIC0gcG9zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFycyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tQb3NcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmUG9zXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldERpcmVjdGl2ZUxlbl8xKG1za1BvczogbnVtYmVyLCBidWZQb3M6IG51bWJlciwgYnVmOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IGRydjogc3RyaW5nID0gdGhpcy5fbXNrW21za1Bvc107XHJcbiAgICBsZXQgY3Vyck1za1BvczogbnVtYmVyID0gbXNrUG9zO1xyXG4gICAgbGV0IGN1cnJCdWZQb3M6IG51bWJlciA9IGJ1ZlBvcztcclxuXHJcbiAgICAvLyB0aWxsIHRoZSBlbmQgb2YgdGhlIG1hc2ssIGlmIG1hc2tbcG9zXSBoYXMgc2FtZSBkaXJlY3RpdmUgYXMgb3VycywgdGhpcyBpcyB0aGUgc2FtZSBzZXF1ZW5jZS5cclxuICAgIHdoaWxlIChjdXJyTXNrUG9zIDwgdGhpcy5fbWFza1NpemUgJiYgZHJ2ID09PSB0aGlzLl9tc2tbY3Vyck1za1Bvc10pIHtcclxuICAgICAgLy8gSWdub3JlIHRoZSBjaGFuZ2Ugb2Ygc2VxdWVuY2UgaWYgaXQgaXMgaW4tYmV0d2VlbiBhIERCQ1MgY2hhci5cclxuICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhciBpcyBhIEZ1bGwgV2lkdGggY2hhciwgdGhlbiB0aGUgbmV4dCBtYXNrIGJpdFxyXG4gICAgICAvLyBpcyBhY3R1YWxseSBub3QgdXNlZC4gU28sIGlnbm9yZSB0aGF0IGJpdCBhbmQgbW92ZSBvbi5cclxuICAgICAgaWYgKGN1cnJCdWZQb3MgPCBidWYubGVuZ3RoICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgdGhpcy5pc0F0dHJBbHBoYU9yRGF0ZSgpKSB7XHJcbiAgICAgICAgaWYgKCFVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgoYnVmW2N1cnJCdWZQb3MrK10pKVxyXG4gICAgICAgICAgY3Vyck1za1BvcysrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXJyTXNrUG9zKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIG9ubHkgaG93IG1hbnkgY2hhcnMgdG8gdGhlIGVuZCwgaW5jbHVkaW5nIG91ciBwb3MuXHJcbiAgICByZXR1cm4gKGN1cnJNc2tQb3MgLSBtc2tQb3MpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgY2hhciBpcyB2YWxpZCBpbiB0aGUgZ2l2ZW4gbWFzayBwb3NpdGlvblxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImNoYXJUb1ZhbGlkYXRlXCI+XHJcbi8vLyA8L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInBvc1wiPm9mIGRpcmVjdGl2ZSBtYXNrIHRvIGNoZWNrXHJcbi8vLyAgIFRoZSByZXR1cm5lZCBjaGFyIG1pZ2h0IGJlIGRpZmZlcmVudCB0aGVuIHRoZSBjaGFyIHRoYXQgd2FzIGNoZWNrZWQuXHJcbi8vLyAgIFRoZSByZWFzb24gaXMgdGhhdCAnVScgYW5kICdMJyBkaXJlY3RpdmUgbWlnaHQgY2hhbmdlIGl0LCBhbmQgaW4gbnVtZXJpYyxcclxuLy8vICAgZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kIHNlcGFyYXRvciBtaWdodCBiZSBjaGFuZ2VkIGFzIHdlbGwgd2hpbGUgdHlwaW5nLlxyXG4vLy8gPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZCBvciBhIGNoYXIgaWYgdmFsaWQuPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyB2YWxpZGF0ZUNoYXIoY2hhclRvVmFsaWRhdGU6IHN0cmluZywgcG9zOiBudW1iZXIpIHtcclxuICAgIGxldCBjaGFyUmV0dXJuZWQgPSBjaGFyVG9WYWxpZGF0ZTtcclxuICAgIGlmIChwb3MgPj0gdGhpcy5nZXRNYXNrU2l6ZSgpKVxyXG4gICAgICByZXR1cm4gY2hhclJldHVybmVkO1xyXG5cclxuICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBhbnkgY2hhcmFjdGVycyB3aGljaCBhcmUgZW1iZWRlZCBpbnRvIHRoZSBwaWN0dXJlXHJcbiAgICB3aGlsZSAodGhpcy5waWNJc01hc2socG9zKSlcclxuICAgICAgcG9zKys7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9tc2tbcG9zXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgIGNoYXJSZXR1cm5lZCA9IGNoYXJUb1ZhbGlkYXRlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICBjaGFyUmV0dXJuZWQgPSBjaGFyVG9WYWxpZGF0ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlmICghVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoY2hhclRvVmFsaWRhdGUpKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBQSUNJbnRlcmZhY2UuTnVtRGlyZWN0aXZlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLk51bURpcmVjdGl2ZVtpXSkge1xyXG4gICAgICAgICAgICAgIGNoYXJSZXR1cm5lZCA9IHRoaXMuaXNWYWxpZEluTnVtKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYXJSZXR1cm5lZDtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIENoZWNrcyB3aGV0aGVyIGEgbm9uIGRpZ2l0IGNoYXJhY3RlciBpcyB2YWxpZCBpbiBhIG51bWVyaWMgbWFza1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImxldHRlcjpcIj5hIGNoYXJhY3RlciB0byBiZSBjaGVja2VkLjwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gMCBpZiBub3QgdmFsaWQuIGNoYXIgaWYgdmFsaWQuIGNoYXIgbWlnaHQgYmUgZGlmZmVyZW50IHRoZW4gbGV0dGVyLjwvcmV0dXJucz5cclxuICBpc1ZhbGlkSW5OdW0obGV0dGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNoYXJSZXQgPSAnXFwwJztcclxuICAgIGxldCBkZWNpbWFsQ2hhcjogc3RyaW5nID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0RGVjaW1hbCgpO1xyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIC8qICByZXBsYWNlICcuJyB3aXRoIGEgZGlmZmVyZW50IGNoYXIgZm9yIG51bWVyaWMgc2VwZXJhdG9yIG9ubHkgaWZcclxuICAgICogIFNwZWNpYWxNb2RpZmllZERlY2ltYWxTZXBhcmF0b3IgPSBZKi9cclxuICAgIC8vIGZvciBudW1lcmljLCBpZiAnLicgd2FzIGVudGVyZWQsIGNoYW5nZSBpdCB0byB0aGUgZW52IHNlcGVyYXRvci5cclxuICAgIC8vICM5MzE3ODQ6IElmIFNwZWNpYWxNb2RpZmllZERlY2ltYWxTZXBhcmF0b3IgPSBZIHRoZW4gcmVwbGFjZSAnLicgYnkgZGVjaW1hbCBzZXBhcmF0b3IuXHJcbiAgICBpZiAoR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuQ2FuUmVwbGFjZURlY2ltYWxTZXBhcmF0b3IoKSAmJiB0aGlzLmlzQXR0ck51bWVyaWMoKSlcclxuICAgICAgaWYgKGxldHRlciA9PT0gJy4nKVxyXG4gICAgICAgIGxldHRlciA9IGRlY2ltYWxDaGFyO1xyXG5cclxuICAgIHN3aXRjaCAobGV0dGVyKSB7XHJcbiAgICAgIGNhc2UgJyAnOlxyXG4gICAgICBjYXNlICctJzpcclxuICAgICAgY2FzZSAnKic6XHJcbiAgICAgIGNhc2UgJysnOlxyXG4gICAgICBjYXNlICcvJzpcclxuICAgICAgICBjaGFyUmV0ID0gbGV0dGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyB0aGUgZW52IGRlY2ltYWwgc2VwZXJhdG9yIGFuZCB0aG91c2FuZHMgc2VwZXJhdG9yIGFyZSBhbHNvIHZhbGlkXHJcbiAgICAgICAgaWYgKGxldHRlciA9PT0gZGVjaW1hbENoYXIgfHwgbGV0dGVyID09PSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXRUaG91c2FuZHMoKSlcclxuICAgICAgICAgIGNoYXJSZXQgPSBsZXR0ZXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoYXJSZXQ7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGxvZ2ljYWxcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyTG9naWNhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbnVtZXJpY1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJOdW1lcmljKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHBoYVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJBbHBoYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIHVuaWNvZGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyVW5pY29kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGNoZWNrIGlmIHRoZSBhdHRyaWJ1dGUgaXMgYWxwaGEgb3IgZGF0ZVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0F0dHJBbHBoYU9yRGF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0aGlzLl9waWNBdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyB0aW1lIG9yIGRhdGVcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyRGF0ZU9yVGltZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FIHx8IHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgYXR0cmlidXRlIGlzIGJsb2JcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNBdHRyQmxvYigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5fcGljQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CIHx8XHJcbiAgICAgIHRoaXMuX3BpY0F0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIG1hc2sgYXQgYSBnaXZlbiBwb3NpdGlvbiBpcyBudW1lcmljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNOdW1lcmljKHBvczogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbXNrIFtwb3NdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKFBJQ0ludGVyZmFjZS5QSUNfTik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpZiB0aGUgbWFzayBpcyBhbGwgWFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc0FsbFgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuX21za1swXSA9PT0gU3RyaW5nLmZyb21DaGFyQ29kZShQSUNJbnRlcmZhY2UuUElDX1gpICYmIHRoaXMuZ2V0RGlyZWN0aXZlTGVuKDApID09PSB0aGlzLl9tYXNrU2l6ZSk7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBjaGVjayBpcyBtYXNrIGF0IHBvc2l0aW9uIHBvcyBpcyBzYW1lIGFzIHBhcmFtZXRlciBtYXNrUGljXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrUGljXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNNYXNrUGljRXEocG9zOiBudW1iZXIsIG1hc2tQaWM6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21za1twb3NdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKG1hc2tQaWMpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgY2hlY2sgaWYgdGhlIGlucHV0IGNoYXIgaXMgdmFsaWQgZm9yIGxvY2FsIEFTNDAwIChzeXN0ZW0gaSkgcGljdHVyZXMuXHJcbi8vLyAgIChEQkNTIFN1cHBvcnQpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwiY2hhclRvVmFsaWRhdGVcIj48L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImZpcnN0Q2hhclwiPjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+PC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiAwIGlmIG5vdCB2YWxpZCBvciBhIGNoYXIgaWYgdmFsaWQuPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBpc1ZhbGlkQ2hhcl9hczQwMChjaGFyVG9WYWxpZGF0ZTogc3RyaW5nLCBmaXJzdENoYXI6IHN0cmluZywgcG9zOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCByZXQgPSB0cnVlO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5fbXNrW3Bvc10uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSjpcclxuICAgICAgLy8gb25seSBmdWxsLXdpZHRoIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWRcclxuICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0c6XHJcbiAgICAgICAgcmV0ID0gIVV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChjaGFyVG9WYWxpZGF0ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1QpOiAvLyBtaXh0dXJlIG9mIGZ1bGwtd2lkdGggYW5kIGhhbGYtd2lkdGggaXMgbm90IGFsbG93ZWRcclxuICAgICAgICBpZiAoZmlyc3RDaGFyID09PSAnXFx4MDAwMCcpXHJcbiAgICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgICAgIGVsc2UgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChmaXJzdENoYXIpKVxyXG4gICAgICAgICAgcmV0ID0gVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXQgPSAhVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUyk6IC8vIG9ubHkgaGFsZi13aWR0aCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkXHJcbiAgICAgICAgcmV0ID0gVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKGNoYXJUb1ZhbGlkYXRlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgcmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBsZW5ndGhcclxuLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNaW5pbXVtVmFsdWVMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIGxldCBtaW5MZW5ndGggPSB0aGlzLmdldE1hc2tMZW5ndGgoKTtcclxuXHJcbiAgICAvLyB0cmF2ZXJzZSBmcm9tIHJpZ2h0IHRpbGwgYSB2YWxpZCBtYXNrIGNoYXIgaXMgZW5jb3VudGVyZWRcclxuICAgIHdoaWxlIChtaW5MZW5ndGggPiAwICYmICF0aGlzLnBpY0lzTWFzayhtaW5MZW5ndGggLSAxKSlcclxuICAgICAgbWluTGVuZ3RoLS07XHJcblxyXG4gICAgcmV0dXJuIG1pbkxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwie1BpY3R1cmU6IFwiICsgdGhpcy5fZm9ybWF0ICsgXCJ9XCI7XHJcbiAgfVxyXG59XHJcbiJdfQ==