@fundamental-ngx/core 0.43.16 → 0.43.17

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 (90) hide show
  1. package/calendar/calendar-directives.d.ts +11 -9
  2. package/calendar/calendar-header/calendar-header.component.d.ts +5 -23
  3. package/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.d.ts +1 -20
  4. package/calendar/calendar-views/calendar-day-view/calendar-day-view.component.d.ts +3 -41
  5. package/calendar/calendar-views/calendar-month-view/calendar-month-view.component.d.ts +1 -20
  6. package/calendar/calendar-views/calendar-year-view/calendar-year-view.component.d.ts +1 -20
  7. package/calendar/calendar.module.d.ts +2 -1
  8. package/calendar/i18n/calendar-i18n-labels.d.ts +20 -22
  9. package/calendar/patch-deprecated-i18n-labels.d.ts +6 -0
  10. package/combobox/combobox.component.d.ts +9 -7
  11. package/esm2020/calendar/calendar-directives.mjs +27 -20
  12. package/esm2020/calendar/calendar-header/calendar-header.component.mjs +30 -60
  13. package/esm2020/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.mjs +9 -34
  14. package/esm2020/calendar/calendar-views/calendar-day-view/calendar-day-view.component.mjs +10 -62
  15. package/esm2020/calendar/calendar-views/calendar-month-view/calendar-month-view.component.mjs +9 -34
  16. package/esm2020/calendar/calendar-views/calendar-year-view/calendar-year-view.component.mjs +9 -34
  17. package/esm2020/calendar/calendar.component.mjs +13 -3
  18. package/esm2020/calendar/calendar.module.mjs +5 -4
  19. package/esm2020/calendar/i18n/calendar-i18n-labels.mjs +22 -28
  20. package/esm2020/calendar/patch-deprecated-i18n-labels.mjs +26 -0
  21. package/esm2020/combobox/combobox.component.mjs +20 -9
  22. package/esm2020/date-picker/date-picker.component.mjs +1 -1
  23. package/esm2020/datetime-picker/datetime-picker.component.mjs +1 -1
  24. package/esm2020/input-group/input-group.component.mjs +6 -4
  25. package/esm2020/multi-combobox/multi-combobox.component.mjs +15 -17
  26. package/esm2020/multi-input/multi-input.component.mjs +13 -11
  27. package/esm2020/popover/base/base-popover.class.mjs +2 -2
  28. package/esm2020/popover/popover-body/popover-body.component.mjs +2 -2
  29. package/esm2020/select/select.component.mjs +3 -3
  30. package/esm2020/table/table-wrapper.component.mjs +2 -2
  31. package/esm2020/table/table.component.mjs +2 -2
  32. package/esm2020/time-picker/time-picker.component.mjs +1 -1
  33. package/esm2020/token/token.component.mjs +10 -8
  34. package/esm2020/token/tokenizer.component.mjs +5 -4
  35. package/fesm2015/fundamental-ngx-core-calendar.mjs +156 -282
  36. package/fesm2015/fundamental-ngx-core-calendar.mjs.map +1 -1
  37. package/fesm2015/fundamental-ngx-core-combobox.mjs +16 -6
  38. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  39. package/fesm2015/fundamental-ngx-core-date-picker.mjs +1 -1
  40. package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
  41. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +1 -1
  42. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  43. package/fesm2015/fundamental-ngx-core-input-group.mjs +5 -3
  44. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  45. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +10 -13
  46. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  47. package/fesm2015/fundamental-ngx-core-multi-input.mjs +11 -9
  48. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  49. package/fesm2015/fundamental-ngx-core-popover.mjs +2 -2
  50. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-select.mjs +2 -2
  52. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  53. package/fesm2015/fundamental-ngx-core-table.mjs +4 -4
  54. package/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  55. package/fesm2015/fundamental-ngx-core-time-picker.mjs +1 -1
  56. package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  57. package/fesm2015/fundamental-ngx-core-token.mjs +11 -9
  58. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-calendar.mjs +162 -282
  60. package/fesm2020/fundamental-ngx-core-calendar.mjs.map +1 -1
  61. package/fesm2020/fundamental-ngx-core-combobox.mjs +18 -7
  62. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  63. package/fesm2020/fundamental-ngx-core-date-picker.mjs +1 -1
  64. package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +1 -1
  66. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  67. package/fesm2020/fundamental-ngx-core-input-group.mjs +5 -3
  68. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  69. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +10 -12
  70. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  71. package/fesm2020/fundamental-ngx-core-multi-input.mjs +11 -9
  72. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  73. package/fesm2020/fundamental-ngx-core-popover.mjs +2 -2
  74. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  75. package/fesm2020/fundamental-ngx-core-select.mjs +2 -2
  76. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  77. package/fesm2020/fundamental-ngx-core-table.mjs +4 -4
  78. package/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  79. package/fesm2020/fundamental-ngx-core-time-picker.mjs +1 -1
  80. package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  81. package/fesm2020/fundamental-ngx-core-token.mjs +11 -9
  82. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  83. package/fundamental-ngx-core-v0.43.17.tgz +0 -0
  84. package/input-group/input-group.component.d.ts +7 -1
  85. package/multi-combobox/multi-combobox.component.d.ts +1 -1
  86. package/multi-input/multi-input.component.d.ts +5 -3
  87. package/package.json +3 -3
  88. package/schematics/add-dependencies/index.js +4 -4
  89. package/token/token.component.d.ts +4 -2
  90. package/fundamental-ngx-core-v0.43.16.tgz +0 -0
@@ -4,23 +4,21 @@ import { takeUntil } from 'rxjs/operators';
4
4
  import { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
5
5
  import { CalendarService } from '../../calendar.service';
6
6
  import { DefaultCalendarActiveCellStrategy } from '../../models/common';
7
- import { CalendarI18nLabels } from '../../i18n/calendar-i18n-labels';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "../../calendar.service";
10
9
  import * as i2 from "@fundamental-ngx/core/datetime";
11
- import * as i3 from "../../i18n/calendar-i18n-labels";
12
- import * as i4 from "@angular/common";
13
- import * as i5 from "@fundamental-ngx/core/button";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@fundamental-ngx/core/button";
12
+ import * as i5 from "@fundamental-ngx/i18n";
14
13
  /** Component representing the month view of the calendar. */
15
14
  export class CalendarMonthViewComponent {
16
15
  /** @hidden */
17
- constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter, _calendarI18nLabels) {
16
+ constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter) {
18
17
  this._eRef = _eRef;
19
18
  this._changeDetectorRef = _changeDetectorRef;
20
19
  this._calendarService = _calendarService;
21
20
  this._dateTimeFormats = _dateTimeFormats;
22
21
  this._dateTimeAdapter = _dateTimeAdapter;
23
- this._calendarI18nLabels = _calendarI18nLabels;
24
22
  /** An event fired when a new month is selected */
25
23
  this.monthClicked = new EventEmitter();
26
24
  /**
@@ -73,29 +71,6 @@ export class CalendarMonthViewComponent {
73
71
  get viewId() {
74
72
  return this.id + '-month-view';
75
73
  }
76
- /**
77
- * @hidden
78
- * Today cell label.
79
- * Is used in conjunction with cell date itself
80
- */
81
- get _todayAriaLabel() {
82
- return this._calendarI18nLabels.todayLabel;
83
- }
84
- /**
85
- * @hidden
86
- * Selected date cell label.
87
- * Is used in conjunction with cell date itself
88
- */
89
- get _selectedDateAriaLabel() {
90
- return this._calendarI18nLabels.dateSelectedLabel;
91
- }
92
- /**
93
- * @hidden
94
- * View description
95
- */
96
- get _viewRoleDescription() {
97
- return this._calendarI18nLabels.calendarMonthViewDescription;
98
- }
99
74
  /**
100
75
  * @hidden
101
76
  * Today cell label ID
@@ -231,17 +206,17 @@ export class CalendarMonthViewComponent {
231
206
  this._focusElementBySelector(`#${this._getId(index)}`);
232
207
  }
233
208
  }
234
- CalendarMonthViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }, { token: i3.CalendarI18nLabels }], target: i0.ɵɵFactoryTarget.Component });
235
- CalendarMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CalendarMonthViewComponent, selector: "fd-calendar-month-view", inputs: { id: "id", monthSelected: "monthSelected", focusEscapeFunction: "focusEscapeFunction", year: "year" }, outputs: { monthClicked: "monthClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-calendar__months\">\n <table class=\"fd-calendar__table\" role=\"grid\" [attr.aria-roledescription]=\"_viewRoleDescription\">\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ _todayAriaLabel }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ _selectedDateAriaLabel }}</div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
209
+ CalendarMonthViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component });
210
+ CalendarMonthViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CalendarMonthViewComponent, selector: "fd-calendar-month-view", inputs: { id: "id", monthSelected: "monthSelected", focusEscapeFunction: "focusEscapeFunction", year: "year" }, outputs: { monthClicked: "monthClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-calendar__months\">\n <table\n class=\"fd-calendar__table\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\"\n >\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i5.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
236
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarMonthViewComponent, decorators: [{
237
212
  type: Component,
238
213
  args: [{ selector: 'fd-calendar-month-view', encapsulation: ViewEncapsulation.None, host: {
239
214
  '[attr.id]': 'viewId'
240
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fd-calendar__months\">\n <table class=\"fd-calendar__table\" role=\"grid\" [attr.aria-roledescription]=\"_viewRoleDescription\">\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ _todayAriaLabel }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ _selectedDateAriaLabel }}</div>\n </div>\n</div>\n" }]
215
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fd-calendar__months\">\n <table\n class=\"fd-calendar__table\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\"\n >\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colMonths of _calendarMonthListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let monthCell of colMonths; let colIndex = index\"\n [class.fd-calendar__item--current]=\"monthCell.current\"\n [class.is-active]=\"monthCell.selected\"\n [attr.tabIndex]=\"monthCell.tabIndex\"\n [attr.id]=\"monthCell.id\"\n [attr.aria-selected]=\"monthCell.selected\"\n [attr.aria-disabled]=\"monthCell.disabled\"\n [attr.data-fd-calendar-month]=\"monthCell.month\"\n (keydown)=\"_onKeydownMonthHandler($event, monthCell.index)\"\n (click)=\"selectMonth(monthCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"monthCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n monthCell.id +\n '-aria-label ' +\n (monthCell.current ? _todayLabelId + ' ' : '') +\n (monthCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ monthCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"monthCell.id + '-aria-label'\">\n {{ monthCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n </div>\n</div>\n" }]
241
216
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: undefined, decorators: [{
242
217
  type: Inject,
243
218
  args: [DATE_TIME_FORMATS]
244
- }] }, { type: i2.DatetimeAdapter }, { type: i3.CalendarI18nLabels }]; }, propDecorators: { id: [{
219
+ }] }, { type: i2.DatetimeAdapter }]; }, propDecorators: { id: [{
245
220
  type: Input
246
221
  }], monthSelected: [{
247
222
  type: Input
@@ -252,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
252
227
  }], monthClicked: [{
253
228
  type: Output
254
229
  }] } });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFVBQVUsRUFHVixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7QUFFckUsNkRBQTZEO0FBVzdELE1BQU0sT0FBTywwQkFBMEI7SUE4Q25DLGNBQWM7SUFDZCxZQUNZLEtBQWlCLEVBQ2pCLGtCQUFxQyxFQUNyQyxnQkFBaUMsRUFDTixnQkFBaUMsRUFDNUQsZ0JBQW9DLEVBQ3BDLG1CQUF1QztRQUx2QyxVQUFLLEdBQUwsS0FB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LENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWE7UUFDakIsT0FBeUIsRUFBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxjQUFjO0lBQ04sbUJBQW1CLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzt1SEFyUlEsMEJBQTBCLDRHQW1EdkIsaUJBQWlCOzJHQW5EcEIsMEJBQTBCLDZSQ3BDdkMsbWpGQXdEQTsyRkRwQmEsMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNJLHdCQUF3QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQXFEMUMsTUFBTTsyQkFBQyxpQkFBaUI7MkdBaEQ3QixFQUFFO3NCQURELEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEluamVjdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtYXRzLCBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLW1vbnRoJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhckkxOG5MYWJlbHMgfSBmcm9tICcuLi8uLi9pMThuL2NhbGVuZGFyLWkxOG4tbGFiZWxzJztcblxuLyoqIENvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIG1vbnRoIHZpZXcgb2YgdGhlIGNhbGVuZGFyLiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1tb250aC12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICAvKiogVGhlIGlkIG9mIHRoZSBjYWxlbmRhciBwYXNzZWQgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKiBBIG51bWJlciAoMS0xMikgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCBtb250aCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9udGhTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqIEEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGVzY2FwZSBmb2N1cyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBBIHllYXIgdGhlIG1vbnRoIHZpZXcgaXMgcmVmZXJyaW5nIHRvICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyOiBudW1iZXI7XG5cbiAgICAvKiogQW4gZXZlbnQgZmlyZWQgd2hlbiBhIG5ldyBtb250aCBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vbnRoQ2xpY2tlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb250aCBncmlkIHRhYmxlXG4gICAgICovXG4gICAgX2NhbGVuZGFyTW9udGhMaXN0R3JpZDogQ2FsZW5kYXJNb250aFtdW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQSBudW1iZXIgb2Zmc2V0IHVzZWQgdG8gYWNoaWV2ZSB0aGUgMS0xMiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2FsZW5kYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tb250aE9mZnNldDogbnVtYmVyID0gMTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Ftb3VudE9mQ29sUGVyUm93OiBudW1iZXIgPSAzO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZSb3dzOiBudW1iZXIgPSA0O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFySTE4bkxhYmVsczogQ2FsZW5kYXJJMThuTGFiZWxzXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0dXBLZXlib2FyZFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYXRlZCAmJiAoJ21vbnRoU2VsZWN0ZWQnIGluIGNoYW5nZXMgfHwgJ3llYXInIGluIGNoYW5nZXMgfHwgJ2lkJyBpbiBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb250aCAgKi9cbiAgICBnZXQgY3VycmVudE1vbnRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH1cblxuICAgIC8qKiAgR2V0dGVyIGZvciB0aGUgcHJpdmF0ZSBjbGFzcyBtZW1iZXIgX21vbnRoT2Zmc2V0ICovXG4gICAgZ2V0IG1vbnRoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aE9mZnNldDtcbiAgICB9XG5cbiAgICAvKiogVmlldyBJRCAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLW1vbnRoLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsLlxuICAgICAqIElzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBjZWxsIGRhdGUgaXRzZWxmXG4gICAgICovXG4gICAgZ2V0IF90b2RheUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLnRvZGF5TGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgY2VsbCBsYWJlbC5cbiAgICAgKiBJcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggY2VsbCBkYXRlIGl0c2VsZlxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0ZWREYXRlQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMuZGF0ZVNlbGVjdGVkTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpZXcgZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBnZXQgX3ZpZXdSb2xlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy5jYWxlbmRhck1vbnRoVmlld0Rlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBoYW5kbGluZyB0aGUgbW91c2UgY2xpY2sgZXZlbnQgd2hlbiBhIG1vbnRoIGlzIHNlbGVjdGVkICAqL1xuICAgIHNlbGVjdE1vbnRoKG1vbnRoQ2VsbDogQ2FsZW5kYXJNb250aCwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkID0gbW9udGhDZWxsLm1vbnRoO1xuICAgICAgICB0aGlzLm1vbnRoQ2xpY2tlZC5lbWl0KHRoaXMubW9udGhTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIG1vbnRoIGNlbGwuXG4gICAgICogSXQgY2FuIGJlIGEgc2VsZWN0ZWQgY2VsbCwgY3VycmVudCBtb250aCBjZWxsIG9yIGZpcnN0IGNlbGwgaW4gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5KCkuZ2V0QWN0aXZlQ2VsbCh0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7Y2VsbFRvRm9jdXMuaWR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIGtleWJvYXJkIGV2ZW50cyAoYTExeSlcbiAgICAgKi9cbiAgICBfb25LZXlkb3duTW9udGhIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGFsbG93cyB0byBmb2N1cyBlbGVtZW50cyBpbnNpZGUgdGhpcyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBfZm9jdXNFbGVtZW50QnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgPSB0aGlzLl9lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCByZXR1cm5pbmcgaWQgb2YgbW9udGggY2VsbFxuICAgICAqL1xuICAgIF9nZXRJbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gaW5kZXggbW9udGggZ3JpZCBjZWxsIGluZGV4XG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLW1vbnRoLScgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgY2hlY2tzIGlmIHRoaXMgaXMgY3VycmVudCBtb250aFxuICAgICAqL1xuICAgIF9pc0N1cnJlbnQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5jdXJyZW50TW9udGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrIGlmIHRoaXMgaXMgc2VsZWN0ZWQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNTZWxlY3RlZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpZCArIHRoaXMuX21vbnRoT2Zmc2V0ID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNyZWF0ZSBtb250aCBncmlkIHdpdGggcmVxdWlyZWQgbWV0YSBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0TW9udGhHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb250aE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdzaG9ydCcpO1xuXG4gICAgICAgIGNvbnN0IG1vbnRoTGlzdDogQ2FsZW5kYXJNb250aFtdID0gbW9udGhOYW1lcy5tYXAoKG1vbnRoTmFtZSwgaW5kZXgpOiBDYWxlbmRhck1vbnRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gaW5kZXggKyB0aGlzLm1vbnRoT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbW9udGhOYW1lLFxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy55ZWFyLCBtb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5Lm1vbnRoQTExeUxhYmVsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogbW9udGggPT09IHRoaXMubW9udGhTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBtb250aCA9PT0gdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgdGFiSW5kZXg6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQgPyAwIDogLTFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZCA9IFtdO1xuICAgICAgICAvKiogQ3JlYXRpbmcgMmQgZ3JpZCAqL1xuICAgICAgICB3aGlsZSAobW9udGhMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkLnB1c2gobW9udGhMaXN0LnNwbGljZSgwLCB0aGlzLl9hbW91bnRPZkNvbFBlclJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChtb250aENlbGwsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhDZWxsLmlkID0gdGhpcy5fZ2V0SWQodGhpcy5fZ2V0SW5kZXgocm93SW5kZXgsIGNvbEluZGV4KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnJvd0Ftb3VudCA9IHRoaXMuX2Ftb3VudE9mUm93cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMuX2Ftb3VudE9mQ29sUGVyUm93O1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5U2VsZWN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5zZWxlY3RNb250aCh0aGlzLl9nZXRNb250aExpc3QoKVtpbmRleF0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIG1vbnRoIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TW9udGhMaXN0KCk6IENhbGVuZGFyTW9udGhbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyTW9udGhbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19tb250aHNcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGFibGVcIiByb2xlPVwiZ3JpZFwiIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIl92aWV3Um9sZURlc2NyaXB0aW9uXCI+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCJcbiAgICAgICAgICAgICAgICByb2xlPVwicm93XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sTW9udGhzIG9mIF9jYWxlbmRhck1vbnRoTGlzdEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aENlbGwgb2YgY29sTW9udGhzOyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9faXRlbS0tY3VycmVudF09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwibW9udGhDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiSW5kZXhdPVwibW9udGhDZWxsLnRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJtb250aENlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm1vbnRoQ2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItbW9udGhdPVwibW9udGhDZWxsLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uS2V5ZG93bk1vbnRoSGFuZGxlcigkZXZlbnQsIG1vbnRoQ2VsbC5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGhDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vbnRoQ2VsbC5jdXJyZW50ID8gX3RvZGF5TGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGhDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJtb250aENlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtb250aENlbGwuYXJpYUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuXG4gICAgPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG4gICAgPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7IF90b2RheUFyaWFMYWJlbCB9fTwvZGl2PlxuICAgICAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RlZERhdGVMYWJlbElkXCI+e3sgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCB9fTwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFVBQVUsRUFHVixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLE1BQU0sRUFHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFFcEgsNkRBQTZEO0FBVzdELE1BQU0sT0FBTywwQkFBMEI7SUE4Q25DLGNBQWM7SUFDZCxZQUNZLEtBQWlCLEVBQ2pCLGtCQUFxQyxFQUNyQyxnQkFBaUMsRUFDTixnQkFBaUMsRUFDNUQsZ0JBQW9DO1FBSnBDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxxQkFBZ0IsR0FBaEIs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QUMsQ0FBQztJQUMzRCxDQUFDOzt1SEExUFEsMEJBQTBCLDRHQW1EdkIsaUJBQWlCOzJHQW5EcEIsMEJBQTBCLDZSQ25DdkMseXFGQTREQTsyRkR6QmEsMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNJLHdCQUF3QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQXFEMUMsTUFBTTsyQkFBQyxpQkFBaUI7MEVBaEQ3QixFQUFFO3NCQURELEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIEluamVjdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGF0ZVRpbWVGb3JtYXRzLCBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLW1vbnRoJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5cbi8qKiBDb21wb25lbnQgcmVwcmVzZW50aW5nIHRoZSBtb250aCB2aWV3IG9mIHRoZSBjYWxlbmRhci4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXItbW9udGgtdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICd2aWV3SWQnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB7XG4gICAgLyoqIFRoZSBpZCBvZiB0aGUgY2FsZW5kYXIgcGFzc2VkIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogQSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgbW9udGggKi9cbiAgICBASW5wdXQoKVxuICAgIG1vbnRoU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBlc2NhcGUgZm9jdXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogQSB5ZWFyIHRoZSBtb250aCB2aWV3IGlzIHJlZmVycmluZyB0byAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhcjogbnVtYmVyO1xuXG4gICAgLyoqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBtb250aENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9udGggZ3JpZCB0YWJsZVxuICAgICAqL1xuICAgIF9jYWxlbmRhck1vbnRoTGlzdEdyaWQ6IENhbGVuZGFyTW9udGhbXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEEgbnVtYmVyIG9mZnNldCB1c2VkIHRvIGFjaGlldmUgdGhlIDEtMTIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNhbGVuZGFyXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9udGhPZmZzZXQ6IG51bWJlciA9IDE7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbW91bnRPZkNvbFBlclJvdzogbnVtYmVyID0gMztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Ftb3VudE9mUm93czogbnVtYmVyID0gNDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHMsXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+XG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0dXBLZXlib2FyZFNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYXRlZCAmJiAoJ21vbnRoU2VsZWN0ZWQnIGluIGNoYW5nZXMgfHwgJ3llYXInIGluIGNoYW5nZXMgfHwgJ2lkJyBpbiBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0TW9udGhHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb250aCAgKi9cbiAgICBnZXQgY3VycmVudE1vbnRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH1cblxuICAgIC8qKiAgR2V0dGVyIGZvciB0aGUgcHJpdmF0ZSBjbGFzcyBtZW1iZXIgX21vbnRoT2Zmc2V0ICovXG4gICAgZ2V0IG1vbnRoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aE9mZnNldDtcbiAgICB9XG5cbiAgICAvKiogVmlldyBJRCAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLW1vbnRoLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGZvciBoYW5kbGluZyB0aGUgbW91c2UgY2xpY2sgZXZlbnQgd2hlbiBhIG1vbnRoIGlzIHNlbGVjdGVkICAqL1xuICAgIHNlbGVjdE1vbnRoKG1vbnRoQ2VsbDogQ2FsZW5kYXJNb250aCwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkID0gbW9udGhDZWxsLm1vbnRoO1xuICAgICAgICB0aGlzLm1vbnRoQ2xpY2tlZC5lbWl0KHRoaXMubW9udGhTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIG1vbnRoIGNlbGwuXG4gICAgICogSXQgY2FuIGJlIGEgc2VsZWN0ZWQgY2VsbCwgY3VycmVudCBtb250aCBjZWxsIG9yIGZpcnN0IGNlbGwgaW4gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5KCkuZ2V0QWN0aXZlQ2VsbCh0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7Y2VsbFRvRm9jdXMuaWR9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgdGhlIGtleWJvYXJkIGV2ZW50cyAoYTExeSlcbiAgICAgKi9cbiAgICBfb25LZXlkb3duTW9udGhIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGFsbG93cyB0byBmb2N1cyBlbGVtZW50cyBpbnNpZGUgdGhpcyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBfZm9jdXNFbGVtZW50QnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1czogSFRNTEVsZW1lbnQgPSB0aGlzLl9lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCByZXR1cm5pbmcgaWQgb2YgbW9udGggY2VsbFxuICAgICAqL1xuICAgIF9nZXRJbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAcGFyYW0gaW5kZXggbW9udGggZ3JpZCBjZWxsIGluZGV4XG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLW1vbnRoLScgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgY2hlY2tzIGlmIHRoaXMgaXMgY3VycmVudCBtb250aFxuICAgICAqL1xuICAgIF9pc0N1cnJlbnQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5jdXJyZW50TW9udGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrIGlmIHRoaXMgaXMgc2VsZWN0ZWQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNTZWxlY3RlZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpZCArIHRoaXMuX21vbnRoT2Zmc2V0ID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNyZWF0ZSBtb250aCBncmlkIHdpdGggcmVxdWlyZWQgbWV0YSBkYXRhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0TW9udGhHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb250aE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdzaG9ydCcpO1xuXG4gICAgICAgIGNvbnN0IG1vbnRoTGlzdDogQ2FsZW5kYXJNb250aFtdID0gbW9udGhOYW1lcy5tYXAoKG1vbnRoTmFtZSwgaW5kZXgpOiBDYWxlbmRhck1vbnRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gaW5kZXggKyB0aGlzLm1vbnRoT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbW9udGhOYW1lLFxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy55ZWFyLCBtb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5Lm1vbnRoQTExeUxhYmVsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogbW9udGggPT09IHRoaXMubW9udGhTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBtb250aCA9PT0gdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgdGFiSW5kZXg6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQgPyAwIDogLTFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZCA9IFtdO1xuICAgICAgICAvKiogQ3JlYXRpbmcgMmQgZ3JpZCAqL1xuICAgICAgICB3aGlsZSAobW9udGhMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkLnB1c2gobW9udGhMaXN0LnNwbGljZSgwLCB0aGlzLl9hbW91bnRPZkNvbFBlclJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChtb250aENlbGwsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgbW9udGhDZWxsLmlkID0gdGhpcy5fZ2V0SWQodGhpcy5fZ2V0SW5kZXgocm93SW5kZXgsIGNvbEluZGV4KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnJvd0Ftb3VudCA9IHRoaXMuX2Ftb3VudE9mUm93cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMuX2Ftb3VudE9mQ29sUGVyUm93O1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5U2VsZWN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5zZWxlY3RNb250aCh0aGlzLl9nZXRNb250aExpc3QoKVtpbmRleF0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIG1vbnRoIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TW9udGhMaXN0KCk6IENhbGVuZGFyTW9udGhbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyTW9udGhbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyTW9udGhMaXN0R3JpZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19tb250aHNcIj5cbiAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICByb2xlPVwiZ3JpZFwiXG4gICAgICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbE1vbnRocyBvZiBfY2FsZW5kYXJNb250aExpc3RHcmlkOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbW9udGhDZWxsIG9mIGNvbE1vbnRoczsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLWN1cnJlbnRdPVwibW9udGhDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cIm1vbnRoQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYkluZGV4XT1cIm1vbnRoQ2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIm1vbnRoQ2VsbC5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwibW9udGhDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJtb250aENlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLW1vbnRoXT1cIm1vbnRoQ2VsbC5tb250aFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25Nb250aEhhbmRsZXIoJGV2ZW50LCBtb250aENlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1vbnRoKG1vbnRoQ2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwibW9udGhDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFyaWEtbGFiZWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhDZWxsLnNlbGVjdGVkID8gX3NlbGVjdGVkRGF0ZUxhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoQ2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGhDZWxsLmFyaWFMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cblxuICAgIDwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuICAgIDxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IFthdHRyLmlkXT1cIl90b2RheUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLnRvZGF5TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0ZWREYXRlTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -4,38 +4,14 @@ import { Subject } from 'rxjs';
4
4
  import { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';
5
5
  import { CalendarService } from '../../calendar.service';
6
6
  import { DefaultCalendarActiveCellStrategy } from '../../models/common';
7
- import { CalendarI18nLabels } from '../../i18n/calendar-i18n-labels';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "../../calendar.service";
10
9
  import * as i2 from "@fundamental-ngx/core/datetime";
11
- import * as i3 from "../../i18n/calendar-i18n-labels";
12
- import * as i4 from "@angular/common";
13
- import * as i5 from "@fundamental-ngx/core/button";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@fundamental-ngx/core/button";
12
+ import * as i5 from "@fundamental-ngx/i18n";
14
13
  /** Component representing the YearView of the Calendar Component. */
15
14
  export class CalendarYearViewComponent {
16
- /**
17
- * @hidden
18
- * Today cell label.
19
- * Is used in conjunction with cell date itself
20
- */
21
- get _todayAriaLabel() {
22
- return this._calendarI18nLabels.todayLabel;
23
- }
24
- /**
25
- * @hidden
26
- * Selected date cell label.
27
- * Is used in conjunction with cell date itself
28
- */
29
- get _selectedDateAriaLabel() {
30
- return this._calendarI18nLabels.dateSelectedLabel;
31
- }
32
- /**
33
- * @hidden
34
- * View description
35
- */
36
- get _viewRoleDescription() {
37
- return this._calendarI18nLabels.calendarYearsViewDescription;
38
- }
39
15
  /** View ID */
40
16
  get viewId() {
41
17
  return this.id + '-year-view';
@@ -55,13 +31,12 @@ export class CalendarYearViewComponent {
55
31
  return this.viewId + '-selected-date-label';
56
32
  }
57
33
  /** @hidden */
58
- constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats, _calendarI18nLabels) {
34
+ constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {
59
35
  this._eRef = _eRef;
60
36
  this._changeDetectorRef = _changeDetectorRef;
61
37
  this._calendarService = _calendarService;
62
38
  this._dateTimeAdapter = _dateTimeAdapter;
63
39
  this._dateTimeFormats = _dateTimeFormats;
64
- this._calendarI18nLabels = _calendarI18nLabels;
65
40
  /** Event fired when a year is selected. */
66
41
  this.yearClicked = new EventEmitter();
67
42
  /**
@@ -275,17 +250,17 @@ export class CalendarYearViewComponent {
275
250
  this._focusElementBySelector(`#${this._getId(index)}`);
276
251
  }
277
252
  }
278
- CalendarYearViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }, { token: i3.CalendarI18nLabels }], target: i0.ɵɵFactoryTarget.Component });
279
- CalendarYearViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CalendarYearViewComponent, selector: "fd-calendar-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", yearViewGrid: "yearViewGrid" }, outputs: { yearClicked: "yearClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-calendar__years\">\n <table class=\"fd-calendar__table\" role=\"grid\" [attr.aria-roledescription]=\"_viewRoleDescription\">\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-button fd-button--transparent fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ _todayAriaLabel }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ _selectedDateAriaLabel }}</div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
253
+ CalendarYearViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component });
254
+ CalendarYearViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CalendarYearViewComponent, selector: "fd-calendar-year-view", inputs: { id: "id", focusEscapeFunction: "focusEscapeFunction", yearSelected: "yearSelected", yearViewGrid: "yearViewGrid" }, outputs: { yearClicked: "yearClicked" }, host: { properties: { "attr.id": "viewId" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"fd-calendar__years\">\n <table\n class=\"fd-calendar__table\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\"\n >\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-button fd-button--transparent fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i5.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
280
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CalendarYearViewComponent, decorators: [{
281
256
  type: Component,
282
257
  args: [{ selector: 'fd-calendar-year-view', encapsulation: ViewEncapsulation.None, host: {
283
258
  '[attr.id]': 'viewId'
284
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fd-calendar__years\">\n <table class=\"fd-calendar__table\" role=\"grid\" [attr.aria-roledescription]=\"_viewRoleDescription\">\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-button fd-button--transparent fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ _todayAriaLabel }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ _selectedDateAriaLabel }}</div>\n </div>\n</div>\n" }]
259
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fd-calendar__years\">\n <table\n class=\"fd-calendar__table\"\n role=\"grid\"\n [attr.aria-roledescription]=\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\"\n >\n <tbody class=\"fd-calendar__group\" role=\"rowgroup\">\n <tr\n class=\"fd-calendar__row\"\n role=\"row\"\n *ngFor=\"let colYears of _calendarYearListGrid; let rowIndex = index\"\n >\n <td\n class=\"fd-button fd-button--transparent fd-calendar__item\"\n role=\"gridcell\"\n *ngFor=\"let yearCell of colYears; let colIndex = index\"\n [class.fd-calendar__item--current]=\"yearCell.current\"\n [class.is-active]=\"yearCell.selected\"\n [attr.id]=\"yearCell.id\"\n [attr.tabindex]=\"yearCell.tabIndex\"\n [attr.aria-selected]=\"yearCell.selected\"\n [attr.aria-disabled]=\"yearCell.disabled\"\n [attr.data-fd-calendar-year]=\"yearCell.year\"\n (keydown)=\"_onKeydownYearHandler($event, yearCell.index)\"\n (click)=\"selectYear(yearCell, $event)\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n class=\"fd-calendar__item-button\"\n [class.is-active]=\"yearCell.current\"\n tabindex=\"-1\"\n >\n <span\n class=\"fd-calendar__text\"\n [attr.aria-labelledby]=\"\n yearCell.id +\n '-aria-label ' +\n (yearCell.current ? _todayLabelId + ' ' : '') +\n (yearCell.selected ? _selectedDateLabelId : '')\n \"\n >\n {{ yearCell.label }}\n </span>\n </button>\n\n <span hidden aria-hidden=\"true\" [attr.id]=\"yearCell.id + '-aria-label'\">\n {{ yearCell.ariaLabel }}\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n\n <!-- Hidden elements for aria purposes -->\n <div hidden aria-hidden=\"true\">\n <div [attr.id]=\"_todayLabelId\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\n <div [attr.id]=\"_selectedDateLabelId\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\n </div>\n</div>\n" }]
285
260
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{
286
261
  type: Inject,
287
262
  args: [DATE_TIME_FORMATS]
288
- }] }, { type: i3.CalendarI18nLabels }]; }, propDecorators: { id: [{
263
+ }] }]; }, propDecorators: { id: [{
289
264
  type: Input
290
265
  }], focusEscapeFunction: [{
291
266
  type: Input
@@ -296,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
296
271
  }], yearClicked: [{
297
272
  type: Output
298
273
  }] } });
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXIteWVhci12aWV3L2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixVQUFVLEVBRVYsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7O0FBRXJFLHFFQUFxRTtBQVdyRSxNQUFNLE9BQU8seUJBQXlCO0lBK0NsQzs7OztPQUlHO0lBQ0gsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxzQkFBc0I7UUFD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SSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7O3NIQTdWUSx5QkFBeUIsMklBNkd0QixpQkFBaUI7MEdBN0dwQix5QkFBeUIsd1NDcEN0QywyakZBd0RBOzJGRHBCYSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0ksdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLFdBQVcsRUFBRSxRQUFRO3FCQUN4QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBK0cxQyxNQUFNOzJCQUFDLGlCQUFpQjs2RUExRzdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLFlBQVk7c0JBRFgsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIE91dHB1dCxcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEYXRlVGltZUZvcm1hdHMsIERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQsIENhbGVuZGFyWWVhciB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci15ZWFyLWdyaWQnO1xuaW1wb3J0IHsgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5LCBFc2NhcGVGb2N1c0Z1bmN0aW9uLCBGb2N1c2FibGVDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IENhbGVuZGFySTE4bkxhYmVscyB9IGZyb20gJy4uLy4uL2kxOG4vY2FsZW5kYXItaTE4bi1sYWJlbHMnO1xuXG4vKiogQ29tcG9uZW50IHJlcHJlc2VudGluZyB0aGUgWWVhclZpZXcgb2YgdGhlIENhbGVuZGFyIENvbXBvbmVudC4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXIteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICd2aWV3SWQnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICAvKiogVGhlIGlkIG9mIHRoZSBjYWxlbmRhciBwYXNzZWQgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBmb2N1cyB3b3VsZCBlc2NhcGUgdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uOiBFc2NhcGVGb2N1c0Z1bmN0aW9uO1xuXG4gICAgLyoqIFBhcmFtZXRlciBob2xkaW5nIHRoZSB5ZWFyIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhclNlbGVjdGVkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhclZpZXdHcmlkOiBDYWxlbmRhclllYXJHcmlkO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJDbGlja2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBkZWZpbmUgd2hpY2ggeWVhciBmcm9tIGNhbGVuZGFyWWVhckxpc3Qgc2hvdWxkIGJlIGZvY3VzYWJsZSBieSB0YWIga2V5XG4gICAgICovXG4gICAgX2FjdGl2ZVllYXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgdGhhdCBzdG9yZXMgdGhlIGRvemVuIG9mIHllYXJzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgX2NhbGVuZGFyWWVhckxpc3RHcmlkOiBDYWxlbmRhclllYXJbXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFBhcmFtZXRlciBzdG9yaW5nIHRoZSB5ZWFyIG9mIHRoZSBwcmVzZW50IGRheS5cbiAgICAgKi9cbiAgICBfY3VycmVudFllYXI6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyBmaXJzdCBzaG93biB5ZWFyIG9uIGxpc3RcbiAgICAgKi9cbiAgICBfZmlyc3RZZWFySW5MaXN0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbC5cbiAgICAgKiBJcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggY2VsbCBkYXRlIGl0c2VsZlxuICAgICAqL1xuICAgIGdldCBfdG9kYXlBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFySTE4bkxhYmVscy50b2RheUxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGNlbGwgbGFiZWwuXG4gICAgICogSXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNlbGwgZGF0ZSBpdHNlbGZcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJJMThuTGFiZWxzLmRhdGVTZWxlY3RlZExhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWaWV3IGRlc2NyaXB0aW9uXG4gICAgICovXG4gICAgZ2V0IF92aWV3Um9sZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhckkxOG5MYWJlbHMuY2FsZW5kYXJZZWFyc1ZpZXdEZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICAvKiogVmlldyBJRCAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLXllYXItdmlldyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZGF5IGNlbGwgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3RvZGF5TGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXRvZGF5LWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0ZWQgZGF0ZSBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0ZWREYXRlTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdGVkLWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhckkxOG5MYWJlbHM6IENhbGVuZGFySTE4bkxhYmVsc1xuICAgICkge1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLl9jdXJyZW50WWVhciA9IF9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihfZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLl9jdXJyZW50WWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCA9IHRoaXMueWVhclNlbGVjdGVkO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYXRlZCAmJiAoJ3llYXJWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fCAneWVhclNlbGVjdGVkJyBpbiBjaGFuZ2VzIHx8ICdpZCcgaW4gY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBwcmV2aW91cyB7e2NvbCAqIHJvd319IHllYXJzIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBsb2FkTmV4dFllYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgKz0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB1c2VkIHRvIGxvYWQgdGhlIG5leHQge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZFByZXZpb3VzWWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCAtPSB0aGlzLl9nZXRBbW91bnRPZlllYXJzU2hvd25BdE9uY2UoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgc2VuZHMgdGhlIHllYXIgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgd2hlbiBpdCBpcyBjbGlja2VkLiAqL1xuICAgIHNlbGVjdFllYXIoc2VsZWN0ZWRZZWFyOiBDYWxlbmRhclllYXIsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkID0gc2VsZWN0ZWRZZWFyLnllYXI7XG4gICAgICAgIHRoaXMueWVhckNsaWNrZWQuZW1pdCh0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIG1vbnRoIGNlbGwuXG4gICAgICogSXQgY2FuIGJlIGEgc2VsZWN0ZWQgY2VsbCwgY3VycmVudCBtb250aCBjZWxsIG9yIGZpcnN0IGNlbGwgaW4gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5KCkuZ2V0QWN0aXZlQ2VsbCh0aGlzLl9nZXRZZWFyTGlzdCgpKTtcbiAgICAgICAgaWYgKCFjZWxsVG9Gb2N1cz8uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHtjZWxsVG9Gb2N1cy5pZH1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIGZvciBoYW5kbGluZyB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgICAgKi9cbiAgICBfb25LZXlkb3duWWVhckhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5ZG93bkhhbmRsZXIoZXZlbnQsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgYWxsb3dzIHRvIGZvY3VzIGVsZW1lbnRzIGluc2lkZSB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuICAgIF9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcik7XG4gICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cz8uZm9jdXMpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU3RhbmRhcmRpemVkIG1ldGhvZCB0byBjYWxjdWxhdGUgZ3JpZCBbeF1beV0gdG8gaW5kZXggbnVtYmVyIG9mIGZsYXR0ZW4gbGlzdFxuICAgICAqL1xuICAgIF9nZXRJbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHZXQgZ3JpZCBjZWxsIGlkIGJlIGluZGV4XG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXllYXItJyArIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFjdGl2ZSBjZWxsLCB3aGljaCBtZWFuczpcbiAgICAgKiBpZiB0aGVyZSBpcyBhbnkgc2VsZWN0ZWQgeWVhciwgcmV0dXJuIHNlbGVjdGVkIHllYXJcbiAgICAgKiBpZiB0aGVyZSBpcyBubyBzZWxlY3RlZCB5ZWFyLCBidXQgdGhlcmUgaXMgY3VycmVudCB5ZWFyLCByZXR1cm4gY3VycmVudCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gY3VycmVudCB5ZWFyLCBvciBzZWxlY3RlZCwgcmV0dXJuIGZpcnN0IG9uZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZVllYXIoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyQ2VsbCA9IHRoaXMuX2dldFllYXJMaXN0KCkuZmluZCgoeyB5ZWFyIH0pID0+IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkWWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50WWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLl9jdXJyZW50WWVhcik7XG4gICAgICAgIGlmIChjdXJyZW50WWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50WWVhckNlbGwueWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZFswXVswXS55ZWFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0WWVhckdyaWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZFllYXJzQW1vdW50OiBudW1iZXIgPSB0aGlzLnllYXJWaWV3R3JpZC5jb2xzICogdGhpcy55ZWFyVmlld0dyaWQucm93cztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJZZWFyTGlzdDogQ2FsZW5kYXJZZWFyW10gPSBbXTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGRpc3BsYXllZFllYXJzQW1vdW50OyArK3gpIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB4O1xuICAgICAgICAgICAgY2FsZW5kYXJZZWFyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9nZXRZZWFyTmFtZSh5ZWFyKSxcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuX2dldEFyaWFZZWFyTmFtZSh5ZWFyKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogeWVhciA9PT0gdGhpcy55ZWFyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgY3VycmVudDogeWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChjYWxlbmRhclllYXJMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQucHVzaChjYWxlbmRhclllYXJMaXN0LnNwbGljZSgwLCB0aGlzLnllYXJWaWV3R3JpZC5jb2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVZZWFyID0gdGhpcy5fZ2V0QWN0aXZlWWVhcigpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gY2VsbC55ZWFyID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGFyaWEgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFyaWFZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXIsIGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIHRha2luZyBpbnRvIGFjY291bnQgeWVhck1hcHBpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhclN0cmluZyh5ZWFyOiBudW1iZXIsIGRlZmF1bHRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIHllYXIgZ3JpZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTGlzdCgpOiBDYWxlbmRhclllYXJbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyWWVhcltdPltdKS5jb25jYXQoLi4udGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQucm93cyAqIHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5U2VsZWN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5zZWxlY3RZZWFyKHRoaXMuX2dldFllYXJMaXN0KClbaW5kZXhdKSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdFN0YXJ0QXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpb3VzWWVhckxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RFbmRBcHByb2FjaC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFllYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke3RoaXMuX2dldElkKGluZGV4KX1gKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX3llYXJzXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RhYmxlXCIgcm9sZT1cImdyaWRcIiBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCJfdmlld1JvbGVEZXNjcmlwdGlvblwiPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbFllYXJzIG9mIF9jYWxlbmRhclllYXJMaXN0R3JpZDsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1dHRvbiBmZC1idXR0b24tLXRyYW5zcGFyZW50IGZkLWNhbGVuZGFyX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHllYXJDZWxsIG9mIGNvbFllYXJzOyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9faXRlbS0tY3VycmVudF09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJ5ZWFyQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInllYXJDZWxsLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwieWVhckNlbGwudGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInllYXJDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ5ZWFyQ2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXIteWVhcl09XCJ5ZWFyQ2VsbC55ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uS2V5ZG93blllYXJIYW5kbGVyKCRldmVudCwgeWVhckNlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhckNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19pdGVtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cInllYXJDZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHllYXJDZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHllYXJDZWxsLnNlbGVjdGVkID8gX3NlbGVjdGVkRGF0ZUxhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHllYXJDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZCArICctYXJpYS1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHllYXJDZWxsLmFyaWFMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cblxuICAgIDwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuICAgIDxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IFthdHRyLmlkXT1cIl90b2RheUxhYmVsSWRcIj57eyBfdG9kYXlBcmlhTGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0ZWREYXRlTGFiZWxJZFwiPnt7IF9zZWxlY3RlZERhdGVBcmlhTGFiZWwgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXIteWVhci12aWV3L2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixVQUFVLEVBRVYsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFtQixpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBRXBILHFFQUFxRTtBQVdyRSxNQUFNLE9BQU8seUJBQXlCO0lBK0NsQyxjQUFjO0lBQ2QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7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LENBQUM7O3NIQWxVUSx5QkFBeUIsMklBbUZ0QixpQkFBaUI7MEdBbkZwQix5QkFBeUIsd1NDbkN0QyxpckZBNERBOzJGRHpCYSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0ksdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLFdBQVcsRUFBRSxRQUFRO3FCQUN4QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBcUYxQyxNQUFNOzJCQUFDLGlCQUFpQjs0Q0FoRjdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLFlBQVk7c0JBRFgsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIE91dHB1dCxcbiAgICBJbnB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEYXRlVGltZUZvcm1hdHMsIERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQsIENhbGVuZGFyWWVhciB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci15ZWFyLWdyaWQnO1xuaW1wb3J0IHsgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5LCBFc2NhcGVGb2N1c0Z1bmN0aW9uLCBGb2N1c2FibGVDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uJztcblxuLyoqIENvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIFllYXJWaWV3IG9mIHRoZSBDYWxlbmRhciBDb21wb25lbnQuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLXllYXItdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLXllYXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB7XG4gICAgLyoqIFRoZSBpZCBvZiB0aGUgY2FsZW5kYXIgcGFzc2VkIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9jdXMgd291bGQgZXNjYXBlIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgeWVhciB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJWaWV3R3JpZDogQ2FsZW5kYXJZZWFyR3JpZDtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGEgeWVhciBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB5ZWFyQ2xpY2tlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIHllYXIgZnJvbSBjYWxlbmRhclllYXJMaXN0IHNob3VsZCBiZSBmb2N1c2FibGUgYnkgdGFiIGtleVxuICAgICAqL1xuICAgIF9hY3RpdmVZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHRoYXQgc3RvcmVzIHRoZSBkb3plbiBvZiB5ZWFycyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIF9jYWxlbmRhclllYXJMaXN0R3JpZDogQ2FsZW5kYXJZZWFyW11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgX2ZpcnN0WWVhckluTGlzdDogbnVtYmVyO1xuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy15ZWFyLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWF0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0c1xuICAgICkge1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLl9jdXJyZW50WWVhciA9IF9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhcihfZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLl9jdXJyZW50WWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCA9IHRoaXMueWVhclNlbGVjdGVkO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYXRlZCAmJiAoJ3llYXJWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fCAneWVhclNlbGVjdGVkJyBpbiBjaGFuZ2VzIHx8ICdpZCcgaW4gY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBwcmV2aW91cyB7e2NvbCAqIHJvd319IHllYXJzIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBsb2FkTmV4dFllYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgKz0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB1c2VkIHRvIGxvYWQgdGhlIG5leHQge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZFByZXZpb3VzWWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCAtPSB0aGlzLl9nZXRBbW91bnRPZlllYXJzU2hvd25BdE9uY2UoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgc2VuZHMgdGhlIHllYXIgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgd2hlbiBpdCBpcyBjbGlja2VkLiAqL1xuICAgIHNlbGVjdFllYXIoc2VsZWN0ZWRZZWFyOiBDYWxlbmRhclllYXIsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkID0gc2VsZWN0ZWRZZWFyLnllYXI7XG4gICAgICAgIHRoaXMueWVhckNsaWNrZWQuZW1pdCh0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIG1vbnRoIGNlbGwuXG4gICAgICogSXQgY2FuIGJlIGEgc2VsZWN0ZWQgY2VsbCwgY3VycmVudCBtb250aCBjZWxsIG9yIGZpcnN0IGNlbGwgaW4gdGhlIGxpc3RcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgRGVmYXVsdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5KCkuZ2V0QWN0aXZlQ2VsbCh0aGlzLl9nZXRZZWFyTGlzdCgpKTtcbiAgICAgICAgaWYgKCFjZWxsVG9Gb2N1cz8uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHtjZWxsVG9Gb2N1cy5pZH1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIGZvciBoYW5kbGluZyB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAgICAgKi9cbiAgICBfb25LZXlkb3duWWVhckhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5ZG93bkhhbmRsZXIoZXZlbnQsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgYWxsb3dzIHRvIGZvY3VzIGVsZW1lbnRzIGluc2lkZSB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuICAgIF9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcik7XG4gICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cz8uZm9jdXMpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU3RhbmRhcmRpemVkIG1ldGhvZCB0byBjYWxjdWxhdGUgZ3JpZCBbeF1beV0gdG8gaW5kZXggbnVtYmVyIG9mIGZsYXR0ZW4gbGlzdFxuICAgICAqL1xuICAgIF9nZXRJbmRleChyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHZXQgZ3JpZCBjZWxsIGlkIGJlIGluZGV4XG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXllYXItJyArIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFjdGl2ZSBjZWxsLCB3aGljaCBtZWFuczpcbiAgICAgKiBpZiB0aGVyZSBpcyBhbnkgc2VsZWN0ZWQgeWVhciwgcmV0dXJuIHNlbGVjdGVkIHllYXJcbiAgICAgKiBpZiB0aGVyZSBpcyBubyBzZWxlY3RlZCB5ZWFyLCBidXQgdGhlcmUgaXMgY3VycmVudCB5ZWFyLCByZXR1cm4gY3VycmVudCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gY3VycmVudCB5ZWFyLCBvciBzZWxlY3RlZCwgcmV0dXJuIGZpcnN0IG9uZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZVllYXIoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyQ2VsbCA9IHRoaXMuX2dldFllYXJMaXN0KCkuZmluZCgoeyB5ZWFyIH0pID0+IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkWWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50WWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLl9jdXJyZW50WWVhcik7XG4gICAgICAgIGlmIChjdXJyZW50WWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50WWVhckNlbGwueWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZFswXVswXS55ZWFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0WWVhckdyaWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZFllYXJzQW1vdW50OiBudW1iZXIgPSB0aGlzLnllYXJWaWV3R3JpZC5jb2xzICogdGhpcy55ZWFyVmlld0dyaWQucm93cztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJZZWFyTGlzdDogQ2FsZW5kYXJZZWFyW10gPSBbXTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGRpc3BsYXllZFllYXJzQW1vdW50OyArK3gpIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB4O1xuICAgICAgICAgICAgY2FsZW5kYXJZZWFyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9nZXRZZWFyTmFtZSh5ZWFyKSxcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuX2dldEFyaWFZZWFyTmFtZSh5ZWFyKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogeWVhciA9PT0gdGhpcy55ZWFyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgY3VycmVudDogeWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChjYWxlbmRhclllYXJMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQucHVzaChjYWxlbmRhclllYXJMaXN0LnNwbGljZSgwLCB0aGlzLnllYXJWaWV3R3JpZC5jb2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVZZWFyID0gdGhpcy5fZ2V0QWN0aXZlWWVhcigpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gY2VsbC55ZWFyID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGFyaWEgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFyaWFZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXIsIGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIHRha2luZyBpbnRvIGFjY291bnQgeWVhck1hcHBpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhclN0cmluZyh5ZWFyOiBudW1iZXIsIGRlZmF1bHRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIHllYXIgZ3JpZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTGlzdCgpOiBDYWxlbmRhclllYXJbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyWWVhcltdPltdKS5jb25jYXQoLi4udGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQucm93cyAqIHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uS2V5U2VsZWN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4gdGhpcy5zZWxlY3RZZWFyKHRoaXMuX2dldFllYXJMaXN0KClbaW5kZXhdKSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdFN0YXJ0QXBwcm9hY2gucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpb3VzWWVhckxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RFbmRBcHByb2FjaC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFllYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke3RoaXMuX2dldElkKGluZGV4KX1gKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX3llYXJzXCI+XG4gICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuICAgID5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1idXR0b24gZmQtYnV0dG9uLS10cmFuc3BhcmVudCBmZC1jYWxlbmRhcl9faXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyQ2VsbCBvZiBjb2xZZWFyczsgbGV0IGNvbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLWN1cnJlbnRdPVwieWVhckNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInllYXJDZWxsLnRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ5ZWFyQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwieWVhckNlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJdPVwieWVhckNlbGwueWVhclwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIHllYXJDZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RZZWFyKHllYXJDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhckNlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFyaWEtbGFiZWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5jdXJyZW50ID8gX3RvZGF5TGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5zZWxlY3RlZCA/IF9zZWxlY3RlZERhdGVMYWJlbElkIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyQ2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwieWVhckNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG5cbiAgICA8IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbiAgICA8ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPGRpdiBbYXR0ci5pZF09XCJfdG9kYXlMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==