mis-crystal-design-system 18.1.6-signal → 18.1.7-signal-2

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 (29) hide show
  1. package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +4 -0
  2. package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +7 -5
  3. package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +2 -34
  4. package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +60 -18
  5. package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +255 -175
  6. package/esm2022/drawer/drawer-body/drawer-body.component.mjs +4 -4
  7. package/esm2022/input/mis-input.component.mjs +1 -9
  8. package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +4 -4
  9. package/esm2022/slider/slider.component.mjs +2 -2
  10. package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +23 -19
  11. package/esm2022/table/table.component.mjs +63 -47
  12. package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +60 -50
  13. package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  14. package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +254 -174
  15. package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  16. package/fesm2022/mis-crystal-design-system-drawer.mjs +3 -3
  17. package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
  18. package/fesm2022/mis-crystal-design-system-input.mjs +0 -8
  19. package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
  20. package/fesm2022/mis-crystal-design-system-modal.mjs +3 -3
  21. package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
  22. package/fesm2022/mis-crystal-design-system-slider.mjs +2 -2
  23. package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
  24. package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +22 -18
  25. package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  26. package/fesm2022/mis-crystal-design-system-table.mjs +62 -47
  27. package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
  28. package/package.json +7 -7
  29. package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +2 -2
@@ -211,6 +211,57 @@ dayjs.extend(customParseFormat);
211
211
  dayjs.extend(isSameOrAfter);
212
212
  dayjs.extend(isSameOrBefore);
213
213
  export class TzDpContainerComponent {
214
+ /**
215
+ * Parse date string using configured format with fallback
216
+ */
217
+ parseDateWithMultipleFormats(dateString) {
218
+ if (!dateString || dateString === 'Invalid Date' || dateString === 'undefined' || dateString === 'null') {
219
+ return dayjs('invalid');
220
+ }
221
+ // First try the configured format
222
+ const configuredFormat = this.data?.dpConfig?.format;
223
+ if (configuredFormat) {
224
+ try {
225
+ const parsed = this.parseZoneInstance(dateString, configuredFormat);
226
+ if (parsed.isValid()) {
227
+ return parsed;
228
+ }
229
+ }
230
+ catch (error) {
231
+ // Continue to fallback formats
232
+ }
233
+ }
234
+ // Fallback to common formats if configured format fails
235
+ const fallbackFormats = [
236
+ 'DD/MMM/YYYY',
237
+ 'DD/MM/YYYY',
238
+ 'DD-MMM-YYYY',
239
+ 'DD-MM-YYYY',
240
+ 'YYYY-MM-DD'
241
+ ];
242
+ for (const format of fallbackFormats) {
243
+ try {
244
+ const parsed = this.parseZoneInstance(dateString, format);
245
+ if (parsed.isValid()) {
246
+ return parsed;
247
+ }
248
+ }
249
+ catch (error) {
250
+ // Continue to next format
251
+ }
252
+ }
253
+ // If all formats fail, try parsing without format (let dayjs guess)
254
+ try {
255
+ const parsed = this.parseZoneInstance(dateString);
256
+ if (parsed.isValid()) {
257
+ return parsed;
258
+ }
259
+ }
260
+ catch (error) {
261
+ console.warn('Failed to parse date with any format:', dateString, error);
262
+ }
263
+ return dayjs('invalid');
264
+ }
214
265
  constructor(data, toast) {
215
266
  this.toast = toast;
216
267
  this.parseZoneInstance = (...args) => {
@@ -449,7 +500,7 @@ export class TzDpContainerComponent {
449
500
  currentDateInstance() {
450
501
  try {
451
502
  if (this.data.date) {
452
- const selectedDate = dayjs(this.data.date, this.data.dpConfig.format);
503
+ const selectedDate = this.parseDateWithMultipleFormats(this.data.date);
453
504
  if (selectedDate.isValid()) {
454
505
  this.selectedYearSignal.set(selectedDate.year());
455
506
  this.currentYearNumberSignal.set(selectedDate.year());
@@ -556,7 +607,7 @@ export class TzDpContainerComponent {
556
607
  let maxDate = null;
557
608
  if (this.data.dpConfig.minDate) {
558
609
  try {
559
- minDate = this.parseZoneInstance(this.data.dpConfig.minDate, this.data.dpConfig.format);
610
+ minDate = this.parseDateWithMultipleFormats(this.data.dpConfig.minDate);
560
611
  }
561
612
  catch (error) {
562
613
  // Silently handle min date parsing error
@@ -564,7 +615,7 @@ export class TzDpContainerComponent {
564
615
  }
565
616
  if (this.data.dpConfig.maxDate) {
566
617
  try {
567
- maxDate = this.parseZoneInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format);
618
+ maxDate = this.parseDateWithMultipleFormats(this.data.dpConfig.maxDate);
568
619
  }
569
620
  catch (error) {
570
621
  // Silently handle max date parsing error
@@ -594,22 +645,13 @@ export class TzDpContainerComponent {
594
645
  else if (this.data.date && !this.localSelectedDateSignal()) {
595
646
  // Only check previously applied date if no current selection
596
647
  try {
597
- if (this.data.dpConfig.enableTime) {
598
- const selectedDate = this.parseZoneInstance(this.data.date, this.data.dpConfig.format);
599
- if (selectedDate.isValid()) {
600
- isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
601
- }
648
+ const selectedDate = this.parseDateWithMultipleFormats(this.data.date);
649
+ if (selectedDate.isValid()) {
650
+ isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
602
651
  }
603
652
  else {
604
- // For date-only format, compare the date parts only
605
- const selectedDate = this.parseZoneInstance(this.data.date, this.data.dpConfig.format);
606
- if (selectedDate.isValid()) {
607
- isSelectedDay = selectedDate.isSame(currentDateInstance, 'day');
608
- }
609
- else {
610
- // Fallback to string comparison if parsing fails
611
- isSelectedDay = dateString === this.data.date;
612
- }
653
+ // Fallback to string comparison if parsing fails
654
+ isSelectedDay = dateString === this.data.date;
613
655
  }
614
656
  }
615
657
  catch (error) {
@@ -874,4 +916,4 @@ export class TzDpContainerComponent {
874
916
  args: ["keydown.esc"]
875
917
  }] }); })();
876
918
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TzDpContainerComponent, { className: "TzDpContainerComponent" }); })();
877
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sS0FBb0IsTUFBTSxPQUFPLENBQUM7QUFDekMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0lDVzFELCtCQUFxRjtJQUFyRCwrS0FBUyw0QkFBcUIsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSw2SUFDRjs7OztJQUNBLCtCQUFvRjtJQUFuRCwrS0FBUywyQkFBb0IsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSx5R0FDRjs7OztJQXlCSSwrQkFNTztJQUpILHFRQUFVLHVCQUFnQixVQUFPLDRCQUFr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NkUsNkRBY0QsNkRBY2tCLDZEQUtKO1lBMEI1RixpQkFBTTtZQXFETixBQWxEQSwyRUFBa0YsNkRBa0QwQjtZQUk5RyxpQkFBTTs7WUFySzJILEFBQS9GLDhFQUF3RCxpQ0FBdUU7WUFTM0osZUFFRTtZQUZGLDhHQUVFO1lBVUUsZUFBd0I7WUFBeEIsNkNBQXdCO1lBR3hCLGNBQXlCO1lBQXpCLDhDQUF5QjtZQVc3QixjQUVFO1lBRkYsMEdBRUU7WUFZRSxlQUE4QztZQUE5Qyx1RUFBOEM7WUFjOUMsY0FBOEM7WUFBOUMsdUVBQThDO1lBYzlDLGNBQStDO1lBQS9DLHdFQUErQztZQUsvQyxjQUErQztZQUEvQyx3RUFBK0M7WUE2QmQsY0FBdUM7WUFBdkMsNERBQXVDO1lBa0RyQyxjQUErRDtZQUEvRCx3RkFBK0Q7OztpRkQxSS9GLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLFdBQVc7O3NCQStEUixNQUFNO3VCQUFDLGNBQWM7Z0RBNGhCbEMsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWE7O2tGQXRsQmhCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDT05UQUlORVJfREFUQSwgREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vZGF0ZXBpY2tlci1jb25zdGFudHNcIjtcbmltcG9ydCB7IElDdXJyZW50TW9udGgsIElDdXJyZW50TW9udGhEYXRlcywgSURhdGVQaWNrZXJEYXRhLCBJV2Vla0RheSB9IGZyb20gXCIuLi9tb2RlbHMvZHAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcbmltcG9ydCBkYXlqcywgeyBEYXlqcywgdHogfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlcic7XG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlJztcbmltcG9ydCBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnXG5cbmRheWpzLmV4dGVuZCh1dGMpO1xuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcik7XG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXR6LWRwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90ei1kcC1jb250YWluZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVHpEcENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IElEYXRlUGlja2VyRGF0YTtcbiAgcHJpdmF0ZSBwYXJzZVpvbmVJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICB9O1xuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgXG4gIC8vIFNpZ25hbC1iYXNlZCBzdGF0ZSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgd2Vla0RheXNTaWduYWwgPSBzaWduYWw8SVdlZWtEYXlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc05leHRNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXMgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uU2lnbmFsID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIFxuICAvLyBUaW1lIGZ1bmN0aW9uYWxpdHkgc2lnbmFsc1xuICByZWFkb25seSBzZWxlY3RlZEhvdXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRNaW51dGVTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlbGVjdGluZ01vbnRoU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlbGVjdGluZ1llYXJTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJsZVllYXJzU2lnbmFsID0gc2lnbmFsPG51bWJlcltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlTW9udGhzU2lnbmFsID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZWRNb250aHNTaWduYWwgPSBzaWduYWw8Ym9vbGVhbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZWRZZWFyc1NpZ25hbCA9IHNpZ25hbDxib29sZWFuW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFllYXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgXG4gIC8vIENvbXB1dGVkIHByb3BlcnRpZXMgZm9yIHRlbXBsYXRlIGFjY2Vzc1xuICB3ZWVrRGF5cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMud2Vla0RheXNTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aE51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aFNpZ25hbCgpKTtcbiAgY3VycmVudFllYXJOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGhEYXRlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwoKSk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgbG9jYWxTZWxlY3RlZERhdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpO1xuICBhbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpO1xuICBjdXJyZW50U2VsZWN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkpO1xuICBcbiAgLy8gVGltZSBmdW5jdGlvbmFsaXR5IGNvbXB1dGVkIHByb3BlcnRpZXNcbiAgc2VsZWN0ZWRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSk7XG4gIHNlbGVjdGVkTWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbCgpKTtcbiAgc2VsZWN0ZWRBbVBtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwoKSk7XG5cbiAgaXNTZWxlY3RpbmdNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbCgpKTtcbiAgaXNTZWxlY3RpbmdZZWFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwoKSk7XG4gIGF2YWlsYWJsZVllYXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbCgpKTtcbiAgYXZhaWxhYmxlTW9udGhzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKSk7XG4gIGRpc2FibGVkTW9udGhzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaXNhYmxlZE1vbnRoc1NpZ25hbCgpKTtcbiAgZGlzYWJsZWRZZWFycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGlzYWJsZWRZZWFyc1NpZ25hbCgpKTtcbiAgc2VsZWN0ZWRZZWFyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSk7XG4gIGlzWWVhclNlbGVjdGlvbkZsb3cgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzWWVhclNlbGVjdGlvbkZsb3dTaWduYWwoKSk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT05UQUlORVJfREFUQSkgZGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2Vab25lSW5zdGFuY2Ugd2l0aCBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdcbiAgICB0aGlzLnBhcnNlWm9uZUluc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBkYXlqcy50eihhcmdzWzBdLCBhcmdzWzFdICB8fCAnREQvTU0vWVlZWScsIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgdGltZXpvbmUgcGFyc2luZyBlcnJvciwgZmFsbGJhY2sgdG8gbG9jYWwgdGltZVxuICAgICAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgc2FmZWx5IHVzaW5nIHNpZ25hbHNcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoKSk7XG4gICAgdGhpcy53ZWVrRGF5c1NpZ25hbC5zZXQodGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLmRheSgpID09PSBpbmRleFxuICAgIH0pKSk7XG4gICAgXG4gICAgaWYgKCF0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhLmRwQ29uZmlnLFxuICAgICAgICBmb3JtYXQ6IERBVEVfRk9STUFUXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmKCF0aGlzLmRhdGE/LmRhdGUpe1xuICAgICAgdGhpcy5kYXRhLmRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIH1cblxuICAgIHRoaXMuYXZhaWxhYmxlTW9udGhzU2lnbmFsLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4gZGF5anMoKS5tb250aChpKS5mb3JtYXQoJ01NTU0nKSkpO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIC0gNiArIGluZGV4XG4gICAgKSk7XG4gICAgXG4gIH1cblxuICBvbkhvdXJJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDEyKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMjMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25NaW51dGVJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gNTkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUhvdXJJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgIT09IHRydWUpIHJldHVybjtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSA8IDEpIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgxKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpID4gMTIpIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpIDwgMCkgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDApO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkgPiAyMykgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDIzKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU1pbnV0ZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIFxuICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkgPCAwKSB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldCgwKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbCgpID4gNTkpIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KDU5KTtcbiAgfVxuXG4gIGlzMTJIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSAmJiBcbiAgICAgICAgICAgKHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0EnKSB8fCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdhJykpO1xuICB9XG5cbiAgcmV0cmFjdERheU1vbnRoKGRheTogYW55LCBtb250aDogYW55LCB5ZWFyOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RGF0ZUluc3RhbmNlKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUaW1lVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIGdldCB5ZWFyUmFuZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSAtIDZ9IC0gJHt0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpICsgNX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGltZVZhbHVlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEuZGF0ZSkge1xuICAgICAgICAvLyBUcnkgdG8gcGFyc2UgZXhpc3RpbmcgZGF0ZSBmb3IgdGltZSB2YWx1ZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIGlmIChjdXJyZW50RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIGxldCBob3VyID0gY3VycmVudERhdGUuaG91cigpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudERhdGUubWludXRlKCkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDEyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gaG91ciAtIDEyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KGhvdXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIGRhdGUsIHVzZSBkZWZhdWx0c1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VGltZVZhbHVlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBQYXJzaW5nIGVycm9yLCB1c2UgZGVmYXVsdHNcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIGV4aXN0aW5nIGRhdGUsIHVzZSBkZWZhdWx0c1xuICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lVmFsdWVzKCk7XG4gICAgICB9XG4gICAgXG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgYXMgZGVmYXVsdCBpbnN0ZWFkIG9mIDEyOjAwIFBNXG4gICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICBjb25zdCBjdXJyZW50SG91ciA9IG5vdy5ob3VyKCk7XG4gICAgY29uc3QgY3VycmVudE1pbnV0ZSA9IG5vdy5taW51dGUoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byAxMi1ob3VyIGZvcm1hdFxuICAgICAgbGV0IGhvdXIxMiA9IGN1cnJlbnRIb3VyO1xuICAgICAgbGV0IGFtUG0gPSAnQU0nO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IGN1cnJlbnRIb3VyIC0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldChob3VyMTIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgZGlyZWN0bHkgZm9yIDI0LWhvdXIgZm9ybWF0XG4gICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJ0FNJyk7IC8vIE5vdCB1c2VkIGluIDI0LWhvdXIgZm9ybWF0IGJ1dCBrZWVwIGNvbnNpc3RlbnRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnREYXRlSW5zdGFuY2UoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRhdGEuZGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBkYXlqcyh0aGlzLmRhdGEuZGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIGlmIChzZWxlY3RlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFllYXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHNlbGVjdGVkRGF0ZS55ZWFyKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZERhdGUubW9udGgoKSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHNlbGVjdGVkRGF0ZS5tb250aCgpKSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCF0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLmRhdGUoKSxcbiAgICAgICAgICAgICAgd2Vla0RheTogc2VsZWN0ZWREYXRlLmRheSgpLFxuICAgICAgICAgICAgICBtb250aDogc2VsZWN0ZWREYXRlLm1vbnRoKCksXG4gICAgICAgICAgICAgIHllYXI6IHNlbGVjdGVkRGF0ZS55ZWFyKCksXG4gICAgICAgICAgICAgIGlzU2VsZWN0ZWREYXk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTWluTWF4RGF5cygpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBpZiAobWluRGF0ZT8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIGlmIChtYXhEYXRlPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKSB7XG4gICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgXG4gICAgdGhpcy5kaXNhYmxlZE1vbnRoc1NpZ25hbC5zZXQodGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKS5tYXAoKG1vbnRoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbW9udGhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSkubW9udGgoaW5kZXgpO1xuICAgICAgcmV0dXJuIChtaW5EYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNCZWZvcmUobWluRGF0ZSwgJ21vbnRoJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiBtb250aERhdGUuaXNBZnRlcihtYXhEYXRlLCAnbW9udGgnKSk7XG4gICAgfSkpO1xuICBcbiAgICB0aGlzLmRpc2FibGVkWWVhcnNTaWduYWwuc2V0KHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwoKS5tYXAoKHllYXIpID0+IHtcbiAgICAgIGNvbnN0IHllYXJEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoeWVhcik7XG4gICAgICByZXR1cm4gKG1pbkRhdGUuaXNWYWxpZCgpICYmIHllYXJEYXRlLmlzQmVmb3JlKG1pbkRhdGUsICd5ZWFyJykpIHx8IFxuICAgICAgICAgICAgIChtYXhEYXRlLmlzVmFsaWQoKSAmJiB5ZWFyRGF0ZS5pc0FmdGVyKG1heERhdGUsICd5ZWFyJykpO1xuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgLSA2KSA8PSBtaW5EYXRlLnllYXIoKSkpO1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsLnNldChtYXhEYXRlLmlzVmFsaWQoKSAmJiAoKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyA1KSA+PSBtYXhEYXRlLnllYXIoKSkpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIG5hdmlnYXRlVmlldyhkaXJlY3Rpb246IFwiTkVYVFwiIHwgXCJQUkVWSU9VU1wiKTogdm9pZCB7XG4gICAgaWYgKChkaXJlY3Rpb24gPT09ICdORVhUJyAmJiAodGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSB8fFxuICAgICAgICAoZGlyZWN0aW9uID09PSAnUFJFVklPVVMnICYmICh0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkgfHwgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZih0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKXtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyAoZGlyZWN0aW9uID09PSBcIk5FWFRcIiA/IDEyIDogLTEyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldChuZXdTZWxlY3RlZFllYXIpO1xuICAgICAgdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbC5zZXQoQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAgIChfLCBpbmRleCkgPT4gbmV3U2VsZWN0ZWRZZWFyIC0gNiArIGluZGV4XG4gICAgICApKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGxldCB0aGlzTW9udGggOiBkYXlqcy5EYXlqcyA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgICB0aGlzTW9udGggPSBkaXJlY3Rpb24gPT09IFwiTkVYVFwiID8gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpIDogdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLm1vbnRoKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXNNb250aC5tb250aCgpKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQodGhpc01vbnRoLnllYXIoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzTW9udGgubW9udGgoKSwgdGhpc01vbnRoLnllYXIoKSkpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGhpc01vbnRoOiBkYXlqcy5EYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpc01vbnRoLm1vbnRoKCkpKTtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC55ZWFyKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXNNb250aC5tb250aCgpLCB0aGlzTW9udGgueWVhcigpKSk7XG4gICAgICBcbiAgICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbmF2aWdhdGVNb250aCBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGNvbnN0IGRhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgICBcbiAgICAgIGxldCBtaW5EYXRlID0gbnVsbDtcbiAgICAgIGxldCBtYXhEYXRlID0gbnVsbDtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWluRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtYXggZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgaXNEaXNhYmxlZERheSA9IHRoaXMuZGF0YS5kYXRlc0Rpc2FibGVkPy5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZykgfHwgZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1pbkRhdGU/LmlzVmFsaWQoKSAmJiB0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGU/LmlzVmFsaWQoKSAmJiB0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlSW5zdGFuY2UgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGN1cnJlbnREYXRlSW5zdGFuY2UuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PSBkYXlqcygpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICBcbiAgICAgICAgICBsZXQgaXNTZWxlY3RlZERheSA9IGZhbHNlO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFByaW9yaXRpemUgY3VycmVudCBzZWxlY3Rpb24gb3ZlciBwcmV2aW91c2x5IGFwcGxpZWQgZGF0ZVxuICAgICAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkgJiYgXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSEuZGF0ZSA9PT0gY3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpIS5tb250aCA9PT0gbW9udGggJiZcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpIS55ZWFyID09PSBjdXJyZW50WWVhck51bWJlcikge1xuICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuZGF0ZSAmJiAhdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpKSB7XG4gICAgICAgICAgICAvLyBPbmx5IGNoZWNrIHByZXZpb3VzbHkgYXBwbGllZCBkYXRlIGlmIG5vIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUoY3VycmVudERhdGVJbnN0YW5jZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgZGF0ZS1vbmx5IGZvcm1hdCwgY29tcGFyZSB0aGUgZGF0ZSBwYXJ0cyBvbmx5XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWREYXkgPSBzZWxlY3RlZERhdGUuaXNTYW1lKGN1cnJlbnREYXRlSW5zdGFuY2UsICdkYXknKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc3RyaW5nIGNvbXBhcmlzb24gaWYgcGFyc2luZyBmYWlsc1xuICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IGRhdGVTdHJpbmcgPT09IHRoaXMuZGF0YS5kYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGRhdGUgY29tcGFyaXNvbiBlcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgaXNTZWxlY3RlZERheSxcbiAgICAgICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzPy5maW5kKHEgPT4gZGF0ZVN0cmluZyA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBkYXRlIHByb2Nlc3NpbmcgZXJyb3JcbiAgICAgICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgd2Vla0RheTogdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5kYXkoKSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyLFxuICAgICAgICAgICAgaXNEaXNhYmxlZERheTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgZGF0ZXMudW5zaGlmdCh7IFxuICAgICAgICAgICAgZGF0ZTogMCwgXG4gICAgICAgICAgICB3ZWVrRGF5OiBpIC0gMSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IGN1cnJlbnRZZWFyTnVtYmVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGdlbmVyYXRlRGF0ZXMgZXJyb3JcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgaWYgKGRheS5kYXRlIDw9IDApIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBiYXNlIGRhdGUgc2VsZWN0aW9uIHdpdGhvdXQgdGltZVxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpLmRhdGUoZGF5LmRhdGUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKSk7XG4gICAgICBcbiAgICAgIC8vIEFwcGx5IHRoZSBjdXJyZW50IHRpbWUgdmFsdWVzIHRvIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbC5zZXQodGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1heERhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5lbmRPZihcImRheVwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbWF4IGRhdGUgcGFyc2luZyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5zdGFydE9mKFwiZGF5XCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsLnNldCh0aGlzLmRhdGEuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSk7XG4gICAgICBcbiAgICAgIGlmICgoKCFtaW5EYXRlIHx8IHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpIS5pc1NhbWVPckFmdGVyKG1pbkRhdGUpKSAmJiAoIW1heERhdGUgfHwgdGhpcy5jdXJyZW50U2VsZWN0aW9uU2lnbmFsKCkhLmlzU2FtZU9yQmVmb3JlKG1heERhdGUpKSAmJiB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXlTaWduYWwoKSkgfHwgKCFkYXkuaXNEaXNhYmxlZERheSAmJiAhdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgICAgICAuLi5kYXksXG4gICAgICAgICAgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksXG4gICAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gRm9yY2UgY2FsZW5kYXIgcmUtcmVuZGVyIHRvIHNob3cgaGlnaGxpZ2h0aW5nXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgYXBwbHkgd2hlbiBuZWl0aGVyIHRpbWUgbm9yIGFwcGx5IGJ1dHRvbiBpcyBlbmFibGVkLCBvdGhlcndpc2Ugd2FpdCBmb3IgdXNlciBhY3Rpb25cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAmJiAhdGhpcy5kYXRhLmRwQ29uZmlnLnNob3dBcHBseUJ1dHRvbikge1xuICAgICAgICAgIHRoaXMuYXBwbHlEYXRlKGRheSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGRheS50b2FzdE1lc3NhZ2UgfHwgKHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheSAmJiBkYXkudG9hc3RNZXNzYWdlKSkge1xuICAgICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBzZWxlY3REYXkgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhcHBseURhdGUoZGF5PzogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gICAgbGV0IGRhdGU6IHN0cmluZztcbiAgICBcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgdGltZSBpbnB1dCB2YWx1ZXMgd2hlbiB0aW1lIGlzIGVuYWJsZWQsIHJlZ2FyZGxlc3Mgb2YgY3VycmVudFNlbGVjdGlvblxuICAgICAgICBsZXQgaG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsKCkgPT09ICdQTScgJiYgaG91ciAhPT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnQU0nICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkYXRlIGluc3RhbmNlIHdpdGggdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgICAgY29uc3QgZmluYWxTZWxlY3Rpb24gPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKT8uZGF0ZSB8fCBkYXk/LmRhdGUgfHwgZGF5anMoKS5kYXRlKCkpXG4gICAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgICAubWludXRlKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSlcbiAgICAgICAgICAuc2Vjb25kKDApXG4gICAgICAgICAgLm1pbGxpc2Vjb25kKDApO1xuICAgICAgICBcbiAgICAgICAgZGF0ZSA9IGZpbmFsU2VsZWN0aW9uLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERhdGUtb25seSBmb3JtYXQgLSBubyB0aW1lXG4gICAgICAgIGRhdGUgPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAgIC5kYXRlKGRheSA/IGRheS5kYXRlIDogdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpPy5kYXRlIHx8IGRheWpzKCkuZGF0ZSgpKVxuICAgICAgICAgIC5ob3VyKDApXG4gICAgICAgICAgLm1pbnV0ZSgwKVxuICAgICAgICAgIC5zZWNvbmQoMClcbiAgICAgICAgICAubWlsbGlzZWNvbmQoMClcbiAgICAgICAgICAuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZGF5IHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSB8fCAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBhcHBseURhdGUgZXJyb3JcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgY2FuY2VsRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZShcIlwiKTtcbiAgfVxuXG4gIHRvZ2dsZU1vbnRoU2VsZWN0b3IoKSB7XG4gICAgaWYodGhpcy5pc1llYXJTZWxlY3Rpb25GbG93U2lnbmFsKCkpIHJldHVybjtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KCF0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwoKSk7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxuXG4gIHRvZ2dsZVllYXJTZWxlY3RvcigpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbC5zZXQoIXRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsKCkpO1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogMTIgfSxcbiAgICAgIChfLCBpbmRleCkgPT4gdGhpcy5zZWxlY3RlZFllYXJTaWduYWwoKSAtIDYgKyBpbmRleFxuICAgICkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2FsY3VsYXRlRGlzYWJsZWRNb250aHNBbmRZZWFycygpO1xuXG4gIH1cblxuICByZXNldERhdGVTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbC5zZXQoe1xuICAgICAgZGF0ZTogMCxcbiAgICAgIHdlZWtEYXk6IDAsXG4gICAgICBpc0N1cnJlbnREYXk6IGZhbHNlLFxuICAgICAgaXNTZWxlY3RlZERheTogZmFsc2UsXG4gICAgICBpc0Rpc2FibGVkRGF5OiBmYWxzZSxcbiAgICAgIHRvYXN0TWVzc2FnZTogJydcbiAgICB9KTtcbiAgICB0aGlzLmRhdGEuZGF0ZSA9ICcnO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGg6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLmF2YWlsYWJsZU1vbnRoc1NpZ25hbCgpLmluZGV4T2YobW9udGgpKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgc2VsZWN0WWVhcih5ZWFyOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQoeWVhcik7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5yZXNldERhdGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiZGF0YS5kaXNhYmxlQm94U2hhZG93PydyZW1vdmUtYm94LXNoYWRvdyc6JydcIiBhcmlhLWxhYmVsPVwiZGF0ZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2hlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ1BSRVZJT1VTJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibmF2aWdhdGVWaWV3KCdQUkVWSU9VUycpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSB8fCBpc1NlbGVjdGluZ01vbnRoKClcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nWWVhcigpXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRoU2VsZWN0b3IoKVwiIGNsYXNzPVwibW9udGgtaGVhZGVyXCI+XG4gICAgICB7eyBpc1llYXJTZWxlY3Rpb25GbG93KCkgPyBzZWxlY3RlZFllYXIoKSA6IGF2YWlsYWJsZU1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpXCIgKGNsaWNrKT1cInRvZ2dsZVllYXJTZWxlY3RvcigpXCIgY2xhc3M9XCJ5ZWFyLWhlYWRlclwiPlxuICAgICAge3sgaXNTZWxlY3RpbmdZZWFyKCkgPyB5ZWFyUmFuZ2UgOiBjdXJyZW50WWVhck51bWJlcigpIH19XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVZpZXcoJ05FWFQnKVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIm5hdmlnYXRlVmlldygnTkVYVCcpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpIHx8IGlzU2VsZWN0aW5nTW9udGgoKVxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1vbnRoIG9mIGF2YWlsYWJsZU1vbnRocygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cIm1vbnRoXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkTW9udGhzKClbaV0gJiYgc2VsZWN0TW9udGgobW9udGgpXCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdkaXNhYmxlLW1vbnRoJzogZGlzYWJsZWRNb250aHMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC1tb250aCc6ICFkaXNhYmxlZE1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXSAmJiBtb250aCA9PT0gYXZhaWxhYmxlTW9udGhzKClbY3VycmVudE1vbnRoTnVtYmVyKCldXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAge3sgbW9udGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiAqbmdJZj1cImlzU2VsZWN0aW5nWWVhcigpICYmICFpc1NlbGVjdGluZ01vbnRoKClcIiBjbGFzcz1cInllYXItc2VsZWN0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgeWVhciBvZiBhdmFpbGFibGVZZWFycygpOyBsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICBjbGFzcz1cInllYXJcIiBcbiAgICAgICAgICAgIChjbGljayk9XCIhZGlzYWJsZWRZZWFycygpW2ldICYmIHNlbGVjdFllYXIoeWVhcilcIiBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2Rpc2FibGUteWVhcic6IGRpc2FibGVkWWVhcnMoKVtpXSxcbiAgICAgICAgICAgICAgJ3NlbGVjdC15ZWFyJzogeWVhciA9PT0gY3VycmVudFllYXJOdW1iZXIoKVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNTZWxlY3RpbmdNb250aCgpICYmICFpc1NlbGVjdGluZ1llYXIoKVwiIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ2N1cnJlbnQtZGF5Jzogd2Vla0RheS5pc0N1cnJlbnREYXkgfVwiPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2VsZWN0ZWQtZGF5JzogZGF5LmlzU2VsZWN0ZWREYXksXG4gICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICFkYXkuaXNTZWxlY3RlZERheVxuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlcygpXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY3VycmVudC1kYXknOiBkYXkuaXNDdXJyZW50RGF5LFxuICAgICAgICAgICAgJ3NlbGVjdGVkLWRheSc6IGRheS5pc1NlbGVjdGVkRGF5LFxuICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCgpLCBjdXJyZW50WWVhck51bWJlcigpKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUaW1lIFBpY2tlciBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX3RpbWVcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1oZWFkZXJcIj5cbiAgICAgIDxzcGFuPlRpbWU8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyLWNvbnRyb2xzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiaG91cklucHV0XCI+SG91cjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cImhvdXJJbnB1dFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCJcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEhvdXIoKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRIb3VyU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25Ib3VySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVIb3VySW5wdXQoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICBbdGl0bGVdPVwiaXMxMkhvdXJGb3JtYXQoKSA/ICdFbnRlciBob3VyICgxLTEyKScgOiAnRW50ZXIgaG91ciAoMC0yMyknXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJtaW51dGVJbnB1dFwiPk1pbnV0ZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICBpZD1cIm1pbnV0ZUlucHV0XCJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICBbc3RlcF09XCIxXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZE1pbnV0ZSgpXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uTWludXRlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXRcIlxuICAgICAgICAgIHRpdGxlPVwiRW50ZXIgbWludXRlICgwLTU5KVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIiAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImFtUG1TZWxlY3RcIj5BTS9QTTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgaWQ9XCJhbVBtU2VsZWN0XCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFtUG0oKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdFwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19mb290ZXJcIiAqbmdJZj1cImRhdGEuZHBDb25maWcuc2hvd0FwcGx5QnV0dG9uIHx8IGRhdGEuZHBDb25maWcuZW5hYmxlVGltZVwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwiJ25vbmUnXCIgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiBzaXplPVwibWRcIiB0eXBlPVwicHJpbWFyeVwiIChjbGljayk9XCJhcHBseURhdGUoKVwiIFtkaXNhYmxlZF09XCIhKGRhdGEuZGF0ZSB8fCBsb2NhbFNlbGVjdGVkRGF0ZSgpPy5kYXRlKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
919
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHAtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVwaWNrZXJfdjIvdHotZHAtY29udGFpbmVyL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcGlja2VyX3YyL3R6LWRwLWNvbnRhaW5lci90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sS0FBb0IsTUFBTSxPQUFPLENBQUM7QUFDekMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0lDVzFELCtCQUFxRjtJQUFyRCwrS0FBUyw0QkFBcUIsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSw2SUFDRjs7OztJQUNBLCtCQUFvRjtJQUFuRCwrS0FBUywyQkFBb0IsS0FBQztJQUM3RCxZQUNGO0lBQUEsaUJBQU07OztJQURKLGNBQ0Y7SUFERSx5R0FDRjs7OztJQXlCSSwrQkFNTztJQUpILHFRQUFVLHVCQUFnQixVQUFPLDRCQUFr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O1lBQTlDLHVFQUE4QztZQWM5QyxjQUE4QztZQUE5Qyx1RUFBOEM7WUFjOUMsY0FBK0M7WUFBL0Msd0VBQStDO1lBSy9DLGNBQStDO1lBQS9DLHdFQUErQztZQTZCZCxjQUF1QztZQUF2Qyw0REFBdUM7WUFrRHJDLGNBQStEO1lBQS9ELHdGQUErRDs7O2lGRDFJL0Ysc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0UsV0FBVzs7c0JBcUhSLE1BQU07dUJBQUMsY0FBYztnREFxaEJsQyxVQUFVO2tCQURULFlBQVk7bUJBQUMsYUFBYTs7a0ZBcm9CaEIsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENPTlRBSU5FUl9EQVRBLCBEQVRFX0ZPUk1BVCB9IGZyb20gXCIuLi9kYXRlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5IH0gZnJvbSBcIi4uL21vZGVscy9kcC1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IGdldE1vbnRoIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b2FzdFwiO1xuaW1wb3J0IGRheWpzLCB7IERheWpzLCB0eiB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCdcblxuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHBcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90ei1kcC1jb250YWluZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3R6LWRwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRwQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YTogSURhdGVQaWNrZXJEYXRhO1xuICBwcml2YXRlIHBhcnNlWm9uZUluc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRhdGUgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0IHdpdGggZmFsbGJhY2tcbiAgICovXG4gIHByaXZhdGUgcGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gICAgaWYgKCFkYXRlU3RyaW5nIHx8IGRhdGVTdHJpbmcgPT09ICdJbnZhbGlkIERhdGUnIHx8IGRhdGVTdHJpbmcgPT09ICd1bmRlZmluZWQnIHx8IGRhdGVTdHJpbmcgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuIGRheWpzKCdpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgdHJ5IHRoZSBjb25maWd1cmVkIGZvcm1hdFxuICAgIGNvbnN0IGNvbmZpZ3VyZWRGb3JtYXQgPSB0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQ7XG4gICAgaWYgKGNvbmZpZ3VyZWRGb3JtYXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoZGF0ZVN0cmluZywgY29uZmlndXJlZEZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gZmFsbGJhY2sgZm9ybWF0c1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGNvbW1vbiBmb3JtYXRzIGlmIGNvbmZpZ3VyZWQgZm9ybWF0IGZhaWxzXG4gICAgY29uc3QgZmFsbGJhY2tGb3JtYXRzID0gW1xuICAgICAgJ0REL01NTS9ZWVlZJyxcbiAgICAgICdERC9NTS9ZWVlZJyxcbiAgICAgICdERC1NTU0tWVlZWScsXG4gICAgICAnREQtTU0tWVlZWScsXG4gICAgICAnWVlZWS1NTS1ERCdcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmb3JtYXQgb2YgZmFsbGJhY2tGb3JtYXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKGRhdGVTdHJpbmcsIGZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBmb3JtYXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgZm9ybWF0cyBmYWlsLCB0cnkgcGFyc2luZyB3aXRob3V0IGZvcm1hdCAobGV0IGRheWpzIGd1ZXNzKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKGRhdGVTdHJpbmcpO1xuICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgZGF0ZSB3aXRoIGFueSBmb3JtYXQ6JywgZGF0ZVN0cmluZywgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXlqcygnaW52YWxpZCcpO1xuICB9XG4gIHByaXZhdGUgcmF3V2Vla0RheXM6IHN0cmluZ1tdID0gW1wiU1VOXCIsIFwiTU9OXCIsIFwiVFVFXCIsIFwiV0VEXCIsIFwiVEhVXCIsIFwiRlJJXCIsIFwiU0FUXCJdO1xuICBcbiAgLy8gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAgcHJpdmF0ZSByZWFkb25seSB3ZWVrRGF5c1NpZ25hbCA9IHNpZ25hbDxJV2Vla0RheVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGg+KFwiSmFudWFyeVwiKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50WWVhck51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aERhdGVzU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGhEYXRlc1tdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNQcmV2aW91c01vbnRoRGlzYWJsZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsID0gc2lnbmFsPElDdXJyZW50TW9udGhEYXRlcyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93Qm9va2luZ09uRGlzYWJsZWREYXlTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25TaWduYWwgPSBzaWduYWw8YW55PihudWxsKTtcbiAgXG4gIC8vIFRpbWUgZnVuY3Rpb25hbGl0eSBzaWduYWxzXG4gIHJlYWRvbmx5IHNlbGVjdGVkSG91clNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBzZWxlY3RlZE1pbnV0ZVNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBzZWxlY3RlZEFtUG1TaWduYWwgPSBzaWduYWw8c3RyaW5nPignQU0nKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzU2VsZWN0aW5nTW9udGhTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzU2VsZWN0aW5nWWVhclNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXZhaWxhYmxlWWVhcnNTaWduYWwgPSBzaWduYWw8bnVtYmVyW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFibGVNb250aHNTaWduYWwgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZE1vbnRoc1NpZ25hbCA9IHNpZ25hbDxib29sZWFuW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlZFllYXJzU2lnbmFsID0gc2lnbmFsPGJvb2xlYW5bXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkWWVhclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzWWVhclNlbGVjdGlvbkZsb3dTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBmb3IgdGVtcGxhdGUgYWNjZXNzXG4gIHdlZWtEYXlzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy53ZWVrRGF5c1NpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoU2lnbmFsKCkpO1xuICBjdXJyZW50WWVhck51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aERhdGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbCgpKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBpc05leHRNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBsb2NhbFNlbGVjdGVkRGF0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSk7XG4gIGFsbG93Qm9va2luZ09uRGlzYWJsZWREYXkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXlTaWduYWwoKSk7XG4gIGN1cnJlbnRTZWxlY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25TaWduYWwoKSk7XG4gIFxuICAvLyBUaW1lIGZ1bmN0aW9uYWxpdHkgY29tcHV0ZWQgcHJvcGVydGllc1xuICBzZWxlY3RlZEhvdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpKTtcbiAgc2VsZWN0ZWRNaW51dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkpO1xuICBzZWxlY3RlZEFtUG0gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpKTtcblxuICBpc1NlbGVjdGluZ01vbnRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpO1xuICBpc1NlbGVjdGluZ1llYXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKTtcbiAgYXZhaWxhYmxlWWVhcnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF2YWlsYWJsZVllYXJzU2lnbmFsKCkpO1xuICBhdmFpbGFibGVNb250aHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF2YWlsYWJsZU1vbnRoc1NpZ25hbCgpKTtcbiAgZGlzYWJsZWRNb250aHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRpc2FibGVkTW9udGhzU2lnbmFsKCkpO1xuICBkaXNhYmxlZFllYXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaXNhYmxlZFllYXJzU2lnbmFsKCkpO1xuICBzZWxlY3RlZFllYXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpKTtcbiAgaXNZZWFyU2VsZWN0aW9uRmxvdyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbCgpKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTlRBSU5FUl9EQVRBKSBkYXRhOiBJRGF0ZVBpY2tlckRhdGEsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBwYXJzZVpvbmVJbnN0YW5jZSB3aXRoIGJldHRlciBlcnJvciBoYW5kbGluZ1xuICAgIHRoaXMucGFyc2Vab25lSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YT8uZHBDb25maWc/LnRpbWV6b25lKSB7XG4gICAgICAgICAgcmV0dXJuIGRheWpzLnR6KGFyZ3NbMF0sIGFyZ3NbMV0gIHx8ICdERC9NTS9ZWVlZJywgdGhpcy5kYXRhLmRwQ29uZmlnLnRpbWV6b25lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSB0aW1lem9uZSBwYXJzaW5nIGVycm9yLCBmYWxsYmFjayB0byBsb2NhbCB0aW1lXG4gICAgICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBzYWZlbHkgdXNpbmcgc2lnbmFsc1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkubW9udGgoKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcigpKTtcbiAgICB0aGlzLndlZWtEYXlzU2lnbmFsLnNldCh0aGlzLnJhd1dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtkYXlbMF19JHtkYXkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgaXNDdXJyZW50RGF5OiB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdCkge1xuICAgICAgdGhpcy5kYXRhLmRwQ29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmRhdGEuZHBDb25maWcsXG4gICAgICAgIGZvcm1hdDogREFURV9GT1JNQVRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYoIXRoaXMuZGF0YT8uZGF0ZSl7XG4gICAgICB0aGlzLmRhdGEuZGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwuc2V0KEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiBkYXlqcygpLm1vbnRoKGkpLmZvcm1hdCgnTU1NTScpKSk7XG4gICAgdGhpcy5hdmFpbGFibGVZZWFyc1NpZ25hbC5zZXQoQXJyYXkuZnJvbShcbiAgICAgIHsgbGVuZ3RoOiAxMiB9LFxuICAgICAgKF8sIGluZGV4KSA9PiB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgLSA2ICsgaW5kZXhcbiAgICApKTtcbiAgICBcbiAgfVxuXG4gIG9uSG91cklucHV0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgIT09IHRydWUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgICAgaWYgKHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMTIpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAyMykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbk1pbnV0ZUlucHV0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgIT09IHRydWUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSA1OSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSG91cklucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgIFxuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpIDwgMSkgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDEpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkgPiAxMikgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsKCkgPCAwKSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoMCk7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEhvdXJTaWduYWwoKSA+IDIzKSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoMjMpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlTWludXRlSW5wdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICE9PSB0cnVlKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwoKSA8IDApIHRoaXMuc2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KDApO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkgPiA1OSkgdGhpcy5zZWxlY3RlZE1pbnV0ZVNpZ25hbC5zZXQoNTkpO1xuICB9XG5cbiAgaXMxMkhvdXJGb3JtYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIFxuICAgICAgICAgICAodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpIHx8IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ2EnKSk7XG4gIH1cblxuICByZXRyYWN0RGF5TW9udGgoZGF5OiBhbnksIG1vbnRoOiBhbnksIHllYXI6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGAke2RheX0gJHttb250aH0gJHt5ZWFyfWA7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0aW1lIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRpbWVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHllYXJSYW5nZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpIC0gNn0gLSAke3RoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgKyA1fWA7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5kYXRlKSB7XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSBleGlzdGluZyBkYXRlIGZvciB0aW1lIHZhbHVlc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgbGV0IGhvdXIgPSBjdXJyZW50RGF0ZS5ob3VyKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldChjdXJyZW50RGF0ZS5taW51dGUoKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMTI7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSBob3VyIC0gMTI7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91clNpZ25hbC5zZXQoaG91cik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgZGF0ZSwgdXNlIGRlZmF1bHRzXG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRUaW1lVmFsdWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFBhcnNpbmcgZXJyb3IsIHVzZSBkZWZhdWx0c1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFRpbWVWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBcbiAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gZXhpc3RpbmcgZGF0ZSwgdXNlIGRlZmF1bHRzXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFRpbWVWYWx1ZXMoKTtcbiAgICAgIH1cbiAgICBcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVmYXVsdFRpbWVWYWx1ZXMoKTogdm9pZCB7XG4gICAgLy8gVXNlIGN1cnJlbnQgdGltZSBhcyBkZWZhdWx0IGluc3RlYWQgb2YgMTI6MDAgUE1cbiAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgIGNvbnN0IGN1cnJlbnRIb3VyID0gbm93LmhvdXIoKTtcbiAgICBjb25zdCBjdXJyZW50TWludXRlID0gbm93Lm1pbnV0ZSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIENvbnZlcnQgY3VycmVudCB0aW1lIHRvIDEyLWhvdXIgZm9ybWF0XG4gICAgICBsZXQgaG91cjEyID0gY3VycmVudEhvdXI7XG4gICAgICBsZXQgYW1QbSA9ICdBTSc7XG4gICAgICBcbiAgICAgIGlmIChjdXJyZW50SG91ciA9PT0gMCkge1xuICAgICAgICBob3VyMTIgPSAxMjtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICBob3VyMTIgPSAxMjtcbiAgICAgICAgYW1QbSA9ICdQTSc7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgaG91cjEyID0gY3VycmVudEhvdXIgLSAxMjtcbiAgICAgICAgYW1QbSA9ICdQTSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbVBtID0gJ0FNJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXJTaWduYWwuc2V0KGhvdXIxMik7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIGN1cnJlbnQgdGltZSBkaXJlY3RseSBmb3IgMjQtaG91ciBmb3JtYXRcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtU2lnbmFsLnNldCgnQU0nKTsgLy8gTm90IHVzZWQgaW4gMjQtaG91ciBmb3JtYXQgYnV0IGtlZXAgY29uc2lzdGVudFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudERhdGVJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5kYXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEuZGF0ZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsLnNldChzZWxlY3RlZERhdGUueWVhcigpKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZERhdGUueWVhcigpKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWREYXRlLm1vbnRoKCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aChzZWxlY3RlZERhdGUubW9udGgoKSkpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsLnNldCh7XG4gICAgICAgICAgICAgIGRhdGU6IHNlbGVjdGVkRGF0ZS5kYXRlKCksXG4gICAgICAgICAgICAgIHdlZWtEYXk6IHNlbGVjdGVkRGF0ZS5kYXkoKSxcbiAgICAgICAgICAgICAgbW9udGg6IHNlbGVjdGVkRGF0ZS5tb250aCgpLFxuICAgICAgICAgICAgICB5ZWFyOiBzZWxlY3RlZERhdGUueWVhcigpLFxuICAgICAgICAgICAgICBpc1NlbGVjdGVkRGF5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLm1vbnRoKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICB9XG5cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5zdGFuY2UgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgaWYgKG1pbkRhdGU/LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKSk7XG4gICAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICBpZiAobWF4RGF0ZT8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsLnNldChtYXhEYXRlLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCkge1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIFxuICAgIHRoaXMuZGlzYWJsZWRNb250aHNTaWduYWwuc2V0KHRoaXMuYXZhaWxhYmxlTW9udGhzU2lnbmFsKCkubWFwKChtb250aCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1vbnRoRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkpLm1vbnRoKGluZGV4KTtcbiAgICAgIHJldHVybiAobWluRGF0ZS5pc1ZhbGlkKCkgJiYgbW9udGhEYXRlLmlzQmVmb3JlKG1pbkRhdGUsICdtb250aCcpKSB8fCBcbiAgICAgICAgICAgICAobWF4RGF0ZS5pc1ZhbGlkKCkgJiYgbW9udGhEYXRlLmlzQWZ0ZXIobWF4RGF0ZSwgJ21vbnRoJykpO1xuICAgIH0pKTtcbiAgXG4gICAgdGhpcy5kaXNhYmxlZFllYXJzU2lnbmFsLnNldCh0aGlzLmF2YWlsYWJsZVllYXJzU2lnbmFsKCkubWFwKCh5ZWFyKSA9PiB7XG4gICAgICBjb25zdCB5ZWFyRGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKHllYXIpO1xuICAgICAgcmV0dXJuIChtaW5EYXRlLmlzVmFsaWQoKSAmJiB5ZWFyRGF0ZS5pc0JlZm9yZShtaW5EYXRlLCAneWVhcicpKSB8fCBcbiAgICAgICAgICAgICAobWF4RGF0ZS5pc1ZhbGlkKCkgJiYgeWVhckRhdGUuaXNBZnRlcihtYXhEYXRlLCAneWVhcicpKTtcbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwoKSkge1xuICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWluRGF0ZS5pc1ZhbGlkKCkgJiYgKCh0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpIC0gNikgPD0gbWluRGF0ZS55ZWFyKCkpKTtcbiAgICAgIHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWF4RGF0ZS5pc1ZhbGlkKCkgJiYgKCh0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpICsgNSkgPj0gbWF4RGF0ZS55ZWFyKCkpKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBuYXZpZ2F0ZVZpZXcoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIGlmICgoZGlyZWN0aW9uID09PSAnTkVYVCcgJiYgKHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCgpIHx8IHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbCgpKSkgfHxcbiAgICAgICAgKGRpcmVjdGlvbiA9PT0gJ1BSRVZJT1VTJyAmJiAodGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCgpIHx8IHRoaXMuaXNTZWxlY3RpbmdNb250aFNpZ25hbCgpKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYodGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwoKSl7XG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbCgpICsgKGRpcmVjdGlvbiA9PT0gXCJORVhUXCIgPyAxMiA6IC0xMik7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQobmV3U2VsZWN0ZWRZZWFyKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlWWVhcnNTaWduYWwuc2V0KEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiAxMiB9LFxuICAgICAgICAoXywgaW5kZXgpID0+IG5ld1NlbGVjdGVkWWVhciAtIDYgKyBpbmRleFxuICAgICAgKSk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBsZXQgdGhpc01vbnRoIDogZGF5anMuRGF5anMgPSB0aGlzLnBhcnNlWm9uZUluc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgICAgdGhpc01vbnRoID0gZGlyZWN0aW9uID09PSBcIk5FWFRcIiA/IHRoaXNNb250aC5hZGQoMSwgXCJtb250aFwiKSA6IHRoaXNNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC5tb250aCgpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzTW9udGgubW9udGgoKSkpO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXJTaWduYWwuc2V0KHRoaXNNb250aC55ZWFyKCkpO1xuICAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLnllYXIoKSk7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpc01vbnRoLm1vbnRoKCksIHRoaXNNb250aC55ZWFyKCkpKTtcbiAgICB9XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbGV0IHRoaXNNb250aDogZGF5anMuRGF5anMgPSBkYXlqcygpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5hZGQoMSwgXCJtb250aFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLm1vbnRoKCkpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXNNb250aC5tb250aCgpKSk7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzTW9udGgubW9udGgoKSwgdGhpc01vbnRoLnllYXIoKSkpO1xuICAgICAgXG4gICAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIG5hdmlnYXRlTW9udGggZXJyb3JcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBjb25zdCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcygpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXlzSW5Nb250aCgpO1xuICAgICAgXG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHModGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBtaW4gZGF0ZSBwYXJzaW5nIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWF4RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIG1heCBkYXRlIHBhcnNpbmcgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBmb3IgKGxldCBjdXJyZW50RGF0ZSA9IDE7IGN1cnJlbnREYXRlIDw9IGRheXNJbk1vbnRoOyBjdXJyZW50RGF0ZSsrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQ/LnNvbWUoZCA9PiBkID09PSBkYXRlU3RyaW5nKSB8fCBmYWxzZTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWluRGF0ZT8uaXNWYWxpZCgpICYmIHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWluRGF0ZS5pc0FmdGVyKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWF4RGF0ZT8uaXNWYWxpZCgpICYmIHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWF4RGF0ZS5pc0JlZm9yZShkYXRlLCBcImRheVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGVJbnN0YW5jZSA9IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID0gY3VycmVudERhdGVJbnN0YW5jZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IGRheWpzKCkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGxldCBpc1NlbGVjdGVkRGF5ID0gZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUHJpb3JpdGl6ZSBjdXJyZW50IHNlbGVjdGlvbiBvdmVyIHByZXZpb3VzbHkgYXBwbGllZCBkYXRlXG4gICAgICAgICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKSAmJiBcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZVNpZ25hbCgpIS5kYXRlID09PSBjdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkhLm1vbnRoID09PSBtb250aCAmJlxuICAgICAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkhLnllYXIgPT09IGN1cnJlbnRZZWFyTnVtYmVyKSB7XG4gICAgICAgICAgICBpc1NlbGVjdGVkRGF5ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5kYXRlICYmICF0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgY2hlY2sgcHJldmlvdXNseSBhcHBsaWVkIGRhdGUgaWYgbm8gY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmRhdGEuZGF0ZSk7XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZERheSA9IHNlbGVjdGVkRGF0ZS5pc1NhbWUoY3VycmVudERhdGVJbnN0YW5jZSwgJ2RheScpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHN0cmluZyBjb21wYXJpc29uIGlmIHBhcnNpbmcgZmFpbHNcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkRGF5ID0gZGF0ZVN0cmluZyA9PT0gdGhpcy5kYXRhLmRhdGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBkYXRlIGNvbXBhcmlzb24gZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIHdlZWtEYXk6IGRhdGUuZGF5KCksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50WWVhck51bWJlcixcbiAgICAgICAgICAgIGlzQ3VycmVudERheSxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWREYXksXG4gICAgICAgICAgICB0b2FzdE1lc3NhZ2U6IHRoaXMuZGF0YS5tZXNzYWdlcz8uZmluZChxID0+IGRhdGVTdHJpbmcgPT09IHEuZGF0ZSk/Lm1lc3NhZ2UgfHwgXCJcIixcbiAgICAgICAgICAgIGlzRGlzYWJsZWREYXlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgZGF0ZSBwcm9jZXNzaW5nIGVycm9yXG4gICAgICAgICAgZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIHdlZWtEYXk6IHRoaXMucGFyc2Vab25lSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSkuZGF5KCksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50WWVhck51bWJlcixcbiAgICAgICAgICAgIGlzRGlzYWJsZWREYXk6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gZGF0ZXNbMF0ud2Vla0RheTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgIGRhdGVzLnVuc2hpZnQoeyBcbiAgICAgICAgICAgIGRhdGU6IDAsIFxuICAgICAgICAgICAgd2Vla0RheTogaSAtIDEsXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50WWVhck51bWJlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBnZW5lcmF0ZURhdGVzIGVycm9yXG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIHNlbGVjdERheShkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgYmFzZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWVcbiAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbC5zZXQodGhpcy5wYXJzZVpvbmVJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKS5kYXRlKGRheS5kYXRlKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMCkpO1xuICAgICAgXG4gICAgICAvLyBBcHBseSB0aGUgY3VycmVudCB0aW1lIHZhbHVlcyB0byB0aGUgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgbGV0IGhvdXIgPSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnUE0nICYmIGhvdXIgIT09IDEyKSB7XG4gICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEFtUG1TaWduYWwoKSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb25TaWduYWwuc2V0KHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpIVxuICAgICAgICAgIC5ob3VyKGhvdXIpXG4gICAgICAgICAgLm1pbnV0ZSh0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkpKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbGV0IG1heERhdGUgPSBudWxsO1xuICAgICAgbGV0IG1pbkRhdGUgPSBudWxsO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtYXhEYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkuZW5kT2YoXCJkYXlcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIG1heCBkYXRlIHBhcnNpbmcgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtaW5EYXRlID0gdGhpcy5wYXJzZVpvbmVJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkuc3RhcnRPZihcImRheVwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgbWluIGRhdGUgcGFyc2luZyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheVNpZ25hbC5zZXQodGhpcy5kYXRhLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXkpO1xuICAgICAgXG4gICAgICBpZiAoKCghbWluRGF0ZSB8fCB0aGlzLmN1cnJlbnRTZWxlY3Rpb25TaWduYWwoKSEuaXNTYW1lT3JBZnRlcihtaW5EYXRlKSkgJiYgKCFtYXhEYXRlIHx8IHRoaXMuY3VycmVudFNlbGVjdGlvblNpZ25hbCgpIS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKSkgJiYgdGhpcy5hbGxvd0Jvb2tpbmdPbkRpc2FibGVkRGF5U2lnbmFsKCkpIHx8ICghZGF5LmlzRGlzYWJsZWREYXkgJiYgIXRoaXMuYWxsb3dCb29raW5nT25EaXNhYmxlZERheVNpZ25hbCgpKSkge1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsLnNldCh7XG4gICAgICAgICAgLi4uZGF5LFxuICAgICAgICAgIG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLFxuICAgICAgICAgIHllYXI6IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZvcmNlIGNhbGVuZGFyIHJlLXJlbmRlciB0byBzaG93IGhpZ2hsaWdodGluZ1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgICAgIFxuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGFwcGx5IHdoZW4gbmVpdGhlciB0aW1lIG5vciBhcHBseSBidXR0b24gaXMgZW5hYmxlZCwgb3RoZXJ3aXNlIHdhaXQgZm9yIHVzZXIgYWN0aW9uXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgIXRoaXMuZGF0YS5kcENvbmZpZy5zaG93QXBwbHlCdXR0b24pIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RGF0ZShkYXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkYXkudG9hc3RNZXNzYWdlIHx8ICh0aGlzLmFsbG93Qm9va2luZ09uRGlzYWJsZWREYXkgJiYgZGF5LnRvYXN0TWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKGRheS50b2FzdE1lc3NhZ2UsIDQwMDApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgc2VsZWN0RGF5IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXBwbHlEYXRlKGRheT86IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGxldCBkYXRlOiBzdHJpbmc7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIHRpbWUgaW5wdXQgdmFsdWVzIHdoZW4gdGltZSBpcyBlbmFibGVkLCByZWdhcmRsZXNzIG9mIGN1cnJlbnRTZWxlY3Rpb25cbiAgICAgICAgbGV0IGhvdXIgPSB0aGlzLnNlbGVjdGVkSG91clNpZ25hbCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQW1QbVNpZ25hbCgpID09PSAnUE0nICYmIGhvdXIgIT09IDEyKSB7XG4gICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEFtUG1TaWduYWwoKSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZGF0ZSBpbnN0YW5jZSB3aXRoIHRoZSBzZWxlY3RlZCB0aW1lXG4gICAgICAgIGNvbnN0IGZpbmFsU2VsZWN0aW9uID0gZGF5anMoKVxuICAgICAgICAgIC55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAuZGF0ZSh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCk/LmRhdGUgfHwgZGF5Py5kYXRlIHx8IGRheWpzKCkuZGF0ZSgpKVxuICAgICAgICAgIC5ob3VyKGhvdXIpXG4gICAgICAgICAgLm1pbnV0ZSh0aGlzLnNlbGVjdGVkTWludXRlU2lnbmFsKCkpXG4gICAgICAgICAgLnNlY29uZCgwKVxuICAgICAgICAgIC5taWxsaXNlY29uZCgwKTtcbiAgICAgICAgXG4gICAgICAgIGRhdGUgPSBmaW5hbFNlbGVjdGlvbi5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEYXRlLW9ubHkgZm9ybWF0IC0gbm8gdGltZVxuICAgICAgICBkYXRlID0gZGF5anMoKVxuICAgICAgICAgIC55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAuZGF0ZShkYXkgPyBkYXkuZGF0ZSA6IHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwoKT8uZGF0ZSB8fCBkYXlqcygpLmRhdGUoKSlcbiAgICAgICAgICAuaG91cigwKVxuICAgICAgICAgIC5taW51dGUoMClcbiAgICAgICAgICAuc2Vjb25kKDApXG4gICAgICAgICAgLm1pbGxpc2Vjb25kKDApXG4gICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGRheSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlU2lnbmFsKCkgfHwgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSkge1xuICAgICAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZShkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgYXBwbHlEYXRlIGVycm9yXG4gICAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZShcIlwiKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93bi5lc2NcIilcbiAgY2xvc2VPbkVzYygpIHtcbiAgICB0aGlzLmNhbmNlbERhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UoXCJcIik7XG4gIH1cblxuICB0b2dnbGVNb250aFNlbGVjdG9yKCkge1xuICAgIGlmKHRoaXMuaXNZZWFyU2VsZWN0aW9uRmxvd1NpZ25hbCgpKSByZXR1cm47XG4gICAgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsLnNldCghdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsKCkpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gIH1cblxuICB0b2dnbGVZZWFyU2VsZWN0b3IoKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZ1llYXJTaWduYWwuc2V0KCF0aGlzLmlzU2VsZWN0aW5nWWVhclNpZ25hbCgpKTtcbiAgICB0aGlzLnNlbGVjdGVkWWVhclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgICB0aGlzLmF2YWlsYWJsZVllYXJzU2lnbmFsLnNldChBcnJheS5mcm9tKFxuICAgICAgeyBsZW5ndGg6IDEyIH0sXG4gICAgICAoXywgaW5kZXgpID0+IHRoaXMuc2VsZWN0ZWRZZWFyU2lnbmFsKCkgLSA2ICsgaW5kZXhcbiAgICApKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpc2FibGVkTW9udGhzQW5kWWVhcnMoKTtcblxuICB9XG5cbiAgcmVzZXREYXRlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVTaWduYWwuc2V0KHtcbiAgICAgIGRhdGU6IDAsXG4gICAgICB3ZWVrRGF5OiAwLFxuICAgICAgaXNDdXJyZW50RGF5OiBmYWxzZSxcbiAgICAgIGlzU2VsZWN0ZWREYXk6IGZhbHNlLFxuICAgICAgaXNEaXNhYmxlZERheTogZmFsc2UsXG4gICAgICB0b2FzdE1lc3NhZ2U6ICcnXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhLmRhdGUgPSAnJztcbiAgfVxuXG4gIHNlbGVjdE1vbnRoKG1vbnRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5hdmFpbGFibGVNb250aHNTaWduYWwoKS5pbmRleE9mKG1vbnRoKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nTW9udGhTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzWWVhclNlbGVjdGlvbkZsb3dTaWduYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlc2V0RGF0ZVNlbGVjdGlvbigpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZFllYXJTaWduYWwuc2V0KHllYXIpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHllYXIpO1xuICAgIHRoaXMuaXNTZWxlY3RpbmdZZWFyU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5pc1NlbGVjdGluZ01vbnRoU2lnbmFsLnNldCh0cnVlKTtcbiAgICB0aGlzLmlzWWVhclNlbGVjdGlvbkZsb3dTaWduYWwuc2V0KHRydWUpO1xuICAgIHRoaXMucmVzZXREYXRlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5jYWxjdWxhdGVEaXNhYmxlZE1vbnRoc0FuZFllYXJzKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImRhdGEuZGlzYWJsZUJveFNoYWRvdz8ncmVtb3ZlLWJveC1zaGFkb3cnOicnXCIgYXJpYS1sYWJlbD1cImRhdGUgcGlja2VyXCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gIDxkaXYgdGFiaW5kZXg9XCItMVwiIGNka0ZvY3VzSW5pdGlhbD48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19oZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVWaWV3KCdQUkVWSU9VUycpXCJcbiAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgTW9udGhcIlxuICAgICAgKGtleXVwLmVudGVyKT1cIm5hdmlnYXRlVmlldygnUFJFVklPVVMnKVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzUHJldmlvdXNNb250aERpc2FibGVkKCkgfHwgaXNTZWxlY3RpbmdNb250aCgpXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgPjwvcGF0aD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFpc1NlbGVjdGluZ1llYXIoKVwiIChjbGljayk9XCJ0b2dnbGVNb250aFNlbGVjdG9yKClcIiBjbGFzcz1cIm1vbnRoLWhlYWRlclwiPlxuICAgICAge3sgaXNZZWFyU2VsZWN0aW9uRmxvdygpID8gc2VsZWN0ZWRZZWFyKCkgOiBhdmFpbGFibGVNb250aHMoKVtjdXJyZW50TW9udGhOdW1iZXIoKV0gfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGgoKVwiIChjbGljayk9XCJ0b2dnbGVZZWFyU2VsZWN0b3IoKVwiIGNsYXNzPVwieWVhci1oZWFkZXJcIj5cbiAgICAgIHt7IGlzU2VsZWN0aW5nWWVhcigpID8geWVhclJhbmdlIDogY3VycmVudFllYXJOdW1iZXIoKSB9fVxuICAgIDwvZGl2PlxuXG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVWaWV3KCdORVhUJylcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IE1vbnRoXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJuYXZpZ2F0ZVZpZXcoJ05FWFQnKVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWQoKSB8fCBpc1NlbGVjdGluZ01vbnRoKClcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJpc1NlbGVjdGluZ01vbnRoKCkgJiYgIWlzU2VsZWN0aW5nWWVhcigpXCIgY2xhc3M9XCJtb250aC1zZWxlY3RvclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtb250aCBvZiBhdmFpbGFibGVNb250aHMoKTsgbGV0IGkgPSBpbmRleFwiIFxuICAgICAgICAgICAgY2xhc3M9XCJtb250aFwiIFxuICAgICAgICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZE1vbnRocygpW2ldICYmIHNlbGVjdE1vbnRoKG1vbnRoKVwiIFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZGlzYWJsZS1tb250aCc6IGRpc2FibGVkTW9udGhzKClbaV0sXG4gICAgICAgICAgICAgICdzZWxlY3QtbW9udGgnOiAhZGlzYWJsZWRNb250aHMoKVtjdXJyZW50TW9udGhOdW1iZXIoKV0gJiYgbW9udGggPT09IGF2YWlsYWJsZU1vbnRocygpW2N1cnJlbnRNb250aE51bWJlcigpXVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgIHt7IG1vbnRoIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgKm5nSWY9XCJpc1NlbGVjdGluZ1llYXIoKSAmJiAhaXNTZWxlY3RpbmdNb250aCgpXCIgY2xhc3M9XCJ5ZWFyLXNlbGVjdG9yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHllYXIgb2YgYXZhaWxhYmxlWWVhcnMoKTsgbGV0IGkgPSBpbmRleFwiIFxuICAgICAgICAgICAgY2xhc3M9XCJ5ZWFyXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwiIWRpc2FibGVkWWVhcnMoKVtpXSAmJiBzZWxlY3RZZWFyKHllYXIpXCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdkaXNhYmxlLXllYXInOiBkaXNhYmxlZFllYXJzKClbaV0sXG4gICAgICAgICAgICAgICdzZWxlY3QteWVhcic6IHllYXIgPT09IGN1cnJlbnRZZWFyTnVtYmVyKClcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU2VsZWN0aW5nTW9udGgoKSAmJiAhaXNTZWxlY3RpbmdZZWFyKClcIiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXMoKVwiPlxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdjdXJyZW50LWRheSc6IHdlZWtEYXkuaXNDdXJyZW50RGF5IH1cIj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1NlbGVjdGluZ01vbnRoKCkgJiYgIWlzU2VsZWN0aW5nWWVhcigpXCIgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX19kYXlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NlbGVjdGVkLWRheSc6IGRheS5pc1NlbGVjdGVkRGF5LFxuICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhZGF5LmlzU2VsZWN0ZWREYXlcbiAgICAgICAgfVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgY3VycmVudE1vbnRoRGF0ZXMoKVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoZGF5KVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoZGF5KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2N1cnJlbnQtZGF5JzogZGF5LmlzQ3VycmVudERheSxcbiAgICAgICAgICAgICdzZWxlY3RlZC1kYXknOiBkYXkuaXNTZWxlY3RlZERheSxcbiAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBjdXJyZW50TW9udGgoKSwgY3VycmVudFllYXJOdW1iZXIoKSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGltZSBQaWNrZXIgU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyX190aW1lXCIgKm5nSWY9XCJkYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICA8c3Bhbj5UaW1lPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlci1jb250cm9sc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImhvdXJJbnB1dFwiPkhvdXI8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgaWQ9XCJob3VySW5wdXRcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbWluXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxIDogMFwiXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiXG4gICAgICAgICAgW3N0ZXBdPVwiMVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRIb3VyKClcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkSG91clNpZ25hbC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uSG91cklucHV0KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlSG91cklucHV0KClcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgW3RpdGxlXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAnRW50ZXIgaG91ciAoMS0xMiknIDogJ0VudGVyIGhvdXIgKDAtMjMpJ1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwibWludXRlSW5wdXRcIj5NaW51dGU8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgaWQ9XCJtaW51dGVJbnB1dFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIG1pbj1cIjBcIiBcbiAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgW3N0ZXBdPVwiMVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRNaW51dGUoKVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRNaW51dGVTaWduYWwuc2V0KCRldmVudClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvbk1pbnV0ZUlucHV0KCRldmVudClcIlxuICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlTWludXRlSW5wdXQoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCJcbiAgICAgICAgICB0aXRsZT1cIkVudGVyIG1pbnV0ZSAoMC01OSlcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCIgKm5nSWY9XCJpczEySG91ckZvcm1hdCgpXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJhbVBtU2VsZWN0XCI+QU0vUE08L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgIGlkPVwiYW1QbVNlbGVjdFwiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBbVBtKClcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkQW1QbVNpZ25hbC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJhbS1wbS1zZWxlY3RcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lcl9fZm9vdGVyXCIgKm5nSWY9XCJkYXRhLmRwQ29uZmlnLnNob3dBcHBseUJ1dHRvbiB8fCBkYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWVcIj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gc2l6ZT1cIm1kXCIgdHlwZT1cIidub25lJ1wiIChjbGljayk9XCJjYW5jZWxEYXRlUGlja2VyKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1pcy1idXR0b24gc2l6ZT1cIm1kXCIgdHlwZT1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlEYXRlKClcIiBbZGlzYWJsZWRdPVwiIShkYXRhLmRhdGUgfHwgbG9jYWxTZWxlY3RlZERhdGUoKT8uZGF0ZSlcIj5BcHBseTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19