ngx-histaff-alpha 4.5.6 → 4.5.8

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.
@@ -36,6 +36,7 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
36
36
  this.showPlaceholder = false;
37
37
  this.popupWidth = 300;
38
38
  this.popupXPadding = 12;
39
+ this.hasError = false;
39
40
  this.subscriptions = [];
40
41
  this.openState = false;
41
42
  this.monthPickerActive = false;
@@ -134,6 +135,7 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
134
135
  this.lastText = '';
135
136
  this.markAsTouched();
136
137
  this.onChange(null);
138
+ this.hasError = false;
137
139
  return;
138
140
  }
139
141
  else {
@@ -153,16 +155,21 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
153
155
  this.lastText = event.target.value;
154
156
  }
155
157
  var v = event.target.value;
156
- if (v.match(/^\d{2}$/) !== null) {
157
- event.target.value = v + '/';
158
- this.textValue = v + '/';
159
- }
160
- else if (v.match(/^\d{2}\/\d{2}$/) !== null) {
161
- event.target.value = v + '/';
162
- this.textValue = v + '/';
158
+ if (event.inputType === 'deleteContentBackward') {
159
+ this.textValue = v;
163
160
  }
164
161
  else {
165
- this.textValue = v;
162
+ if (v.match(/^\d{2}$/) !== null) {
163
+ event.target.value = v + '/';
164
+ this.textValue = v + '/';
165
+ }
166
+ else if (v.match(/^\d{2}\/\d{2}$/) !== null) {
167
+ event.target.value = v + '/';
168
+ this.textValue = v + '/';
169
+ }
170
+ else {
171
+ this.textValue = v;
172
+ }
166
173
  }
167
174
  if (this.textValue.length === 10) {
168
175
  const digits = this.textValue.split('/');
@@ -295,6 +302,7 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
295
302
  this.pendingDay = date.getDate();
296
303
  this.markAsTouched();
297
304
  this.onChange(date);
305
+ this.hasError = false;
298
306
  this.openState = false;
299
307
  }
300
308
  goToday() {
@@ -394,6 +402,39 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
394
402
  this.yearPickerActive = false;
395
403
  this.monthPickerActive = true;
396
404
  }
405
+ onBlur(e) {
406
+ if (!!this.textValue && !!this.textValue.length) {
407
+ const arr = this.textValue.split("/");
408
+ if (arr.length !== 3) {
409
+ this.hasError = true;
410
+ }
411
+ else {
412
+ if (!(arr[0].length === 2 && arr[1].length === 2 && arr[2].length === 4)) {
413
+ this.hasError = true;
414
+ }
415
+ else {
416
+ try {
417
+ const testVal = new Date(Number(arr[2]), Number(arr[1]) - 1, Number(arr[0]));
418
+ if (typeof (testVal.getFullYear) === 'function') {
419
+ this.hasError = false;
420
+ }
421
+ else {
422
+ this.hasError = true;
423
+ }
424
+ }
425
+ catch {
426
+ this.hasError = true;
427
+ }
428
+ }
429
+ }
430
+ }
431
+ if (this.hasError) {
432
+ this.value = null;
433
+ // this.textValue = '';
434
+ this.onChange(null);
435
+ // this.hasError = false;
436
+ }
437
+ }
397
438
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreDatePickerComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomService }, { token: i2.CoreDatetimeService }, { token: i3.MultiLanguageService }, { token: i4.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
398
439
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreDatePickerComponent, isStandalone: true, selector: "core-date-picker", inputs: { enableTimeZoneConverter: "enableTimeZoneConverter", showPlaceholder: "showPlaceholder", popupWidth: "popupWidth", popupXPadding: "popupXPadding", popupAlign: "popupAlign", rangeLimit: "rangeLimit", readonly: "readonly", disabled: "disabled" }, providers: [
399
440
  {
@@ -401,7 +442,7 @@ export class CoreDatePickerComponent extends CoreFormControlBaseComponent {
401
442
  multi: true,
402
443
  useExisting: CoreDatePickerComponent
403
444
  }
404
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }] }); }
445
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "backward", first: true, predicate: ["backward"], descendants: true }, { propertyName: "calendarBody", first: true, predicate: ["calendarBody"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreYearPickerComponent, selector: "core-year-picker", inputs: ["id", "default"], outputs: ["onChange"] }, { kind: "component", type: CoreMonthPickerComponent, selector: "core-month-picker", inputs: ["id", "lang", "monthObject$"], outputs: ["onChange", "onYearClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }] }); }
405
446
  }
406
447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreDatePickerComponent, decorators: [{
407
448
  type: Component,
@@ -418,7 +459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
418
459
  multi: true,
419
460
  useExisting: CoreDatePickerComponent
420
461
  }
421
- ], template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"] }]
462
+ ], template: "<div #container class=\"core-date-picker-container\">\r\n <input type=\"checkbox\" [(ngModel)]=\"openState\">\r\n <input type=\"checkbox\" [(ngModel)]=\"monthPickerActive\">\r\n <input type=\"checkbox\" [(ngModel)]=\"yearPickerActive\">\r\n <input #backward type=\"checkbox\" class=\"tl-datepicker-direction\">\r\n\r\n <div class=\"p-relative\">\r\n <input #input type=\"text\" class=\"form-control\" [placeholder]=\"showPlaceholder ? 'dd/mm/yyyy' : ''\"\r\n maxlength=\"10\" [(ngModel)]=\"textValue\" [class.form-control-disabled]=\"disabled\" [disabled]=\"disabled\" [class.has-error]=\"hasError\" (blur)=\"onBlur($event)\">\r\n\r\n <!-- <label class=\"icon\" (click)=\"toggleOpen()\"></label> -->\r\n\r\n <div class=\"calendar-icon-wrapper\" [class.form-control-disabled]=\"disabled\"\r\n (click)=\"toggleOpen()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-calendar\"></i>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"tl-date-picker-popup\" [class.open]=\"openState\" [ngStyle]=\"{\r\n left: (!popupAlign || popupAlign === 'left') ? '0px' : 'auto',\r\n right: (popupAlign === 'right') ? '0px' : 'auto',\r\n }\">\r\n <div class=\"date-picker-session\" [class.d-none]=\"monthPickerActive || yearPickerActive\">\r\n <div class=\"navigator\">\r\n <label class=\"month-dropdown\" (click)=\"toggleMonthPickerActive()\">{{ currentMonthText }} {{\r\n currentMonthObject$.value.year }}</label>\r\n <div class=\"arrows\">\r\n <div class=\"go-up\" (click)=\"goBackward()\"></div>\r\n <div class=\"go-down\" (click)=\"goForeward()\"></div>\r\n </div>\r\n </div>\r\n <div class=\"weekday-header\">\r\n <ul>\r\n @for (day of headerWeekdays; track $index) {\r\n <li [class.t7]=\"$index===5\" [class.cn]=\"$index===6\">\r\n <div>{{ day }}</div>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n <div class=\"calendar-body-container\">\r\n <div #calendarBody class=\"calendar-body\" [class.slide-up]=\"direction===1\"\r\n [class.slide-down]=\"direction===-1\">\r\n @for (week of data; track week) {\r\n <ul>\r\n @for (item of week.items; track $index) {\r\n <li [appTooltip]=\"item.dateValue.toLocaleDateString()\" [showAnyway]=\"isDevMode\">\r\n <div [class.out-of-month]=\"!!!item.currentMonth\" [class.t7]=\"$index===5\"\r\n [class.cn]=\"$index===6\"\r\n [class.out-of-range]=\"!!rangeLimit && !!!((item.dateValue>=rangeLimit.minDate) && (rangeLimit.maxDate>=item.dateValue))\"\r\n [class.active]=\"item.dateValue.getFullYear()===pendingYear && item.dateValue.getMonth()===pendingMonthIndex && item.dateValue.getDate()===pendingDay\"\r\n (click)=\"onItemClick(item.dateValue)\">\r\n {{ item.date }}</div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"month-picker-session\" [class.active]=\"monthPickerActive\">\r\n <core-month-picker [lang]=\"lang\" [monthObject$]=\"currentMonthObject$\"\r\n (onChange)=\"onMonthObjectChange($event)\"\r\n (onYearClick)=\"onMonthPickerYearClick($event)\"></core-month-picker>\r\n </div>\r\n <div class=\"year-picker-session\" [class.active]=\"yearPickerActive\">\r\n <core-year-picker [lang]=\"lang\" (onChange)=\"onYearPicked($event)\"></core-year-picker>\r\n </div>\r\n <div class=\"footer-wrapper\">\r\n <div class=\"cdp-footer\">\r\n <div class=\"clear\" [class.opacity-0]=\"!!!textValue\" (click)=\"clear()\">{{ 'UI.CORE_DATE_PICKER_CLEAR' |\r\n translate: lang }}</div>\r\n <div class=\"digi-watch\"></div>\r\n <div class=\"today\" (click)=\"goToday()\">{{ 'UI.CORE_DATE_PICKER_TODAY' | translate: lang }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".core-date-picker-container{--indicator-height: 39px;--popup-z-index: 99999999;--popup-width: 300px;--popup-height: 400px;--popup-bg-color: white;--popup-x-padding: 12px;--cell-size: 0px;--arrow-font-size: 28px;--font-size: 13px;--font-bold: 700;--font-light: 400;--hover-bg-color: #E6EBED;--active-bg-color: cadetblue;--error-text: \"\";--scroll-distance: calc(var(--cell-size) * 6);position:relative;font-weight:var(--font-light);font-size:var(--font-size)}.core-date-picker-container input[type=checkbox]{display:none}.core-date-picker-container input.has-error{color:#ef2b58}.core-date-picker-container .calendar-icon-wrapper{display:block;position:absolute;border:1px solid #ced4da;right:0;top:0;width:35px;height:35px;font-size:14.18px;color:#848484;cursor:pointer}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper{width:33px;height:33px;display:flex;align-items:center;justify-content:center}.core-date-picker-container .calendar-icon-wrapper>.flex-wrapper>i.close-icon{color:#848484;font-size:20px}.core-date-picker-container .tl-date-picker-popup{position:absolute;overflow:hidden;z-index:var(--popup-z-index);width:var(--popup-width);height:var(--popup-height);background-color:var(--popup-bg-color);box-shadow:var(--decoration-box-shadow);border-radius:3px;padding:0 12px;display:none}.core-date-picker-container .tl-date-picker-popup.open{display:block}.core-date-picker-container .month-picker-session,.core-date-picker-container .year-picker-session{display:none}.core-date-picker-container .month-picker-session.active,.core-date-picker-container .year-picker-session.active{display:block}.core-date-picker-container .date-picker-session.d-none{display:none}.core-date-picker-container .navigator{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .month-dropdown{font-weight:var(--font-bold);cursor:pointer}.core-date-picker-container .arrows{display:flex;align-items:center;justify-content:flex-end}.core-date-picker-container .arrows>div{margin:0 2px}.core-date-picker-container .arrows>div:before{font-family:feather;font-size:var(--arrow-font-size);cursor:pointer}.core-date-picker-container .arrows>div:hover:before{background-color:var(--hover-bg-color)}.core-date-picker-container .go-up:before{content:\"\\e914\"}.core-date-picker-container .go-down:before{content:\"\\e90c\"}.core-date-picker-container ul{padding:0;margin:0}.core-date-picker-container ul{height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7)}.core-date-picker-container ul>li{user-select:none;-webkit-user-select:none;position:relative;display:inline-block!important;width:var(--cell-size);height:var(--cell-size);cursor:pointer}.core-date-picker-container .calendar-body-container{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7 * 6);position:absolute;z-index:1;background-color:var(--popup-bg-color);overflow:hidden}.core-date-picker-container .calendar-body>ul>li>div:hover{background-color:var(--hover-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.active{background-color:var(--active-bg-color)}.core-date-picker-container .calendar-body>ul>li>div.out-of-month{color:#d3d3d3}.core-date-picker-container .calendar-body>ul>li>div.out-of-range{-webkit-user-select:none;user-select:none;cursor:default;opacity:.2!important}.core-date-picker-container .calendar-body>ul>li>div.out-of-range:hover{background-color:var(--popup-bg-color)}.core-date-picker-container ul>li>div{width:100%;height:calc((var(--popup-width) - var(--popup-x-padding) * 2) / 7);display:flex;align-items:center;justify-content:center;border-radius:5px}.core-date-picker-container .t7{color:#07b7ee}.core-date-picker-container .cn{color:#ef2b58}.core-date-picker-container .weekday-header{font-weight:var(--font-bold)}.core-date-picker-container .calendar-body{position:absolute;bottom:0}.core-date-picker-container .tl-datepicker-direction:checked~.tl-date-picker-popup>.calendar-body-container>.calendar-body{top:0}.core-date-picker-container .slide-up{animation:slide-up .25s linear}.core-date-picker-container .slide-down{transform:translateY(var(--scroll-distance));animation:slide-down .25s linear}.core-date-picker-container .footer-wrapper{width:calc(var(--popup-width) - var(--popup-x-padding) * 2);position:absolute;bottom:var(--popup-x-padding);left:var(--popup-x-padding);background-color:var(--popup-bg-color)!important}.core-date-picker-container .cdp-footer{width:100%;display:flex;align-items:center;justify-content:space-between}.core-date-picker-container .today,.core-date-picker-container .clear{width:30%;height:var(--cell-size);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.core-date-picker-container .today{background-color:#f37540}.core-date-picker-container .clear{background-color:brown}@keyframes slide-down{0%{top:calc(var(--scroll-distance) * -1)}to{top:0}}@keyframes slide-up{0%{top:0}to{top:calc(var(--scroll-distance) * -1)}}\n"] }]
422
463
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomService }, { type: i2.CoreDatetimeService }, { type: i3.MultiLanguageService }, { type: i4.AlertService }], propDecorators: { enableTimeZoneConverter: [{
423
464
  type: Input
424
465
  }], showPlaceholder: [{
@@ -448,4 +489,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
448
489
  type: ViewChild,
449
490
  args: ['calendarBody']
450
491
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUE0QixvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7QUE2Qm5FOzs7Ozs7Ozs7O0VBVUU7QUFDRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsNEJBQTRC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UUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUNNLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFJlbmRlcmVyMiwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlRGF0ZXRpbWVTZXJ2aWNlLCBJRGF0YVJvdywgSU1vbnRoSWRlbnRpdHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWRhdGV0aW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlWWVhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUteWVhci1waWNrZXIvY29yZS15ZWFyLXBpY2tlci9jb3JlLXllYXItcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci9jb3JlLW1vbnRoLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVEYXRlUGlja2VyUmFuZ2Uge1xyXG4gIG1pbkRhdGU6IERhdGU7XHJcbiAgbWF4RGF0ZTogRGF0ZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWRhdGUtcGlja2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZVllYXJQaWNrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlTW9udGhQaWNrZXJDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVG9vbHRpcERpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZURhdGVQaWNrZXJDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbi8qXHJcbiAgdGhpcyBjb21wb25lbnQgcmVuZGVycyBpdHMgbWFpbiBwYXJ0IGFuZCBwb3B1cCBwYXJ0XHJcbiAgdGhlIG1haW4gcGFydCBkZWFscyB3aXRoIHVzZXIgaW5wdXQgZnJvbSBwaHlzaWNhbCBrZXlib2FyZCBvciB0b3VjaCBrZXlib2FyZFxyXG4gIHRoZSBwb3B1cCBwYXJ0IGNvbnNpc3RzIG9mIDEpIG5hdmlnYXRvciAyKSBoZWFkZXIgMykgY2FsZW5kYXIgYm9keSBjb250YWluZXIgNCkgY2FsZW5kYXIgYm9keVxyXG4gIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZW0gaXM6XHJcbiAgICA0KSBjYWxlbmRhciBib2R5OlxyXG4gICAgICBkdWUgdmFyaWF0aW9ucyB0aGUgY2FsZW5kYXIgYm9keSBtYXkgcmVhY2ggdG8gNiByb3dzIG9mIHdlZWsgZGF5IHN1Yi1hcnJheVxyXG4gICAgLSBmb3IgdmlzdWFsLCBsb2dpYyBhbmQgY29kaW5nIHNpbXBsaWNpdHkgSSB3aWxsIGFsd2F5cyByZW5kZXIgYWxsIHRoZSA2IHJvd3NcclxuICAgIHNvIGNhbGVuZGFyIGJvZHkgZGltZW5zaW9uIHN0YXlzIHVuY2hhbmdlZFxyXG4gIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgQ29yZURhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlciE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcG9wdXBXaWR0aDogbnVtYmVyID0gMzAwO1xyXG4gIEBJbnB1dCgpIHBvcHVwWFBhZGRpbmc6IG51bWJlciA9IDEyO1xyXG4gIEBJbnB1dCgpIHBvcHVwQWxpZ24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmFuZ2VMaW1pdCE6IElDb3JlRGF0ZVBpY2tlclJhbmdlO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIHJlYWRvbmx5ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvdmVycmlkZSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcblxyXG5cclxuICBsaXN0ZW5lckZuITogKCkgPT4gdm9pZDtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIG9wZW5TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vbnRoUGlja2VyQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgeWVhclBpY2tlckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjZWxsU2l6ZTogbnVtYmVyID0gKHRoaXMucG9wdXBXaWR0aCAtIHRoaXMucG9wdXBYUGFkZGluZyAqIDIpIC8gNztcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBEYXRlIHwgbnVsbDtcclxuICBwZW5kaW5nWWVhciE6IG51bWJlcjtcclxuICBwZW5kaW5nTW9udGhJbmRleCE6IG51bWJlcjtcclxuICBwZW5kaW5nRGF5OiBudW1iZXIgPSB0aGlzLnZhbHVlPy5nZXREYXRlKCkhO1xyXG5cclxuICBjdXJyZW50TW9udGhPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PElNb250aElkZW50aXR5PjtcclxuICBuZXdEYXRlITogRGF0ZTtcclxuXHJcbiAgY3VycmVudE1vbnRoVGV4dCE6IHN0cmluZztcclxuICBjdXJyZW50SG91cnMhOiBudW1iZXI7XHJcbiAgY3VycmVudE1pbnV0ZXMhOiBudW1iZXI7XHJcbiAgY3VycmVudFNlY29uZHMhOiBudW1iZXI7XHJcbiAgY3VycmVudE1pbGxpc2Vjb25kcyE6IG51bWJlcjtcclxuXHJcbiAgZGF0YSE6IElEYXRhUm93W107XHJcbiAgaGVhZGVyV2Vla2RheXMhOiBzdHJpbmdbXTtcclxuICBkaXJlY3Rpb246IG51bWJlciA9IDE7IC8vIHN0YXJ0dXAgZGlyZWN0aW9uIDEgfCAtMVxyXG5cclxuICB0ZXh0VmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBpc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdiYWNrd2FyZCcpIGJhY2t3YXJkITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjYWxlbmRhckJvZHknKSBjYWxlbmRhckJvZHkhOiBFbGVtZW50UmVmO1xyXG5cclxuICBpbnB1dFN0cmVhbSQhOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgbGFzdFRleHQhOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBEb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3JlRGF0ZXRpbWVTZXJ2aWNlOiBDb3JlRGF0ZXRpbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubmV3RGF0ZSA9ICEhdGhpcy5yYW5nZUxpbWl0ID8gdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGUgOiBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTW9udGhJZGVudGl0eT4oe1xyXG4gICAgICB5ZWFyOiB0aGlzLnZhbHVlPy5nZXRGdWxsWWVhcigpIHx8IHRoaXMubmV3RGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aEluZGV4OiB0aGlzLnZhbHVlPy5nZXRNb250aCgpIHx8IHRoaXMubmV3RGF0ZS5nZXRNb250aCgpXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVkKSB0aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoISEhdGhpcy52YWx1ZSkge1xyXG4gICAgICAvL3RoaXMudmFsdWUgPSB0aGlzLm5ld0RhdGU7XHJcbiAgICAgIHRoaXMubGFzdFRleHQgPSBcIlwiXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBlbmRpbmdZZWFyID0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdNb250aEluZGV4ID0gdGhpcy52YWx1ZS5nZXRNb250aCgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdEYXkgPSB0aGlzLnZhbHVlLmdldERhdGUoKTtcclxuICAgICAgdGhpcy5jdXJyZW50SG91cnMgPSB0aGlzLnZhbHVlLmdldEhvdXJzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbnV0ZXMgPSB0aGlzLnZhbHVlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50U2Vjb25kcyA9IHRoaXMudmFsdWUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaWxsaXNlY29uZHMgPSB0aGlzLnZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qXHJcbiAgICBpZiAoISEhdGhpcy5pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBcclxuICAgICAgd2l0aGluIGEgcGFnZSwgdGFubGVpY2EtZGF0ZS1waWNrZXIgbmVlZHMgYW4gdW5pcXVlIHByb3BlcnR5IGlkIHZhbHVlIHRvIHdvcmsgY29ycmVjdGx5XHJcbiAgICAgIGZvciBleGFtcGxlOiA8dGFubGVpY2EtZGF0ZS1waWNrZXIgaWQ9XCJzdGFydERhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIj48L3RhbmxlaWNhLWRhdGUtcGlja2VyPlxyXG4gICAgICBgKVxyXG4gICAgfVxyXG4gICAgKi9cclxuICAgIHRoaXMuaGVhZGVyV2Vla2RheXMgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0U2hvcnRXZWVrZGF5cyh0aGlzLmxhbmcpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIHRyaWdnZXIgYW5pbWF0aW9uIGJ5IHJlZmxvdyB0aGUgRE9NXHJcbiAgKi9cclxuICB0cmlnZ2VyUmVmbG93KCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmNhbGVuZGFyQm9keS5uYXRpdmVFbGVtZW50O1xyXG4gICAgLy9ET00gbWFuaXB1bGF0aW9uXHJcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLXVwXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcInNsaWRlLWRvd25cIik7XHJcbiAgICB9XHJcbiAgICBlbC5vZmZzZXRIZWlnaHQ7ICAvKiB0cmlnZ2VyIHJlZmxvdyAoYWx0ZXJuYXRpdmU6IGVsLm9mZnNldFdpZHRoKSAqL1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAxKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0LmFkZChcInNsaWRlLXVwXCIpLCAwKTsgLy8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gQ2FsbGJhY2sgcXVldWUgdGhyb3VnaCBXZWJBUElzLCBzbyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIERPTSBtYW5pcHVsYXRpb24gZW5kc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBlbC5jbGFzc0xpc3QuYWRkKFwic2xpZGUtZG93blwiKSwgMCk7IC8vIHBhc3MgdGhlIGNhbGxiYWNrIHRvIENhbGxiYWNrIHF1ZXVlIHRocm91Z2ggV2ViQVBJcywgc28gaXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBET00gbWFuaXB1bGF0aW9uIGVuZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICBUaGlzIGV2ZW50cyBnZXQgY2FsbGVkIGJ5IGFsbCBjbGlja3Mgb24gdGhlIHBhZ2VcclxuICAgICovXHJcbiAgICB0aGlzLmxpc3RlbmVyRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8qXHJcbiAgICAgICAgaGFuZGxlIGNsaWNrIG91dHNpZGVcclxuICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmICEhIXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBtYXhaSW5kZXggPSB0aGlzLmRvbVNlcnZpY2UuZ2V0TWF4WkluZGV4KCk7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gcmVjdC5oZWlnaHQgfHwgMzU7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmRpY2F0b3ItaGVpZ2h0JywgKGlucHV0SGVpZ2h0IC0gNikgKyAncHgnKVxyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wb3B1cC16LWluZGV4JywgbWF4WkluZGV4KTtcclxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2VsbC1zaXplJywgdGhpcy5jZWxsU2l6ZSArICdweCcpXHJcblxyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcclxuICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRCb2R5KHZhbHVlLnllYXIsIHZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgICAgIHRoaXMudHJpZ2dlclJlZmxvdygpO1xyXG4gICAgICB9LCAwKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmlucHV0U3RyZWFtJCA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdpbnB1dCcpO1xyXG4gICAgdGhpcy5pbnB1dFN0cmVhbSQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ29yZURhdGVQaWNrZXJDb21wb25lbnQ6IGV2ZW50LmlucHV0VHlwZVwiLCBldmVudC5pbnB1dFR5cGUpXHJcbiAgICAgIGNvbnN0IGlzQWxsVGV4dFNlbGVjdGVkID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuaW5wdXRUeXBlID09PSAnZGVsZXRlQ29udGVudEZvcndhcmQnKSB7XHJcbiAgICAgICAgaWYgKGlzQWxsVGV4dFNlbGVjdGVkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29yZURhdGVQaWNrZXJDb21wb25lbnQ6IEFsbCB0ZXh0IHdhcyBzZWxlY3RlZCBiZWZvcmUgZGVsZXRpb24nKTtcclxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmxhc3RUZXh0ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3JlRGF0ZVBpY2tlckNvbXBvbmVudDogUGFydGlhbCBvciBubyB0ZXh0IHNlbGVjdGVkIGJlZm9yZSBkZWxldGlvbicpO1xyXG4gICAgICAgICAgdGhpcy5sYXN0VGV4dCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChldmVudC5pbnB1dFR5cGUgIT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnXHJcbiAgICAgICAgJiYgJyMwIzEjMiMzIzQjNSM2IzcjOCM5I0JhY2tzcGFjZSNEZWxldGUnLmluZGV4T2YoJyMnICsgZXZlbnQuZGF0YSkgPCAwKSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5sYXN0VGV4dDtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhc3RUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB2ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICBpZiAodi5tYXRjaCgvXlxcZHsyfSQvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHYgKyAnLyc7XHJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICB9IGVsc2UgaWYgKHYubWF0Y2goL15cXGR7Mn1cXC9cXGR7Mn0kLykgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdiArICcvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICAgY29uc3QgZGlnaXRzID0gdGhpcy50ZXh0VmFsdWUuc3BsaXQoJy8nKTtcclxuICAgICAgICBjb25zdCB5ID0gTnVtYmVyKGRpZ2l0c1syXSk7XHJcbiAgICAgICAgY29uc3QgbSA9IE51bWJlcihkaWdpdHNbMV0pIC0gMTtcclxuICAgICAgICBjb25zdCBkID0gTnVtYmVyKGRpZ2l0c1swXSk7XHJcblxyXG4gICAgICAgIGlmICh5IDw9IDAgfHwgbSA8IDAgfHwgbSA+IDExIHx8IGQgPCAxIHx8IGQgPiAzMSkge1xyXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBociA9IG5vdy5nZXRIb3VycygpO1xyXG4gICAgICAgIGNvbnN0IG1uID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBjb25zdCBzZCA9IG5vdy5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3QgbXMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoZGlnaXRzWzJdKSwgTnVtYmVyKGRpZ2l0c1sxXSkgLSAxLCBOdW1iZXIoZGlnaXRzWzBdKSwgaHIsIG1uLCBzZCwgbXMpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyhkYXRlKTtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKGlucHV0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJVVEMgaW5wdXQgXCIsIGlucHV0KTtcclxuICAgIGxldCBvYmo6IGFueSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoaW5wdXQpID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgICAgICBvYmogPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9iaiA9IG5ldyBEYXRlKG5ldyBEYXRlKGlucHV0KS5zZXRIb3VycygwLDAsMCwwKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mKGlucHV0LmdldEZ1bGxZZWFyKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIG9iaiA9IGlucHV0XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBkYXRlIGlucHV0XCIpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVByb3BlcnRpZXMgPSAodmFsdWU6IERhdGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJBZnRlciBjb252ZXJ0IHRvIExvY2FsIERhdGUgXCIsIHZhbHVlKTtcclxuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmxhc3RUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHZhbHVlKVxyXG4gICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB2YWx1ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHZhbHVlLmdldE1vbnRoKClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5jdXJyZW50SG91cnMgPSB2YWx1ZS5nZXRIb3VycygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaW51dGVzID0gdmFsdWUuZ2V0TWludXRlcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWNvbmRzID0gdmFsdWUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaWxsaXNlY29uZHMgPSB2YWx1ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuXHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ1llYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdNb250aEluZGV4ID0gdmFsdWUuZ2V0TW9udGgoKTtcclxuICAgICAgdGhpcy5wZW5kaW5nRGF5ID0gdmFsdWUuZ2V0RGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICAgIG5vdyA9IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiBub3cuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICBtb250aEluZGV4OiBub3cuZ2V0TW9udGgoKVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmN1cnJlbnRIb3VycyA9IG5vdy5nZXRIb3VycygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaW51dGVzID0gbm93LmdldE1pbnV0ZXMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50U2Vjb25kcyA9IG5vdy5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1pbGxpc2Vjb25kcyA9IG5vdy5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8qIENvbnZlcnQgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSAqL1xyXG4gICAgICBjb25zdCBvcmlnaW5hbERhdGU6IERhdGUgPSBuZXcgRGF0ZShvYmopO1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUob3JpZ2luYWxEYXRlLmdldFRpbWUoKSAtIG9mZnNldCAqIDYwMDAwKTtcclxuICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICAgIGlmICh0eXBlb2Ygb2JqIS5nZXRGdWxsWWVhciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZGF0ZVZhbHVlKTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5pc0RhdGVTdHJpbmcob2JqKTtcclxuICAgICAgICBpZiAoaXNEYXRlKSB7XHJcbiAgICAgICAgICAvL2NvbnN0IF9vYmogPSBuZXcgRGF0ZShvYmopOyAvLyBjb252ZXJ0IHN0cmluZyB0byBkYXRlIFxyXG4gICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhkYXRlVmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBkYXRlIGlucHV0OiBcIiwgb2JqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGRhdGUgaW5wdXQ6IFwiLCBvYmopO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DbGljayhkYXRlOiBEYXRlKSB7XHJcblxyXG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHJldHVybjtcclxuXHJcbiAgICBpZiAoISF0aGlzLnJhbmdlTGltaXQpIHtcclxuICAgICAgaWYgKGRhdGUgPCB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSB8fCBkYXRlID4gdGhpcy5yYW5nZUxpbWl0Lm1heERhdGUpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgaCA9IG5vdy5nZXRIb3VycygpO1xyXG4gICAgY29uc3QgbSA9IG5vdy5nZXRNaW51dGVzKCk7XHJcbiAgICBjb25zdCBzID0gbm93LmdldFNlY29uZHMoKTtcclxuICAgIGNvbnN0IG1zID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgZGF0ZS5zZXRIb3VycyhoKTtcclxuICAgIGRhdGUuc2V0TWludXRlcyhtKTtcclxuICAgIGRhdGUuc2V0U2Vjb25kcyhzKTtcclxuICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKG1zKTtcclxuICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKGRhdGUpO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ1llYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB0aGlzLnBlbmRpbmdNb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xyXG4gICAgdGhpcy5wZW5kaW5nRGF5ID0gZGF0ZS5nZXREYXRlKCk7XHJcblxyXG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb1RvZGF5KCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgIGlmICh0b2RheSA8IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIHx8IHRvZGF5ID4gdGhpcy5yYW5nZUxpbWl0Lm1heERhdGUpIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmRhdGVUb1ZuU3RyaW5nKHRvZGF5KTtcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0b2RheSk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmxhc3RUZXh0ID0gJyc7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrd2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gLTE7XHJcbiAgICB0aGlzLmJhY2t3YXJkLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyIC0gMSxcclxuICAgICAgICBtb250aEluZGV4OiAxMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDExKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhcixcclxuICAgICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCAtIDFcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Gb3Jld2FyZCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gMTtcclxuICAgIHRoaXMuYmFja3dhcmQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzXHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggPT09IDExKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhciArIDEsXHJcbiAgICAgICAgbW9udGhJbmRleDogMFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS55ZWFyLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4ICsgMVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbiAqL1xyXG4gIGJ1aWxkQm9keSh5ZWFyOiBudW1iZXIsIG1vbnRoSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRDYWxlbmRhckJvZHkoeWVhciwgbW9udGhJbmRleCwgdGhpcy5kaXJlY3Rpb24pO1xyXG4gICAgdGhpcy5kYXRhID0gYm9keS5yb3dzO1xyXG4gICAgY29uc3Qgc2Nyb2xsRGlzdGFuY2UgPSAoYm9keS5yb3dzLmxlbmd0aCAtIDYpICogdGhpcy5jZWxsU2l6ZSArICdweCc7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNjcm9sbC1kaXN0YW5jZScsIChib2R5LnJvd3MubGVuZ3RoIC0gNikgKiB0aGlzLmNlbGxTaXplICsgJ3B4Jyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmxpc3RlbmVyRm4pIHRoaXMubGlzdGVuZXJGbigpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxuICB0b2dnbGVPcGVuKCkge1xyXG4gICAgaWYgKCEhdGhpcy5yZWFkb25seSkgcmV0dXJuXHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVkKSByZXR1cm5cclxuICAgIHRoaXMub3BlblN0YXRlID0gIXRoaXMub3BlblN0YXRlO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTW9udGhQaWNrZXJBY3RpdmUoKSB7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gIXRoaXMubW9udGhQaWNrZXJBY3RpdmU7XHJcbiAgfVxyXG5cclxuICBvbk1vbnRoT2JqZWN0Q2hhbmdlKGFyZ3M6IElNb250aElkZW50aXR5KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgIHllYXI6IGFyZ3MueWVhcixcclxuICAgICAgbW9udGhJbmRleDogYXJncy5tb250aEluZGV4XHJcbiAgICB9KVxyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aFBpY2tlclllYXJDbGljayhlOiBudW1iZXIpIHtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMueWVhclBpY2tlckFjdGl2ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblllYXJQaWNrZWQoZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgIHllYXI6IGUsXHJcbiAgICAgIG1vbnRoSW5kZXg6IHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4XHJcbiAgICB9KTtcclxuICAgIHRoaXMueWVhclBpY2tlckFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9IHRydWU7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJvcGVuU3RhdGVcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIm1vbnRoUGlja2VyQWN0aXZlXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICA8aW5wdXQgI2JhY2t3YXJkIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwidGwtZGF0ZXBpY2tlci1kaXJlY3Rpb25cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicC1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJzaG93UGxhY2Vob2xkZXIgPyAnZGQvbW0veXl5eScgOiAnJ1wiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJ0ZXh0VmFsdWVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiaWNvblwiIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIj48L2xhYmVsPiAtLT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWljb24td3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItY2FsZW5kYXJcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bC1kYXRlLXBpY2tlci1wb3B1cFwiIFtjbGFzcy5vcGVuXT1cIm9wZW5TdGF0ZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICBsZWZ0OiAoIXBvcHVwQWxpZ24gfHwgIHBvcHVwQWxpZ24gPT09ICdsZWZ0JykgPyAnMHB4JyA6ICdhdXRvJyxcclxuICAgICAgICByaWdodDogKHBvcHVwQWxpZ24gPT09ICdyaWdodCcpID8gJzBweCcgOiAnYXV0bycsXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuZC1ub25lXT1cIm1vbnRoUGlja2VyQWN0aXZlIHx8IHllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdmlnYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibW9udGgtZHJvcGRvd25cIiAoY2xpY2spPVwidG9nZ2xlTW9udGhQaWNrZXJBY3RpdmUoKVwiPnt7IGN1cnJlbnRNb250aFRleHQgfX0ge3tcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnby11cFwiIChjbGljayk9XCJnb0JhY2t3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tZG93blwiIChjbGljayk9XCJnb0ZvcmV3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF5IG9mIGhlYWRlcldlZWtkYXlzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLnQ3XT1cIiRpbmRleD09PTVcIiBbY2xhc3MuY25dPVwiJGluZGV4PT09NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGRheSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAjY2FsZW5kYXJCb2R5IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiIFtjbGFzcy5zbGlkZS11cF09XCJkaXJlY3Rpb249PT0xXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2xpZGUtZG93bl09XCJkaXJlY3Rpb249PT0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHdlZWsgb2YgZGF0YTsgdHJhY2sgd2Vlaykge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiB3ZWVrLml0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFthcHBUb29sdGlwXT1cIml0ZW0uZGF0ZVZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpXCIgW3Nob3dBbnl3YXldPVwiaXNEZXZNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5vdXQtb2YtbW9udGhdPVwiISEhaXRlbS5jdXJyZW50TW9udGhcIiBbY2xhc3MudDddPVwiJGluZGV4PT09NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNuXT1cIiRpbmRleD09PTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vdXQtb2YtcmFuZ2VdPVwiISFyYW5nZUxpbWl0ICYmICEhISgoaXRlbS5kYXRlVmFsdWU+PXJhbmdlTGltaXQubWluRGF0ZSkgJiYgKHJhbmdlTGltaXQubWF4RGF0ZT49aXRlbS5kYXRlVmFsdWUpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpPT09cGVuZGluZ1llYXIgJiYgaXRlbS5kYXRlVmFsdWUuZ2V0TW9udGgoKT09PXBlbmRpbmdNb250aEluZGV4ICYmIGl0ZW0uZGF0ZVZhbHVlLmdldERhdGUoKT09PXBlbmRpbmdEYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLmRhdGVWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwibW9udGhQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUtbW9udGgtcGlja2VyIFtsYW5nXT1cImxhbmdcIiBbbW9udGhPYmplY3QkXT1cImN1cnJlbnRNb250aE9iamVjdCRcIlxyXG4gICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhPYmplY3RDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25ZZWFyQ2xpY2spPVwib25Nb250aFBpY2tlclllYXJDbGljaygkZXZlbnQpXCI+PC9jb3JlLW1vbnRoLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwieWVhci1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgICAgICAgICA8Y29yZS15ZWFyLXBpY2tlciBbbGFuZ109XCJsYW5nXCIgKG9uQ2hhbmdlKT1cIm9uWWVhclBpY2tlZCgkZXZlbnQpXCI+PC9jb3JlLXllYXItcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2RwLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgW2NsYXNzLm9wYWNpdHktMF09XCIhISF0ZXh0VmFsdWVcIiAoY2xpY2spPVwiY2xlYXIoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX0NMRUFSJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlnaS13YXRjaFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZGF5XCIgKGNsaWNrKT1cImdvVG9kYXkoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX1RPREFZJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyL2NvcmUtZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtZGF0ZS1waWNrZXIvY29yZS1kYXRlLXBpY2tlci9jb3JlLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdELFNBQVMsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUE0QixvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHN0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUVqSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7QUE2Qm5FOzs7Ozs7Ozs7O0VBVUU7QUFDRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsNEJBQTRCO0lBcUR2RSxZQUNtQixRQUFtQixFQUNuQixVQUFzQixFQUN0QixtQkFBd0MsRUFDakQsR0FBeUIsRUFDekIsWUFBMEI7UUFFbEMsS0FBSyxFQUFFLENBQUM7UUFOUyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUNqRCxRQUFHLEdBQUgsR0FBRyxDQUFzQjtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXZEM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsZUFBVSxHQUFXLEdBQUcsQ0FBQztRQUN6QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVFwQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFbEMsYUFBUSxHQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUtsRSxlQUFVLEdBQVcsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUcsQ0FBQztRQWE1QyxjQUFTLEdBQVcsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1FBRWxELGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIsY0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBa0J4QixDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBaUI7WUFDN0QsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDN0QsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7U0FDOUQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUUxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDakIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQzdDLENBQUE7UUFFRDs7Ozs7OztVQU9FO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7TUFFRTtJQUNGLGFBQWE7UUFDWCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUN4QixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ0wsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbkM7UUFDRCxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUUsa0RBQWtEO1FBQ3BFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsMEdBQTBHO1NBQzlKO2FBQU07WUFDTCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQywwR0FBMEc7U0FDaEs7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUViOztVQUVFO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDckU7O2NBRUU7WUFDRixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQzlGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUVuRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUMzQixvQkFBb0IsRUFBRSxDQUN2QixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ1AsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUVsQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN4RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFFM0osSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLHNCQUFzQixFQUFFO2dCQUM5QyxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7b0JBQzlFLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDdEIsT0FBTztpQkFDUjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7b0JBQ3BGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO29CQUMvQyxPQUFPO2lCQUNSO2FBQ0Y7WUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssdUJBQXVCO21CQUMxQyx1Q0FBdUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsT0FBTzthQUNSO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7YUFDbkM7WUFFRCxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssdUJBQXVCLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQy9CLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDMUI7cUJBQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxFQUFFO29CQUM3QyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2hELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEIsT0FBTztpQkFDUjtnQkFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBRWpDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBRXJCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsT0FBTzthQUNSO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDO0lBRVEsVUFBVSxDQUFDLEtBQTJCO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksR0FBRyxHQUFRLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE9BQU87U0FDUjthQUFNLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUNyQyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7Z0JBQ2hCLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDWjtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7U0FDRjthQUFNLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNyRSxHQUFHLEdBQUcsS0FBSyxDQUFBO1NBQ1o7YUFBTTtZQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtZQUNuQyxPQUFNO1NBQ1A7UUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBVyxFQUFFLEVBQUU7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTthQUM3QixDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRW5ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwSCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQTtRQUVELElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ3JDLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDckIsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3ZCLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFO2FBQzNCLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JIO2FBQU07WUFDTCxvQ0FBb0M7WUFDcEMsTUFBTSxZQUFZLEdBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLDBDQUEwQztZQUMxQyxJQUFJLE9BQU8sR0FBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7Z0JBQzFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdCO2lCQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLE1BQU0sRUFBRTtvQkFDVix3REFBd0Q7b0JBQ3hELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM3QjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUM1QzthQUVGO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDNUM7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVTtRQUVwQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUUxQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3JCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87Z0JBQUUsT0FBTztTQUM5RTtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztnQkFBRSxPQUFPO1NBQ2hGO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUM7Z0JBQzdDLFVBQVUsRUFBRSxFQUFFO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5RTthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSTtnQkFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUM7YUFDMUQsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JIO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQTtRQUNKLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO2dCQUM3QyxVQUFVLEVBQUUsQ0FBQzthQUNkLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDN0U7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDO2FBQzFELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNySDtJQUNILENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsU0FBUyxDQUFDLElBQVksRUFBRSxVQUFrQjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFNO1FBQzNCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTTtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNuRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBb0I7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsQ0FBUztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxFQUFFLENBQUM7WUFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVO1NBQ3RELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQU07UUFDWCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN0QjtpQkFBTTtnQkFFTCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN4RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0wsSUFBSTt3QkFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0UsSUFBSSxPQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsRUFBRTs0QkFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7eUJBQ3ZCOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3lCQUN0QjtxQkFDRjtvQkFBQyxNQUFNO3dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUN0QjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIseUJBQXlCO1NBQzFCO0lBQ0gsQ0FBQzs4R0F6ZFUsdUJBQXVCO2tHQUF2Qix1QkFBdUIsNlRBbkJ2QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSx1QkFBdUI7YUFDckM7U0FDRixnYUN2Q0gsMC9JQWdGTSwrNkpEeERGLFlBQVksbUhBQ1osV0FBVyxtOEJBQ1gsdUJBQXVCLCtHQUN2Qix3QkFBd0IsdUlBQ3hCLGFBQWEsa0RBQ2IsZ0JBQWdCOzsyRkF1QlAsdUJBQXVCO2tCQWhDbkMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCx1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCLGFBR1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyx5QkFBeUI7eUJBQ3JDO3FCQUNGO3VNQWVRLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ1ksUUFBUTtzQkFBekIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQW9Da0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNGLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDSyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ00sWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgUmVuZGVyZXIyLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9tLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVEYXRldGltZVNlcnZpY2UsIElEYXRhUm93LCBJTW9udGhJZGVudGl0eSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvcmUtZGF0ZXRpbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVZZWFyUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS15ZWFyLXBpY2tlci9jb3JlLXllYXItcGlja2VyL2NvcmUteWVhci1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVNb250aFBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbW9udGgtcGlja2VyL2NvcmUtbW9udGgtcGlja2VyL2NvcmUtbW9udGgtcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZURhdGVQaWNrZXJSYW5nZSB7XHJcbiAgbWluRGF0ZTogRGF0ZTtcclxuICBtYXhEYXRlOiBEYXRlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtZGF0ZS1waWNrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBDb3JlWWVhclBpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVNb250aFBpY2tlckNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRGF0ZVBpY2tlckNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuLypcclxuICB0aGlzIGNvbXBvbmVudCByZW5kZXJzIGl0cyBtYWluIHBhcnQgYW5kIHBvcHVwIHBhcnRcclxuICB0aGUgbWFpbiBwYXJ0IGRlYWxzIHdpdGggdXNlciBpbnB1dCBmcm9tIHBoeXNpY2FsIGtleWJvYXJkIG9yIHRvdWNoIGtleWJvYXJkXHJcbiAgdGhlIHBvcHVwIHBhcnQgY29uc2lzdHMgb2YgMSkgbmF2aWdhdG9yIDIpIGhlYWRlciAzKSBjYWxlbmRhciBib2R5IGNvbnRhaW5lciA0KSBjYWxlbmRhciBib2R5XHJcbiAgdGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgdGhlbSBpczpcclxuICAgIDQpIGNhbGVuZGFyIGJvZHk6XHJcbiAgICAgIGR1ZSB2YXJpYXRpb25zIHRoZSBjYWxlbmRhciBib2R5IG1heSByZWFjaCB0byA2IHJvd3Mgb2Ygd2VlayBkYXkgc3ViLWFycmF5XHJcbiAgICAtIGZvciB2aXN1YWwsIGxvZ2ljIGFuZCBjb2Rpbmcgc2ltcGxpY2l0eSBJIHdpbGwgYWx3YXlzIHJlbmRlciBhbGwgdGhlIDYgcm93c1xyXG4gICAgc28gY2FsZW5kYXIgYm9keSBkaW1lbnNpb24gc3RheXMgdW5jaGFuZ2VkXHJcbiAgXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBDb3JlRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGxhY2Vob2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwb3B1cFdpZHRoOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgcG9wdXBYUGFkZGluZzogbnVtYmVyID0gMTI7XHJcbiAgQElucHV0KCkgcG9wdXBBbGlnbiE6IHN0cmluZztcclxuICBASW5wdXQoKSByYW5nZUxpbWl0ITogSUNvcmVEYXRlUGlja2VyUmFuZ2U7XHJcbiAgQElucHV0KCkgb3ZlcnJpZGUgcmVhZG9ubHkhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIGRpc2FibGVkITogYm9vbGVhbjtcclxuXHJcblxyXG4gIGxpc3RlbmVyRm4hOiAoKSA9PiB2b2lkO1xyXG4gIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvcGVuU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtb250aFBpY2tlckFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHllYXJQaWNrZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2VsbFNpemU6IG51bWJlciA9ICh0aGlzLnBvcHVwV2lkdGggLSB0aGlzLnBvcHVwWFBhZGRpbmcgKiAyKSAvIDc7XHJcblxyXG4gIG92ZXJyaWRlIHZhbHVlITogRGF0ZSB8IG51bGw7XHJcbiAgcGVuZGluZ1llYXIhOiBudW1iZXI7XHJcbiAgcGVuZGluZ01vbnRoSW5kZXghOiBudW1iZXI7XHJcbiAgcGVuZGluZ0RheTogbnVtYmVyID0gdGhpcy52YWx1ZT8uZ2V0RGF0ZSgpITtcclxuXHJcbiAgY3VycmVudE1vbnRoT2JqZWN0JCE6IEJlaGF2aW9yU3ViamVjdDxJTW9udGhJZGVudGl0eT47XHJcbiAgbmV3RGF0ZSE6IERhdGU7XHJcblxyXG4gIGN1cnJlbnRNb250aFRleHQhOiBzdHJpbmc7XHJcbiAgY3VycmVudEhvdXJzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRNaW51dGVzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRTZWNvbmRzITogbnVtYmVyO1xyXG4gIGN1cnJlbnRNaWxsaXNlY29uZHMhOiBudW1iZXI7XHJcblxyXG4gIGRhdGEhOiBJRGF0YVJvd1tdO1xyXG4gIGhlYWRlcldlZWtkYXlzITogc3RyaW5nW107XHJcbiAgZGlyZWN0aW9uOiBudW1iZXIgPSAxOyAvLyBzdGFydHVwIGRpcmVjdGlvbiAxIHwgLTFcclxuXHJcbiAgdGV4dFZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgaXNEZXZNb2RlID0gaXNEZXZNb2RlKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYmFja3dhcmQnKSBiYWNrd2FyZCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJCb2R5JykgY2FsZW5kYXJCb2R5ITogRWxlbWVudFJlZjtcclxuXHJcbiAgaW5wdXRTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGxhc3RUZXh0ITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9tU2VydmljZTogRG9tU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29yZURhdGV0aW1lU2VydmljZTogQ29yZURhdGV0aW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLm5ld0RhdGUgPSAhIXRoaXMucmFuZ2VMaW1pdCA/IHRoaXMucmFuZ2VMaW1pdC5taW5EYXRlIDogbmV3IERhdGUoKTtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU1vbnRoSWRlbnRpdHk+KHtcclxuICAgICAgeWVhcjogdGhpcy52YWx1ZT8uZ2V0RnVsbFllYXIoKSB8fCB0aGlzLm5ld0RhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGhJbmRleDogdGhpcy52YWx1ZT8uZ2V0TW9udGgoKSB8fCB0aGlzLm5ld0RhdGUuZ2V0TW9udGgoKVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCEhdGhpcy5kaXNhYmxlZCkgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgaWYgKCEhIXRoaXMudmFsdWUpIHtcclxuICAgICAgLy90aGlzLnZhbHVlID0gdGhpcy5uZXdEYXRlO1xyXG4gICAgICB0aGlzLmxhc3RUZXh0ID0gXCJcIlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZW5kaW5nWWVhciA9IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgdGhpcy5wZW5kaW5nTW9udGhJbmRleCA9IHRoaXMudmFsdWUuZ2V0TW9udGgoKTtcclxuICAgICAgdGhpcy5wZW5kaW5nRGF5ID0gdGhpcy52YWx1ZS5nZXREYXRlKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gdGhpcy52YWx1ZS5nZXRIb3VycygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaW51dGVzID0gdGhpcy52YWx1ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSB0aGlzLnZhbHVlLmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gdGhpcy52YWx1ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgIClcclxuXHJcbiAgICAvKlxyXG4gICAgaWYgKCEhIXRoaXMuaWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgXHJcbiAgICAgIHdpdGhpbiBhIHBhZ2UsIHRhbmxlaWNhLWRhdGUtcGlja2VyIG5lZWRzIGFuIHVuaXF1ZSBwcm9wZXJ0eSBpZCB2YWx1ZSB0byB3b3JrIGNvcnJlY3RseVxyXG4gICAgICBmb3IgZXhhbXBsZTogPHRhbmxlaWNhLWRhdGUtcGlja2VyIGlkPVwic3RhcnREYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlXCI+PC90YW5sZWljYS1kYXRlLXBpY2tlcj5cclxuICAgICAgYClcclxuICAgIH1cclxuICAgICovXHJcbiAgICB0aGlzLmhlYWRlcldlZWtkYXlzID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldFNob3J0V2Vla2RheXModGhpcy5sYW5nKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICB0cmlnZ2VyIGFuaW1hdGlvbiBieSByZWZsb3cgdGhlIERPTVxyXG4gICovXHJcbiAgdHJpZ2dlclJlZmxvdygpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5jYWxlbmRhckJvZHkubmF0aXZlRWxlbWVudDtcclxuICAgIC8vRE9NIG1hbmlwdWxhdGlvblxyXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAxKSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGlkZS11cFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGlkZS1kb3duXCIpO1xyXG4gICAgfVxyXG4gICAgZWwub2Zmc2V0SGVpZ2h0OyAgLyogdHJpZ2dlciByZWZsb3cgKGFsdGVybmF0aXZlOiBlbC5vZmZzZXRXaWR0aCkgKi9cclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gMSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IGVsLmNsYXNzTGlzdC5hZGQoXCJzbGlkZS11cFwiKSwgMCk7IC8vIHBhc3MgdGhlIGNhbGxiYWNrIHRvIENhbGxiYWNrIHF1ZXVlIHRocm91Z2ggV2ViQVBJcywgc28gaXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBET00gbWFuaXB1bGF0aW9uIGVuZHNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0LmFkZChcInNsaWRlLWRvd25cIiksIDApOyAvLyBwYXNzIHRoZSBjYWxsYmFjayB0byBDYWxsYmFjayBxdWV1ZSB0aHJvdWdoIFdlYkFQSXMsIHNvIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgRE9NIG1hbmlwdWxhdGlvbiBlbmRzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLypcclxuICAgICAgVGhpcyBldmVudHMgZ2V0IGNhbGxlZCBieSBhbGwgY2xpY2tzIG9uIHRoZSBwYWdlXHJcbiAgICAqL1xyXG4gICAgdGhpcy5saXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICAvKlxyXG4gICAgICAgIGhhbmRsZSBjbGljayBvdXRzaWRlXHJcbiAgICAgICovXHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiAhISF0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgbWF4WkluZGV4ID0gdGhpcy5kb21TZXJ2aWNlLmdldE1heFpJbmRleCgpO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBpbnB1dEhlaWdodCA9IHJlY3QuaGVpZ2h0IHx8IDM1O1xyXG5cclxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5kaWNhdG9yLWhlaWdodCcsIChpbnB1dEhlaWdodCAtIDYpICsgJ3B4JylcclxuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9wdXAtei1pbmRleCcsIG1heFpJbmRleCk7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWNlbGwtc2l6ZScsIHRoaXMuY2VsbFNpemUgKyAncHgnKVxyXG5cclxuICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB2YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgICB0aGlzLmJ1aWxkQm9keSh2YWx1ZS55ZWFyLCB2YWx1ZS5tb250aEluZGV4KTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJSZWZsb3coKTtcclxuICAgICAgfSwgMClcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5pbnB1dFN0cmVhbSQgPSBmcm9tRXZlbnQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAnaW5wdXQnKTtcclxuICAgIHRoaXMuaW5wdXRTdHJlYW0kLnN1YnNjcmliZShldmVudCA9PiB7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIkNvcmVEYXRlUGlja2VyQ29tcG9uZW50OiBldmVudC5pbnB1dFR5cGVcIiwgZXZlbnQuaW5wdXRUeXBlKVxyXG4gICAgICBjb25zdCBpc0FsbFRleHRTZWxlY3RlZCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0gJ2RlbGV0ZUNvbnRlbnRGb3J3YXJkJykge1xyXG4gICAgICAgIGlmIChpc0FsbFRleHRTZWxlY3RlZCkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvcmVEYXRlUGlja2VyQ29tcG9uZW50OiBBbGwgdGV4dCB3YXMgc2VsZWN0ZWQgYmVmb3JlIGRlbGV0aW9uJyk7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5sYXN0VGV4dCA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29yZURhdGVQaWNrZXJDb21wb25lbnQ6IFBhcnRpYWwgb3Igbm8gdGV4dCBzZWxlY3RlZCBiZWZvcmUgZGVsZXRpb24nKTtcclxuICAgICAgICAgIHRoaXMubGFzdFRleHQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQuaW5wdXRUeXBlICE9PSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJ1xyXG4gICAgICAgICYmICcjMCMxIzIjMyM0IzUjNiM3IzgjOSNCYWNrc3BhY2UjRGVsZXRlJy5pbmRleE9mKCcjJyArIGV2ZW50LmRhdGEpIDwgMCkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMubGFzdFRleHQ7XHJcbiAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYXN0VGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgdiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgaWYgKGV2ZW50LmlucHV0VHlwZSA9PT0gJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCcpIHtcclxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHYubWF0Y2goL15cXGR7Mn0kLykgIT09IG51bGwpIHtcclxuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHYgKyAnLyc7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHYgKyAnLyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2Lm1hdGNoKC9eXFxkezJ9XFwvXFxkezJ9JC8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB2ICsgJy8nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy50ZXh0VmFsdWUubGVuZ3RoID09PSAxMCkge1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0cyA9IHRoaXMudGV4dFZhbHVlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgY29uc3QgeSA9IE51bWJlcihkaWdpdHNbMl0pO1xyXG4gICAgICAgIGNvbnN0IG0gPSBOdW1iZXIoZGlnaXRzWzFdKSAtIDE7XHJcbiAgICAgICAgY29uc3QgZCA9IE51bWJlcihkaWdpdHNbMF0pO1xyXG5cclxuICAgICAgICBpZiAoeSA8PSAwIHx8IG0gPCAwIHx8IG0gPiAxMSB8fCBkIDwgMSB8fCBkID4gMzEpIHtcclxuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgaHIgPSBub3cuZ2V0SG91cnMoKTtcclxuICAgICAgICBjb25zdCBtbiA9IG5vdy5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgY29uc3Qgc2QgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IG1zID0gbm93LmdldE1pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKGRpZ2l0c1syXSksIE51bWJlcihkaWdpdHNbMV0pIC0gMSwgTnVtYmVyKGRpZ2l0c1swXSksIGhyLCBtbiwgc2QsIG1zKTtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcoZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShpbnB1dDogRGF0ZSB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiVVRDIGlucHV0IFwiLCBpbnB1dCk7XHJcbiAgICBsZXQgb2JqOiBhbnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKGlucHV0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMudGV4dFZhbHVlID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mKGlucHV0KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKGlucHV0ID09PSBcIlwiKSB7XHJcbiAgICAgICAgb2JqID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYmogPSBuZXcgRGF0ZShuZXcgRGF0ZShpbnB1dCkuc2V0SG91cnMoMCwwLDAsMCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZihpbnB1dC5nZXRGdWxsWWVhcikgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBvYmogPSBpbnB1dFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dFwiKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGRhdGVQcm9wZXJ0aWVzID0gKHZhbHVlOiBEYXRlKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgY29udmVydCB0byBMb2NhbCBEYXRlIFwiLCB2YWx1ZSk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5sYXN0VGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyh2YWx1ZSlcclxuICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZGF0ZVRvVm5TdHJpbmcodmFsdWUpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdmFsdWUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICBtb250aEluZGV4OiB2YWx1ZS5nZXRNb250aCgpXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY3VycmVudEhvdXJzID0gdmFsdWUuZ2V0SG91cnMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWludXRlcyA9IHZhbHVlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50U2Vjb25kcyA9IHZhbHVlLmdldFNlY29uZHMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aFRleHQgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0TW9udGhUZXh0KHRoaXMubGFuZywgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXgpO1xyXG4gICAgICB0aGlzLnBlbmRpbmdZZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgdGhpcy5wZW5kaW5nTW9udGhJbmRleCA9IHZhbHVlLmdldE1vbnRoKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZ0RheSA9IHZhbHVlLmdldERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBpZiAoISF0aGlzLnJhbmdlTGltaXQpIHtcclxuICAgICAgICBub3cgPSB0aGlzLnJhbmdlTGltaXQubWluRGF0ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogbm93LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgbW9udGhJbmRleDogbm93LmdldE1vbnRoKClcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5jdXJyZW50SG91cnMgPSBub3cuZ2V0SG91cnMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50TWludXRlcyA9IG5vdy5nZXRNaW51dGVzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlY29uZHMgPSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNaWxsaXNlY29uZHMgPSBub3cuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKiBDb252ZXJ0IFVUQyBkYXRlIHRvIGxvY2FsIGRhdGUgKi9cclxuICAgICAgY29uc3Qgb3JpZ2luYWxEYXRlOiBEYXRlID0gbmV3IERhdGUob2JqKTtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG5ldyBEYXRlKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLSBvZmZzZXQgKiA2MDAwMCk7XHJcbiAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgICBpZiAodHlwZW9mIG9iaiEuZ2V0RnVsbFllYXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRhdGVWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb25zdCBpc0RhdGUgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuaXNEYXRlU3RyaW5nKG9iaik7XHJcbiAgICAgICAgaWYgKGlzRGF0ZSkge1xyXG4gICAgICAgICAgLy9jb25zdCBfb2JqID0gbmV3IERhdGUob2JqKTsgLy8gY29udmVydCBzdHJpbmcgdG8gZGF0ZSBcclxuICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoZGF0ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgZGF0ZSBpbnB1dDogXCIsIG9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBkYXRlIGlucHV0OiBcIiwgb2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soZGF0ZTogRGF0ZSkge1xyXG5cclxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSByZXR1cm47XHJcblxyXG4gICAgaWYgKCEhdGhpcy5yYW5nZUxpbWl0KSB7XHJcbiAgICAgIGlmIChkYXRlIDwgdGhpcy5yYW5nZUxpbWl0Lm1pbkRhdGUgfHwgZGF0ZSA+IHRoaXMucmFuZ2VMaW1pdC5tYXhEYXRlKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGggPSBub3cuZ2V0SG91cnMoKTtcclxuICAgIGNvbnN0IG0gPSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgY29uc3QgcyA9IG5vdy5nZXRTZWNvbmRzKCk7XHJcbiAgICBjb25zdCBtcyA9IG5vdy5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgIGRhdGUuc2V0SG91cnMoaCk7XHJcbiAgICBkYXRlLnNldE1pbnV0ZXMobSk7XHJcbiAgICBkYXRlLnNldFNlY29uZHMocyk7XHJcbiAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyhtcyk7XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyhkYXRlKTtcclxuXHJcbiAgICB0aGlzLnBlbmRpbmdZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5wZW5kaW5nTW9udGhJbmRleCA9IGRhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMucGVuZGluZ0RheSA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG5cclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG5cclxuICAgIHRoaXMub25DaGFuZ2UoZGF0ZSk7XHJcbiAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ29Ub2RheSgpIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGlmICghIXRoaXMucmFuZ2VMaW1pdCkge1xyXG4gICAgICBpZiAodG9kYXkgPCB0aGlzLnJhbmdlTGltaXQubWluRGF0ZSB8fCB0b2RheSA+IHRoaXMucmFuZ2VMaW1pdC5tYXhEYXRlKSByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5kYXRlVG9WblN0cmluZyh0b2RheSk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UodG9kYXkpO1xyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5sYXN0VGV4dCA9ICcnO1xyXG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdvQmFja3dhcmQoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGlvbiA9IC0xO1xyXG4gICAgdGhpcy5iYWNrd2FyZC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4ID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhciAtIDEsXHJcbiAgICAgICAgbW9udGhJbmRleDogMTFcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCAxMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIsXHJcbiAgICAgICAgbW9udGhJbmRleDogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLm1vbnRoSW5kZXggLSAxXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TW9udGhUZXh0ID0gdGhpcy5jb3JlRGF0ZXRpbWVTZXJ2aWNlLmdldE1vbnRoVGV4dCh0aGlzLmxhbmcsIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvRm9yZXdhcmQoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGlvbiA9IDE7XHJcbiAgICB0aGlzLmJhY2t3YXJkLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpc1xyXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC52YWx1ZS5tb250aEluZGV4ID09PSAxMSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQubmV4dCh7XHJcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgKyAxLFxyXG4gICAgICAgIG1vbnRoSW5kZXg6IDBcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoT2JqZWN0JC5uZXh0KHtcclxuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUueWVhcixcclxuICAgICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCArIDFcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoVGV4dCA9IHRoaXMuY29yZURhdGV0aW1lU2VydmljZS5nZXRNb250aFRleHQodGhpcy5sYW5nLCB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb24gKi9cclxuICBidWlsZEJvZHkoeWVhcjogbnVtYmVyLCBtb250aEluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvcmVEYXRldGltZVNlcnZpY2UuZ2V0Q2FsZW5kYXJCb2R5KHllYXIsIG1vbnRoSW5kZXgsIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuZGF0YSA9IGJvZHkucm93cztcclxuICAgIGNvbnN0IHNjcm9sbERpc3RhbmNlID0gKGJvZHkucm93cy5sZW5ndGggLSA2KSAqIHRoaXMuY2VsbFNpemUgKyAncHgnO1xyXG4gICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY3JvbGwtZGlzdGFuY2UnLCAoYm9keS5yb3dzLmxlbmd0aCAtIDYpICogdGhpcy5jZWxsU2l6ZSArICdweCcpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5saXN0ZW5lckZuKSB0aGlzLmxpc3RlbmVyRm4oKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT3BlbigpIHtcclxuICAgIGlmICghIXRoaXMucmVhZG9ubHkpIHJldHVyblxyXG4gICAgaWYgKCEhdGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9ICF0aGlzLm9wZW5TdGF0ZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1vbnRoUGlja2VyQWN0aXZlKCkge1xyXG4gICAgdGhpcy5tb250aFBpY2tlckFjdGl2ZSA9ICF0aGlzLm1vbnRoUGlja2VyQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aE9iamVjdENoYW5nZShhcmdzOiBJTW9udGhJZGVudGl0eSkge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBhcmdzLnllYXIsXHJcbiAgICAgIG1vbnRoSW5kZXg6IGFyZ3MubW9udGhJbmRleFxyXG4gICAgfSlcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uTW9udGhQaWNrZXJZZWFyQ2xpY2soZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1vbnRoUGlja2VyQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25ZZWFyUGlja2VkKGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGhPYmplY3QkLm5leHQoe1xyXG4gICAgICB5ZWFyOiBlLFxyXG4gICAgICBtb250aEluZGV4OiB0aGlzLmN1cnJlbnRNb250aE9iamVjdCQudmFsdWUubW9udGhJbmRleFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnllYXJQaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubW9udGhQaWNrZXJBY3RpdmUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy50ZXh0VmFsdWUgJiYgISF0aGlzLnRleHRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgYXJyID0gdGhpcy50ZXh0VmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBpZiAoIShhcnJbMF0ubGVuZ3RoID09PSAyICYmIGFyclsxXS5sZW5ndGggPT09IDIgJiYgYXJyWzJdLmxlbmd0aCA9PT0gNCkpIHtcclxuICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0VmFsID0gbmV3IERhdGUoTnVtYmVyKGFyclsyXSksIE51bWJlcihhcnJbMV0pIC0gMSwgTnVtYmVyKGFyclswXSkpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHRlc3RWYWwuZ2V0RnVsbFllYXIpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlOyAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc0Vycm9yKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLnRleHRWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICAvLyB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJvcGVuU3RhdGVcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIm1vbnRoUGlja2VyQWN0aXZlXCI+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ5ZWFyUGlja2VyQWN0aXZlXCI+XHJcbiAgICA8aW5wdXQgI2JhY2t3YXJkIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwidGwtZGF0ZXBpY2tlci1kaXJlY3Rpb25cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicC1yZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCJzaG93UGxhY2Vob2xkZXIgPyAnZGQvbW0veXl5eScgOiAnJ1wiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJ0ZXh0VmFsdWVcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLmhhcy1lcnJvcl09XCJoYXNFcnJvclwiIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiaWNvblwiIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIj48L2xhYmVsPiAtLT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWljb24td3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItY2FsZW5kYXJcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bC1kYXRlLXBpY2tlci1wb3B1cFwiIFtjbGFzcy5vcGVuXT1cIm9wZW5TdGF0ZVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICBsZWZ0OiAoIXBvcHVwQWxpZ24gfHwgIHBvcHVwQWxpZ24gPT09ICdsZWZ0JykgPyAnMHB4JyA6ICdhdXRvJyxcclxuICAgICAgICByaWdodDogKHBvcHVwQWxpZ24gPT09ICdyaWdodCcpID8gJzBweCcgOiAnYXV0bycsXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXNlc3Npb25cIiBbY2xhc3MuZC1ub25lXT1cIm1vbnRoUGlja2VyQWN0aXZlIHx8IHllYXJQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdmlnYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibW9udGgtZHJvcGRvd25cIiAoY2xpY2spPVwidG9nZ2xlTW9udGhQaWNrZXJBY3RpdmUoKVwiPnt7IGN1cnJlbnRNb250aFRleHQgfX0ge3tcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9udGhPYmplY3QkLnZhbHVlLnllYXIgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnby11cFwiIChjbGljayk9XCJnb0JhY2t3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ28tZG93blwiIChjbGljayk9XCJnb0ZvcmV3YXJkKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF5IG9mIGhlYWRlcldlZWtkYXlzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLnQ3XT1cIiRpbmRleD09PTVcIiBbY2xhc3MuY25dPVwiJGluZGV4PT09NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGRheSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAjY2FsZW5kYXJCb2R5IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiIFtjbGFzcy5zbGlkZS11cF09XCJkaXJlY3Rpb249PT0xXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2xpZGUtZG93bl09XCJkaXJlY3Rpb249PT0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHdlZWsgb2YgZGF0YTsgdHJhY2sgd2Vlaykge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiB3ZWVrLml0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFthcHBUb29sdGlwXT1cIml0ZW0uZGF0ZVZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpXCIgW3Nob3dBbnl3YXldPVwiaXNEZXZNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5vdXQtb2YtbW9udGhdPVwiISEhaXRlbS5jdXJyZW50TW9udGhcIiBbY2xhc3MudDddPVwiJGluZGV4PT09NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNuXT1cIiRpbmRleD09PTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vdXQtb2YtcmFuZ2VdPVwiISFyYW5nZUxpbWl0ICYmICEhISgoaXRlbS5kYXRlVmFsdWU+PXJhbmdlTGltaXQubWluRGF0ZSkgJiYgKHJhbmdlTGltaXQubWF4RGF0ZT49aXRlbS5kYXRlVmFsdWUpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpPT09cGVuZGluZ1llYXIgJiYgaXRlbS5kYXRlVmFsdWUuZ2V0TW9udGgoKT09PXBlbmRpbmdNb250aEluZGV4ICYmIGl0ZW0uZGF0ZVZhbHVlLmdldERhdGUoKT09PXBlbmRpbmdEYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLmRhdGVWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmRhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwibW9udGhQaWNrZXJBY3RpdmVcIj5cclxuICAgICAgICAgICAgPGNvcmUtbW9udGgtcGlja2VyIFtsYW5nXT1cImxhbmdcIiBbbW9udGhPYmplY3QkXT1cImN1cnJlbnRNb250aE9iamVjdCRcIlxyXG4gICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTW9udGhPYmplY3RDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAob25ZZWFyQ2xpY2spPVwib25Nb250aFBpY2tlclllYXJDbGljaygkZXZlbnQpXCI+PC9jb3JlLW1vbnRoLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwieWVhci1waWNrZXItc2Vzc2lvblwiIFtjbGFzcy5hY3RpdmVdPVwieWVhclBpY2tlckFjdGl2ZVwiPlxyXG4gICAgICAgICAgICA8Y29yZS15ZWFyLXBpY2tlciBbbGFuZ109XCJsYW5nXCIgKG9uQ2hhbmdlKT1cIm9uWWVhclBpY2tlZCgkZXZlbnQpXCI+PC9jb3JlLXllYXItcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2RwLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyXCIgW2NsYXNzLm9wYWNpdHktMF09XCIhISF0ZXh0VmFsdWVcIiAoY2xpY2spPVwiY2xlYXIoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX0NMRUFSJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlnaS13YXRjaFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZGF5XCIgKGNsaWNrKT1cImdvVG9kYXkoKVwiPnt7ICdVSS5DT1JFX0RBVEVfUElDS0VSX1RPREFZJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=