@norwegian/core-components 6.53.1 → 6.54.1

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.
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none">
2
2
  <path fill-rule="evenodd" clip-rule="evenodd" d="M3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12ZM12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1ZM13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V12C11 12.3788 11.214 12.725 11.5528 12.8944L15.5528 14.8944C16.0468 15.1414 16.6474 14.9412 16.8944 14.4472C17.1414 13.9532 16.9412 13.3526 16.4472 13.1056L13 11.382V6Z" fill="#FFFFFF"/>
3
3
  </svg>
@@ -1,3 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none">
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
2
  <path fill-rule="evenodd" clip-rule="evenodd" d="M3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12ZM12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1ZM13 6C13 5.44772 12.5523 5 12 5C11.4477 5 11 5.44772 11 6V12C11 12.3788 11.214 12.725 11.5528 12.8944L15.5528 14.8944C16.0468 15.1414 16.6474 14.9412 16.8944 14.4472C17.1414 13.9532 16.9412 13.3526 16.4472 13.1056L13 11.382V6Z" fill="#15273F"/>
3
3
  </svg>
@@ -288,21 +288,16 @@ export class DatepickerComboNewComponent extends NasComponentBase {
288
288
  }
289
289
  setInlineFlex() {
290
290
  const container = this.container.nativeElement;
291
- if (this.inlineFlex > 0) {
292
- this.renderer.addClass(container, 'nas-datepicker-combo-new--inline-flex');
293
- container.style.width = `${this.inlineFlex}px`;
294
- }
295
- else {
296
- this.renderer.removeClass(container, 'nas-datepicker-combo-new--inline-flex');
297
- container.style.width = '100%';
298
- }
291
+ const inlineFlex = this.inlineFlex > 0;
292
+ this.renderer[inlineFlex ? 'addClass' : 'removeClass'](container, 'nas-datepicker-combo-new--inline-flex');
293
+ container.style.width = inlineFlex ? `${this.inlineFlex}px` : '100%';
299
294
  }
300
295
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: DatepickerComboNewComponent, deps: [{ token: i1.DateHelper }, { token: i2.DeviceHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: DatepickerComboNewComponent, selector: "nas-datepicker-combo-new", inputs: { ariaLabelBackdrop: "ariaLabelBackdrop", outboundOpen: "outboundOpen", inboundOpen: "inboundOpen", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", outboundOnly: "outboundOnly", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", nasFormGroup: "nasFormGroup", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", disableBackdrop: "disableBackdrop", outboundSelectedTime: "outboundSelectedTime", inboundSelectedTime: "inboundSelectedTime", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", inboundLowerLimitDateOffset: "inboundLowerLimitDateOffset", inlineFlex: "inlineFlex" }, outputs: { outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", focusOnPreviousChange: "focusOnPreviousChange" }, viewQueries: [{ propertyName: "datepickerOutbound", first: true, predicate: ["datepickerOutbound"], descendants: true }, { propertyName: "datepickerInbound", first: true, predicate: ["datepickerInbound"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [nasClass]=\"getMainClass()\" #container>\n <div [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerOutbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameOutbound\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"outboundAvailableDates\"\n [times]=\"times\"\n [selectedTime]=\"outboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [disabled]=\"exists(outboundDisabled)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"inboundOpen = true\"\n (focusOnPreviousChange)=\"onFocusOnPrevious($event)\"\n (selectedMonthChange)=\"onOutboundMonthChange($event)\"\n [(open)]=\"outboundOpen\"\n [(selectedDate)]=\"outboundSelectedDate\">{{outboundLabel}}</nas-datepicker-new>\n </div>\n <span [nasClass]=\"getClass('separator')\"></span>\n <div *ngIf=\"checkOutboundOnly()\"\n [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerInbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameInbound\"\n [disabled]=\"checkInboundDisabled()\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"inboundAvailableDates\"\n [lowerLimitDate]=\"inboundLowerLimitDate\"\n [times]=\"times\"\n [selectedTime]=\"inboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNext($event)\"\n (focusOnPreviousChange)=\"onInboundFocusOnPrevious()\"\n [(open)]=\"inboundOpen\"\n [(selectedMonth)]=\"inboundSelectedMonth\"\n [(selectedDate)]=\"inboundSelectedDate\">{{inboundLabel}}</nas-datepicker-new>\n </div>\n</div>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-datepicker-combo-new{display:flex;margin:24px auto;flex-wrap:wrap;flex-direction:column}.nas-datepicker-combo-new nas-datepicker-new{display:flex}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper{padding-left:8px;padding-bottom:8px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select{margin-bottom:0}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select:after{bottom:25px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select{background-color:#fff;height:68px;border:2px solid #15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select:focus{border-color:#15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper nas-calendar-new{top:68px;right:0;left:0;margin-inline:auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.nas-datepicker-combo-new__date-picker{width:100%}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__date-picker-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__time-selector-wrapper{border-bottom:none}.nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--md,.nas-datepicker-combo-new--lg{flex-wrap:nowrap;flex-direction:row}.nas-datepicker-combo-new--md .nas-datepicker-combo-new__separator,.nas-datepicker-combo-new--lg .nas-datepicker-combo-new__separator{display:block;position:relative;align-self:flex-end;flex-shrink:0;width:3px}.nas-datepicker-combo-new--compact{margin:0 auto}.nas-datepicker-combo-new--inline-flex{flex-wrap:nowrap;flex-direction:row;gap:8px;position:relative;margin:0}.nas-datepicker-combo-new--inline-flex .nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new{position:unset}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper{position:unset}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerNewComponent, selector: "nas-datepicker-new", inputs: ["ariaLabelBackdrop", "disableBackdrop", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "lowerLimitDate", "availability", "availableDates", "disabled", "placeholder", "required", "ariaDescribedby", "ariaLabel", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlName", "times", "open", "selectedMonth", "selectedDate", "selectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth"], outputs: ["selectedDateChange", "selectedMonthChange", "openChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "directive", type: i5.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }] }); }
296
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: DatepickerComboNewComponent, selector: "nas-datepicker-combo-new", inputs: { ariaLabelBackdrop: "ariaLabelBackdrop", outboundOpen: "outboundOpen", inboundOpen: "inboundOpen", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", outboundOnly: "outboundOnly", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", timepickerLabel: "timepickerLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", nasFormGroup: "nasFormGroup", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", disableBackdrop: "disableBackdrop", outboundSelectedTime: "outboundSelectedTime", inboundSelectedTime: "inboundSelectedTime", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", inboundLowerLimitDateOffset: "inboundLowerLimitDateOffset", inlineFlex: "inlineFlex" }, outputs: { outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", focusOnPreviousChange: "focusOnPreviousChange" }, viewQueries: [{ propertyName: "datepickerOutbound", first: true, predicate: ["datepickerOutbound"], descendants: true }, { propertyName: "datepickerInbound", first: true, predicate: ["datepickerInbound"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [nasClass]=\"getMainClass()\" #container>\n <div [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerOutbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameOutbound\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"outboundAvailableDates\"\n [times]=\"times\"\n [timepickerLabel]=\"timepickerLabel\"\n [selectedTime]=\"outboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [disabled]=\"exists(outboundDisabled)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"inboundOpen = true\"\n (focusOnPreviousChange)=\"onFocusOnPrevious($event)\"\n (selectedMonthChange)=\"onOutboundMonthChange($event)\"\n [(open)]=\"outboundOpen\"\n [(selectedDate)]=\"outboundSelectedDate\">{{outboundLabel}}</nas-datepicker-new>\n </div>\n <span [nasClass]=\"getClass('separator')\"></span>\n <div *ngIf=\"checkOutboundOnly()\"\n [nasClass]=\"getClass('date-picker', checkInboundDisabled() && 'hide')\">\n <nas-datepicker-new #datepickerInbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameInbound\"\n [disabled]=\"checkInboundDisabled()\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"inboundAvailableDates\"\n [lowerLimitDate]=\"inboundLowerLimitDate\"\n [times]=\"times\"\n [timepickerLabel]=\"timepickerLabel\"\n [selectedTime]=\"inboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNext($event)\"\n (focusOnPreviousChange)=\"onInboundFocusOnPrevious()\"\n [(open)]=\"inboundOpen\"\n [(selectedMonth)]=\"inboundSelectedMonth\"\n [(selectedDate)]=\"inboundSelectedDate\">{{inboundLabel}}</nas-datepicker-new>\n </div>\n</div>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-datepicker-combo-new{display:flex;margin:24px auto;flex-wrap:wrap;flex-direction:column}.nas-datepicker-combo-new nas-datepicker-new{display:flex}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper{padding-left:8px;padding-bottom:8px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select{margin-bottom:0}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select:after{bottom:25px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select{background-color:#fff;height:68px;border:2px solid #15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select:focus{border-color:#15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper nas-calendar-new{top:68px;right:0;left:0;margin-inline:auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.nas-datepicker-combo-new__date-picker{width:100%}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__date-picker-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__time-selector-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker--hide,.nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--md,.nas-datepicker-combo-new--lg{flex-wrap:nowrap;flex-direction:row}.nas-datepicker-combo-new--md .nas-datepicker-combo-new__separator,.nas-datepicker-combo-new--lg .nas-datepicker-combo-new__separator{display:block;position:relative;align-self:flex-end;flex-shrink:0;width:3px}.nas-datepicker-combo-new--compact{margin:0 auto}.nas-datepicker-combo-new--inline-flex{flex-wrap:nowrap;flex-direction:row;gap:8px;position:relative;margin:0}.nas-datepicker-combo-new--inline-flex .nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new{position:unset}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper{position:unset}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DatepickerNewComponent, selector: "nas-datepicker-new", inputs: ["ariaLabelBackdrop", "disableBackdrop", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "lowerLimitDate", "availability", "availableDates", "disabled", "placeholder", "required", "ariaDescribedby", "ariaLabel", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlName", "times", "open", "selectedMonth", "selectedDate", "selectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "timepickerLabel"], outputs: ["selectedDateChange", "selectedMonthChange", "openChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "directive", type: i5.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }] }); }
302
297
  }
303
298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: DatepickerComboNewComponent, decorators: [{
304
299
  type: Component,
305
- args: [{ selector: 'nas-datepicker-combo-new', encapsulation: ViewEncapsulation.Emulated, template: "<div [nasClass]=\"getMainClass()\" #container>\n <div [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerOutbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameOutbound\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"outboundAvailableDates\"\n [times]=\"times\"\n [selectedTime]=\"outboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [disabled]=\"exists(outboundDisabled)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"inboundOpen = true\"\n (focusOnPreviousChange)=\"onFocusOnPrevious($event)\"\n (selectedMonthChange)=\"onOutboundMonthChange($event)\"\n [(open)]=\"outboundOpen\"\n [(selectedDate)]=\"outboundSelectedDate\">{{outboundLabel}}</nas-datepicker-new>\n </div>\n <span [nasClass]=\"getClass('separator')\"></span>\n <div *ngIf=\"checkOutboundOnly()\"\n [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerInbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameInbound\"\n [disabled]=\"checkInboundDisabled()\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"inboundAvailableDates\"\n [lowerLimitDate]=\"inboundLowerLimitDate\"\n [times]=\"times\"\n [selectedTime]=\"inboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNext($event)\"\n (focusOnPreviousChange)=\"onInboundFocusOnPrevious()\"\n [(open)]=\"inboundOpen\"\n [(selectedMonth)]=\"inboundSelectedMonth\"\n [(selectedDate)]=\"inboundSelectedDate\">{{inboundLabel}}</nas-datepicker-new>\n </div>\n</div>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-datepicker-combo-new{display:flex;margin:24px auto;flex-wrap:wrap;flex-direction:column}.nas-datepicker-combo-new nas-datepicker-new{display:flex}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper{padding-left:8px;padding-bottom:8px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select{margin-bottom:0}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select:after{bottom:25px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select{background-color:#fff;height:68px;border:2px solid #15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select:focus{border-color:#15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper nas-calendar-new{top:68px;right:0;left:0;margin-inline:auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.nas-datepicker-combo-new__date-picker{width:100%}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__date-picker-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__time-selector-wrapper{border-bottom:none}.nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--md,.nas-datepicker-combo-new--lg{flex-wrap:nowrap;flex-direction:row}.nas-datepicker-combo-new--md .nas-datepicker-combo-new__separator,.nas-datepicker-combo-new--lg .nas-datepicker-combo-new__separator{display:block;position:relative;align-self:flex-end;flex-shrink:0;width:3px}.nas-datepicker-combo-new--compact{margin:0 auto}.nas-datepicker-combo-new--inline-flex{flex-wrap:nowrap;flex-direction:row;gap:8px;position:relative;margin:0}.nas-datepicker-combo-new--inline-flex .nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new{position:unset}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper{position:unset}\n"] }]
300
+ args: [{ selector: 'nas-datepicker-combo-new', encapsulation: ViewEncapsulation.Emulated, template: "<div [nasClass]=\"getMainClass()\" #container>\n <div [nasClass]=\"getClass('date-picker')\">\n <nas-datepicker-new #datepickerOutbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameOutbound\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"outboundAvailableDates\"\n [times]=\"times\"\n [timepickerLabel]=\"timepickerLabel\"\n [selectedTime]=\"outboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [disabled]=\"exists(outboundDisabled)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"inboundOpen = true\"\n (focusOnPreviousChange)=\"onFocusOnPrevious($event)\"\n (selectedMonthChange)=\"onOutboundMonthChange($event)\"\n [(open)]=\"outboundOpen\"\n [(selectedDate)]=\"outboundSelectedDate\">{{outboundLabel}}</nas-datepicker-new>\n </div>\n <span [nasClass]=\"getClass('separator')\"></span>\n <div *ngIf=\"checkOutboundOnly()\"\n [nasClass]=\"getClass('date-picker', checkInboundDisabled() && 'hide')\">\n <nas-datepicker-new #datepickerInbound\n compact\n [disableBackdrop]=\"disableBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlName]=\"nasFormControlNameInbound\"\n [disabled]=\"checkInboundDisabled()\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [disablePastSelection]=\"exists(disablePastSelection)\"\n [availability]=\"exists(availability)\"\n [availableDates]=\"inboundAvailableDates\"\n [lowerLimitDate]=\"inboundLowerLimitDate\"\n [times]=\"times\"\n [timepickerLabel]=\"timepickerLabel\"\n [selectedTime]=\"inboundSelectedTime\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [locale]=\"locale\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNext($event)\"\n (focusOnPreviousChange)=\"onInboundFocusOnPrevious()\"\n [(open)]=\"inboundOpen\"\n [(selectedMonth)]=\"inboundSelectedMonth\"\n [(selectedDate)]=\"inboundSelectedDate\">{{inboundLabel}}</nas-datepicker-new>\n </div>\n</div>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-datepicker-combo-new{display:flex;margin:24px auto;flex-wrap:wrap;flex-direction:column}.nas-datepicker-combo-new nas-datepicker-new{display:flex}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper{padding-left:8px;padding-bottom:8px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select{margin-bottom:0}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select:after{bottom:25px}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select{background-color:#fff;height:68px;border:2px solid #15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__time-selector-wrapper .nas-select select:focus{border-color:#15273f}.nas-datepicker-combo-new nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper nas-calendar-new{top:68px;right:0;left:0;margin-inline:auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.nas-datepicker-combo-new__date-picker{width:100%}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__date-picker-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker:first-child nas-datepicker-new ::ng-deep .nas-datepicker__time-selector-wrapper{border-bottom:none}.nas-datepicker-combo-new__date-picker--hide,.nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--md,.nas-datepicker-combo-new--lg{flex-wrap:nowrap;flex-direction:row}.nas-datepicker-combo-new--md .nas-datepicker-combo-new__separator,.nas-datepicker-combo-new--lg .nas-datepicker-combo-new__separator{display:block;position:relative;align-self:flex-end;flex-shrink:0;width:3px}.nas-datepicker-combo-new--compact{margin:0 auto}.nas-datepicker-combo-new--inline-flex{flex-wrap:nowrap;flex-direction:row;gap:8px;position:relative;margin:0}.nas-datepicker-combo-new--inline-flex .nas-datepicker-combo-new__separator{display:none}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new{position:unset}.nas-datepicker-combo-new--inline-flex nas-datepicker-new ::ng-deep .nas-datepicker-new__date-picker-wrapper{position:unset}\n"] }]
306
301
  }], ctorParameters: function () { return [{ type: i1.DateHelper }, { type: i2.DeviceHelper }, { type: i0.Renderer2 }]; }, propDecorators: { datepickerOutbound: [{
307
302
  type: ViewChild,
308
303
  args: ['datepickerOutbound']
@@ -334,6 +329,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
334
329
  type: Input
335
330
  }], inboundLabel: [{
336
331
  type: Input
332
+ }], timepickerLabel: [{
333
+ type: Input
337
334
  }], availability: [{
338
335
  type: Input
339
336
  }], outboundAvailableDates: [{
@@ -391,4 +388,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
391
388
  }], focusOnPreviousChange: [{
392
389
  type: Output
393
390
  }] } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jb21iby1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyLWNvbWJvLW5ldy9kYXRlcGlja2VyLWNvbWJvLW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXItY29tYm8tbmV3L2RhdGVwaWNrZXItY29tYm8tbmV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFNVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHM0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFHckQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGdCQUFnQjtJQWMvRDs7OztPQUlHO0lBQ0gsSUFDSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUM3RCxPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsa0JBQWtCLENB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cEIsS0FBSztnQkFTRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBU0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQVFGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkEyQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQXNCRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFZRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFPSSwwQkFBMEI7c0JBQW5DLE1BQU07Z0JBT0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQVFHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQU9HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGV2aWNlL2RldmljZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlck5ld0NvbXBvbmVudCB9IGZyb20gJy4uL2RhdGVwaWNrZXItbmV3JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlcGlja2VyIENvbWJvIENvbXBvbmVudCB8IE5ldyBkZXNpZ24gfCBCZXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyLWNvbWJvLW5ldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLWNvbWJvLW5ldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItY29tYm8tbmV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21ib05ld0NvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcblxuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyT3V0Ym91bmQnKSBkYXRlcGlja2VyT3V0Ym91bmQ6IERhdGVwaWNrZXJOZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXJJbmJvdW5kJykgZGF0ZXBpY2tlckluYm91bmQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIG91dGJvdW5kIGRhdGVwaWNrZXIgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kRGlzYWJsZWQgfHwgdmFsdWUgPT09IHRoaXMub3V0Ym91bmRPcGVuVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRPcGVuVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMub3V0Ym91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGluYm91bmQgZGF0ZXBpY2tlciBvcGVuLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGluYm91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaW5ib3VuZERpc2FibGVkIHx8IHZhbHVlID09PSB0aGlzLmluYm91bmRPcGVuVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRib3VuZE9ubHkpIHtcbiAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBubyBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGF0ZXMgaW4gdGhlIHBhc3QuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdFNlbGVjdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBvdXRib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgaW5ib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZW1vdmUgdGhlIGluYm91bmQgZGF0ZXBpY2tlciBpZiBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGRhdGVwaWNrZXJzIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSWYgc2V0LCBFbmFibGVzIHRoZSB0aW1lIGRyb3Bkb3duIHNlbGVjdG9yIGFsb25nc2lkZSBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgdGltZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdGltZSBkaXNwbGF5IGZvcm1hdC5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVEaXNwbGF5Rm9ybWF0ID0gJ0hIOm1tJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxvY2FsZSBjb2RlIGZvciB0aGUgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuIFdoZW4gbm90IHN1cHBsaWVkLCB1c2VzIHRoZSB2YWx1ZSBvZiBMT0NBTEVfSUQsIHdoaWNoIGlzIGVuLVVTIGJ5IGRlZmF1bHQuXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhhdCByZWdpc3RlckxvY2FsZURhdGEgaXMgY2FsbGVkIHdpdGggdGhlIHJlc3BlY3RpdmUgbG9jYWxlLlxuICAgKi9cbiAgQElucHV0KCkgbG9jYWxlID0gJ2VuLVVTJztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRvIHJlbW92ZSB0aGUgcGFkZGluZyBhbmQgbWFyZ2lucyBhcm91bmQgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjb21wYWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgdGhlIHBhcmVudCdzIGZvcm0gZ3JvdXAuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IGlzIHJlcXVpZXJlZCB0byBiZSBmaWxsZWQgaWYgbmFzRm9ybUNvbnRyb2xOYW1lIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlLCBkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICB0aGlzLmluYm91bmRMb3dlckxpbWl0RGF0ZSA9IG5ldyBVdGNEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCwgMSk7XG4gICAgdGhpcy5pbmJvdW5kTG93ZXJMaW1pdERhdGUuc2V0RGF0ZShkYXRlLmRhdGUgKyB0aGlzLmluYm91bmRMb3dlckxpbWl0RGF0ZU9mZnNldCk7XG5cbiAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUsIGRhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogZW5hYmxlIHRvIGRpc2FibGUgYmFja2Ryb3AuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlQmFja2Ryb3A6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgb3V0Ym91bmQgc2VsZWN0ZWQgdGltZSBpbiB0aGUgdGltZSBzZWxlY3Rvci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kU2VsZWN0ZWRUaW1lOiBVdGNEYXRlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIGluYm91bmQgc2VsZWN0ZWQgdGltZSBpbiB0aGUgdGltZSBzZWxlY3Rvci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRTZWxlY3RlZFRpbWU6IFV0Y0RhdGU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIG5leHQgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbE5leHRNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSByZWxhdGl2ZSBudW1iZXIgdG8gZGVjaWRlIHdoZW4gdGhlIGluYm91bmQgbG93ZXIgbGltaXQgZGF0ZSBzaG91bGQgYmUgYmFzZWQgb24gc2VsZWN0ZWQgb3V0Ym91bmQgZGF0ZS5cbiAgICpcbiAgICogVGhlIGxvd2VyIGxpbWl0IGRhdGUgZm9yIGluYm91bmQgaXMgc2V0IGJ5IGRlZmF1bHQgZXF1YWwgdG8gdGhlIHNlbGVjdGVkIG91dGJvdW5kIGRhdGUuXG4gICAqXG4gICAqIElmIHRoaXMgbnVtYmVyIGlzIHBvc2l0aXZlLCB0aGUgaW5ib3VuZCBsb3dlciBsaW1pdCBkYXRlIHdpbGwgYWRkIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgc2VsZWN0ZWQgb3V0Ym91bmQgZGF0ZS5cbiAgICogSWYgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUsIHRoZSBpbmJvdW5kIGxvd2VyIGxpbWl0IGRhdGUgd2lsbCBzdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIHNlbGVjdGVkIG91dGJvdW5kIGRhdGUuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kTG93ZXJMaW1pdERhdGVPZmZzZXQgPSAwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE91dGJvdW5kIGFuZCBpbmJvdW5kIGRhdGVzIHdpbGwgYnJlYWsgaG9yaXpvbnRhbGx5IGluIG1vYmlsZSB2aWV3LlxuICAgKi9cbiAgQElucHV0KCkgaW5saW5lRmxleCA9IDA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGNhbGVuZGFyIGNoYW5nZXMgbW9udGguXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgYWN0aXZlbHkgY2hhbmdlZCB0aGUgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIHByZXNzZWQgc2hpZnQgKyB0YWIgdG8gZ28gdG8gcHJldmlvdXMgY29udHJvbC5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uUHJldmlvdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50PigpO1xuXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWRNb250aChtb250aDogVXRjRGF0ZSkge1xuICAgIGlmICghbW9udGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc1NhbWVNb250aChtb250aCwgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgICB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgb3V0Ym91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb250YWluZXJXaWR0aCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpbmJvdW5kVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb3V0Ym91bmRWYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVTZXJ2aWNlOiBEYXRlSGVscGVyLFxuICAgIHByaXZhdGUgZGV2aWNlSGVscGVyOiBEZXZpY2VIZWxwZXIsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgc3VwZXIoJ25hcy1kYXRlcGlja2VyLWNvbWJvLW5ldycpO1xuXG4gICAgd2luZG93Lm9ucmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJXaWR0aCgpO1xuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXApIHtcbiAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kKSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRWYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZClcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnN1YnNjcmliZShvdXRib3VuZCA9PiB7XG4gICAgICAgICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlID0gb3V0Ym91bmQ/LmRhdGU7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kKSB7XG4gICAgICAgIHRoaXMuaW5ib3VuZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpXG4gICAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgIC5zdWJzY3JpYmUoaW5ib3VuZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGUgPSBpbmJvdW5kPy5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5lcldpZHRoKCk7XG4gICAgdGhpcy5zZXRJbmxpbmVGbGV4KCk7XG4gIH1cblxuICBvbkZvY3VzT25OZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkZvY3VzT25QcmV2aW91cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNPblByZXZpb3VzQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25JbmJvdW5kRm9jdXNPblByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVzICYmIHRoaXMudGltZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuZGF0ZXBpY2tlck91dGJvdW5kLnRpbWVTZWxlY3Rvcj8uc2VsZWN0Py5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2VsZWN0RWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25PdXRib3VuZE1vbnRoQ2hhbmdlKGRhdGU6IFV0Y0RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLm91dGJvdW5kTW9udGhDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUgPSBkYXRlO1xuICB9XG5cbiAgZ2V0TWFpbkNsYXNzKCk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICBjb25zdCB3aWR0aHMgPSBbXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJ1xuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgY29uc3QgY2xhc3NlcyA9IFsuLi53aWR0aHNdO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuY29tcGFjdCkpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnY29tcGFjdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlubGluZUZsZXggPiAwKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2lubGluZS1mbGV4Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGFpbmVyQ2xhc3MoJycsIGNsYXNzZXMpO1xuICB9XG5cbiAgY2hlY2tPdXRib3VuZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5kZXZpY2VIZWxwZXIuaXNNb2JpbGVXaWR0aCgpICYmIHRoaXMuZXhpc3RzKHRoaXMub3V0Ym91bmRPbmx5KSk7XG4gIH1cblxuICBjaGVja0luYm91bmREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKCF0aGlzLmRldmljZUhlbHBlci5pc01vYmlsZVdpZHRoKCkgJiYgdGhpcy5leGlzdHModGhpcy5vdXRib3VuZE9ubHkpKVxuICAgICAgfHwgdGhpcy5leGlzdHModGhpcy5pbmJvdW5kRGlzYWJsZWQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pbmJvdW5kVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub3V0Ym91bmRWYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldFdpZHRoID0gKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoO1xuICAgIGlmIChjb250YWluZXJPZmZzZXRXaWR0aCA+IDApIHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dChjb250YWluZXJPZmZzZXRXaWR0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbmxpbmVGbGV4KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9ICh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAodGhpcy5pbmxpbmVGbGV4ID4gMCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjb250YWluZXIsICduYXMtZGF0ZXBpY2tlci1jb21iby1uZXctLWlubGluZS1mbGV4Jyk7XG4gICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt0aGlzLmlubGluZUZsZXh9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ25hcy1kYXRlcGlja2VyLWNvbWJvLW5ldy0taW5saW5lLWZsZXgnKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgW25hc0NsYXNzXT1cImdldE1haW5DbGFzcygpXCIgI2NvbnRhaW5lcj5cbiAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyJylcIj5cbiAgICA8bmFzLWRhdGVwaWNrZXItbmV3ICNkYXRlcGlja2VyT3V0Ym91bmRcbiAgICAgIGNvbXBhY3RcbiAgICAgIFtkaXNhYmxlQmFja2Ryb3BdPVwiZGlzYWJsZUJhY2tkcm9wXCJcbiAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRcIlxuICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJleGlzdHMoZGlzYWJsZVBhc3RTZWxlY3Rpb24pXCJcbiAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgW2F2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgIFtzZWxlY3RlZFRpbWVdPVwib3V0Ym91bmRTZWxlY3RlZFRpbWVcIlxuICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFt0aW1lRGlzcGxheUZvcm1hdF09XCJ0aW1lRGlzcGxheUZvcm1hdFwiXG4gICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZXhpc3RzKG91dGJvdW5kRGlzYWJsZWQpXCJcbiAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICBbYXJpYUxhYmVsUHJldmlvdXNNb250aF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJpbmJvdW5kT3BlbiA9IHRydWVcIlxuICAgICAgKGZvY3VzT25QcmV2aW91c0NoYW5nZSk9XCJvbkZvY3VzT25QcmV2aW91cygkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RlZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFsob3BlbildPVwib3V0Ym91bmRPcGVuXCJcbiAgICAgIFsoc2VsZWN0ZWREYXRlKV09XCJvdXRib3VuZFNlbGVjdGVkRGF0ZVwiPnt7b3V0Ym91bmRMYWJlbH19PC9uYXMtZGF0ZXBpY2tlci1uZXc+XG4gIDwvZGl2PlxuICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3NlcGFyYXRvcicpXCI+PC9zcGFuPlxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tPdXRib3VuZE9ubHkoKVwiXG4gICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlcicpXCI+XG4gICAgPG5hcy1kYXRlcGlja2VyLW5ldyAjZGF0ZXBpY2tlckluYm91bmRcbiAgICAgIGNvbXBhY3RcbiAgICAgIFtkaXNhYmxlQmFja2Ryb3BdPVwiZGlzYWJsZUJhY2tkcm9wXCJcbiAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2hlY2tJbmJvdW5kRGlzYWJsZWQoKVwiXG4gICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgW2F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJhdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgW2Rpc2FibGVQYXN0U2VsZWN0aW9uXT1cImV4aXN0cyhkaXNhYmxlUGFzdFNlbGVjdGlvbilcIlxuICAgICAgW2F2YWlsYWJpbGl0eV09XCJleGlzdHMoYXZhaWxhYmlsaXR5KVwiXG4gICAgICBbYXZhaWxhYmxlRGF0ZXNdPVwiaW5ib3VuZEF2YWlsYWJsZURhdGVzXCJcbiAgICAgIFtsb3dlckxpbWl0RGF0ZV09XCJpbmJvdW5kTG93ZXJMaW1pdERhdGVcIlxuICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgIFtzZWxlY3RlZFRpbWVdPVwiaW5ib3VuZFNlbGVjdGVkVGltZVwiXG4gICAgICBbZGF0ZURpc3BsYXlGb3JtYXRdPVwiZGF0ZURpc3BsYXlGb3JtYXRcIlxuICAgICAgW3RpbWVEaXNwbGF5Rm9ybWF0XT1cInRpbWVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICBbYXJpYUxhYmVsUHJldmlvdXNNb250aF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJvbkZvY3VzT25OZXh0KCRldmVudClcIlxuICAgICAgKGZvY3VzT25QcmV2aW91c0NoYW5nZSk9XCJvbkluYm91bmRGb2N1c09uUHJldmlvdXMoKVwiXG4gICAgICBbKG9wZW4pXT1cImluYm91bmRPcGVuXCJcbiAgICAgIFsoc2VsZWN0ZWRNb250aCldPVwiaW5ib3VuZFNlbGVjdGVkTW9udGhcIlxuICAgICAgWyhzZWxlY3RlZERhdGUpXT1cImluYm91bmRTZWxlY3RlZERhdGVcIj57e2luYm91bmRMYWJlbH19PC9uYXMtZGF0ZXBpY2tlci1uZXc+XG4gIDwvZGl2PlxuPC9kaXY+Il19
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jb21iby1uZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyLWNvbWJvLW5ldy9kYXRlcGlja2VyLWNvbWJvLW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXItY29tYm8tbmV3L2RhdGVwaWNrZXItY29tYm8tbmV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFNVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHM0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFHckQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGdCQUFnQjtJQWMvRDs7OztPQUlHO0lBQ0gsSUFDSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUM3RCxPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsa0JBQWtCLENB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SztnQkFTRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBU0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQVFGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkEyQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQXNCRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFZRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFPSSwwQkFBMEI7c0JBQW5DLE1BQU07Z0JBT0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQVFHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQU9HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGV2aWNlL2RldmljZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlck5ld0NvbXBvbmVudCB9IGZyb20gJy4uL2RhdGVwaWNrZXItbmV3JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlcGlja2VyIENvbWJvIENvbXBvbmVudCB8IE5ldyBkZXNpZ24gfCBCZXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyLWNvbWJvLW5ldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLWNvbWJvLW5ldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItY29tYm8tbmV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21ib05ld0NvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcblxuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyT3V0Ym91bmQnKSBkYXRlcGlja2VyT3V0Ym91bmQ6IERhdGVwaWNrZXJOZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXJJbmJvdW5kJykgZGF0ZXBpY2tlckluYm91bmQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIG91dGJvdW5kIGRhdGVwaWNrZXIgb3Blbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kRGlzYWJsZWQgfHwgdmFsdWUgPT09IHRoaXMub3V0Ym91bmRPcGVuVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRPcGVuVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMub3V0Ym91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGluYm91bmQgZGF0ZXBpY2tlciBvcGVuLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGluYm91bmRPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaW5ib3VuZERpc2FibGVkIHx8IHZhbHVlID09PSB0aGlzLmluYm91bmRPcGVuVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRib3VuZE9ubHkpIHtcbiAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbmJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmluYm91bmRPcGVuQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy5vdXRib3VuZE9wZW4pIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBubyBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIG5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGF0ZXMgaW4gdGhlIHBhc3QuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdFNlbGVjdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBvdXRib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgaW5ib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZW1vdmUgdGhlIGluYm91bmQgZGF0ZXBpY2tlciBpZiBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZE9ubHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGluYm91bmQgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aW1lcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgdGltZXBpY2tlckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgZGF0ZXBpY2tlcnMgaW4gYXZhaWxhYmlsaXR5IG1vZGUgd2hlcmUgYXZhaWxhYmxlIGRhdGVzIGNhbiBiZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJpbGl0eTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBdmFpbGFibGUgZGF0ZXMgZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRBdmFpbGFibGVEYXRlczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJZiBzZXQsIEVuYWJsZXMgdGhlIHRpbWUgZHJvcGRvd24gc2VsZWN0b3IgYWxvbmdzaWRlIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lczogQXJyYXk8VXRjRGF0ZT47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGRpc3BsYXkgZm9ybWF0IG9mIHRoZSBkYXRlIHdoZW4gdXNlciBoYXMgc2VsZWN0ZWQgdGhlIGRhdGUgYW5kIGl0IGlzIGJlaW5nIHNob3duIGluIHRoZSBpbnB1dCBib3ggZm9yIHRoZSBkYXRlIHBpY2tlci5cbiAgICogUGxlYXNlIGxvb2sgYXQgdGhlIGFuZ3VsYXIgRGF0ZSBwaXBlIGZvciB2YWxpZCBmb3JtYXRzIGFuZCB2YXJpYXRpb25zLlxuICAgKi9cbiAgQElucHV0KCkgZGF0ZURpc3BsYXlGb3JtYXQgPSAnRUVFRSBkLCBNTU1NIHl5eXknO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbG9jYWxlIGNvZGUgZm9yIHRoZSBsb2NhbGUgZm9ybWF0IHJ1bGVzIHRvIHVzZS4gV2hlbiBub3Qgc3VwcGxpZWQsIHVzZXMgdGhlIHZhbHVlIG9mIExPQ0FMRV9JRCwgd2hpY2ggaXMgZW4tVVMgYnkgZGVmYXVsdC5cbiAgICogVGhpcyByZXF1aXJlcyB0aGF0IHJlZ2lzdGVyTG9jYWxlRGF0YSBpcyBjYWxsZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBsb2NhbGUuXG4gICAqL1xuICBASW5wdXQoKSBsb2NhbGUgPSAnZW4tVVMnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbW9kaWZpZXIgdG8gcmVtb3ZlIHRoZSBwYWRkaW5nIGFuZCBtYXJnaW5zIGFyb3VuZCB0aGUgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyB0aGUgcGFyZW50J3MgZm9ybSBncm91cC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgaXMgcmVxdWllcmVkIHRvIGJlIGZpbGxlZCBpZiBuYXNGb3JtQ29udHJvbE5hbWUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWUsIGRhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlID0gZGF0ZTtcblxuICAgIHRoaXMuaW5ib3VuZExvd2VyTGltaXREYXRlID0gbmV3IFV0Y0RhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCAxKTtcbiAgICB0aGlzLmluYm91bmRMb3dlckxpbWl0RGF0ZS5zZXREYXRlKGRhdGUuZGF0ZSArIHRoaXMuaW5ib3VuZExvd2VyTGltaXREYXRlT2Zmc2V0KTtcblxuICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNlbGVjdGVkIGRhdGVmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZSwgZGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBlbmFibGUgdG8gZGlzYWJsZSBiYWNrZHJvcC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBvdXRib3VuZCBzZWxlY3RlZCB0aW1lIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRTZWxlY3RlZFRpbWU6IFV0Y0RhdGU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyB0aGUgaW5ib3VuZCBzZWxlY3RlZCB0aW1lIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZFNlbGVjdGVkVGltZTogVXRjRGF0ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIHJlbGF0aXZlIG51bWJlciB0byBkZWNpZGUgd2hlbiB0aGUgaW5ib3VuZCBsb3dlciBsaW1pdCBkYXRlIHNob3VsZCBiZSBiYXNlZCBvbiBzZWxlY3RlZCBvdXRib3VuZCBkYXRlLlxuICAgKlxuICAgKiBUaGUgbG93ZXIgbGltaXQgZGF0ZSBmb3IgaW5ib3VuZCBpcyBzZXQgYnkgZGVmYXVsdCBlcXVhbCB0byB0aGUgc2VsZWN0ZWQgb3V0Ym91bmQgZGF0ZS5cbiAgICpcbiAgICogSWYgdGhpcyBudW1iZXIgaXMgcG9zaXRpdmUsIHRoZSBpbmJvdW5kIGxvd2VyIGxpbWl0IGRhdGUgd2lsbCBhZGQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBzZWxlY3RlZCBvdXRib3VuZCBkYXRlLlxuICAgKiBJZiB0aGlzIG51bWJlciBpcyBuZWdhdGl2ZSwgdGhlIGluYm91bmQgbG93ZXIgbGltaXQgZGF0ZSB3aWxsIHN1YnRyYWN0IHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgc2VsZWN0ZWQgb3V0Ym91bmQgZGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmRMb3dlckxpbWl0RGF0ZU9mZnNldCA9IDA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgYW5kIGluYm91bmQgZGF0ZXMgd2lsbCBicmVhayBob3Jpem9udGFsbHkgaW4gbW9iaWxlIHZpZXcuXG4gICAqL1xuICBASW5wdXQoKSBpbmxpbmVGbGV4ID0gMDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBPdXRib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgcHJlc3NlZCBzaGlmdCArIHRhYiB0byBnbyB0byBwcmV2aW91cyBjb250cm9sLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25QcmV2aW91c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQ+KCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFtb250aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKG1vbnRoLCB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUgPSBtb250aDtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvdXRib3VuZE9wZW5WYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIGluYm91bmRWYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBvdXRib3VuZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIsXG4gICAgcHJpdmF0ZSBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICBzdXBlcignbmFzLWRhdGVwaWNrZXItY29tYm8tbmV3Jyk7XG5cbiAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbnRhaW5lcldpZHRoKCk7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmQpIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kKVxuICAgICAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAuc3Vic2NyaWJlKG91dGJvdW5kID0+IHtcbiAgICAgICAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGUgPSBvdXRib3VuZD8uZGF0ZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpIHtcbiAgICAgICAgdGhpcy5pbmJvdW5kVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZClcbiAgICAgICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnN1YnNjcmliZShpbmJvdW5kID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZSA9IGluYm91bmQ/LmRhdGU7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29udGFpbmVyV2lkdGgoKTtcbiAgICB0aGlzLnNldElubGluZUZsZXgoKTtcbiAgfVxuXG4gIG9uRm9jdXNPbk5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9jdXNPblByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c09uUHJldmlvdXNDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkluYm91bmRGb2N1c09uUHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZXMgJiYgdGhpcy50aW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy5kYXRlcGlja2VyT3V0Ym91bmQudGltZVNlbGVjdG9yPy5zZWxlY3Q/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZWxlY3RFbGVtZW50Py5mb2N1cygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaW5ib3VuZE9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvbk91dGJvdW5kTW9udGhDaGFuZ2UoZGF0ZTogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KGRhdGUpO1xuICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSA9IGRhdGU7XG4gIH1cblxuICBnZXRNYWluQ2xhc3MoKTogQXJyYXk8Q2xhc3NNb2RlbD4ge1xuICAgIGNvbnN0IHdpZHRocyA9IFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbGcnXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBjb25zdCBjbGFzc2VzID0gWy4uLndpZHRoc107XG5cbiAgICBpZiAodGhpcy5leGlzdHModGhpcy5jb21wYWN0KSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdjb21wYWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5saW5lRmxleCA+IDApIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnaW5saW5lLWZsZXgnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb250YWluZXJDbGFzcygnJywgY2xhc3Nlcyk7XG4gIH1cblxuICBjaGVja091dGJvdW5kT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLmRldmljZUhlbHBlci5pc01vYmlsZVdpZHRoKCkgJiYgdGhpcy5leGlzdHModGhpcy5vdXRib3VuZE9ubHkpKTtcbiAgfVxuXG4gIGNoZWNrSW5ib3VuZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoIXRoaXMuZGV2aWNlSGVscGVyLmlzTW9iaWxlV2lkdGgoKSAmJiB0aGlzLmV4aXN0cyh0aGlzLm91dGJvdW5kT25seSkpXG4gICAgICB8fCB0aGlzLmV4aXN0cyh0aGlzLmluYm91bmREaXNhYmxlZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmluYm91bmRWYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vdXRib3VuZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGFpbmVyV2lkdGgoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyT2Zmc2V0V2lkdGggPSAodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGg7XG4gICAgaWYgKGNvbnRhaW5lck9mZnNldFdpZHRoID4gMCkge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KGNvbnRhaW5lck9mZnNldFdpZHRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldElubGluZUZsZXgoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpbmxpbmVGbGV4ID0gdGhpcy5pbmxpbmVGbGV4ID4gMDtcblxuICAgIHRoaXMucmVuZGVyZXJbaW5saW5lRmxleCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShjb250YWluZXIsICduYXMtZGF0ZXBpY2tlci1jb21iby1uZXctLWlubGluZS1mbGV4Jyk7XG4gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gaW5saW5lRmxleCA/IGAke3RoaXMuaW5saW5lRmxleH1weGAgOiAnMTAwJSc7XG4gIH1cbn1cbiIsIjxkaXYgW25hc0NsYXNzXT1cImdldE1haW5DbGFzcygpXCIgI2NvbnRhaW5lcj5cbiAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyJylcIj5cbiAgICA8bmFzLWRhdGVwaWNrZXItbmV3ICNkYXRlcGlja2VyT3V0Ym91bmRcbiAgICAgIGNvbXBhY3RcbiAgICAgIFtkaXNhYmxlQmFja2Ryb3BdPVwiZGlzYWJsZUJhY2tkcm9wXCJcbiAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVdPVwibmFzRm9ybUNvbnRyb2xOYW1lT3V0Ym91bmRcIlxuICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJleGlzdHMoZGlzYWJsZVBhc3RTZWxlY3Rpb24pXCJcbiAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgW2F2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgIFt0aW1lcGlja2VyTGFiZWxdPVwidGltZXBpY2tlckxhYmVsXCJcbiAgICAgIFtzZWxlY3RlZFRpbWVdPVwib3V0Ym91bmRTZWxlY3RlZFRpbWVcIlxuICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFt0aW1lRGlzcGxheUZvcm1hdF09XCJ0aW1lRGlzcGxheUZvcm1hdFwiXG4gICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZXhpc3RzKG91dGJvdW5kRGlzYWJsZWQpXCJcbiAgICAgIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICBbYXJpYUxhYmVsUHJldmlvdXNNb250aF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJpbmJvdW5kT3BlbiA9IHRydWVcIlxuICAgICAgKGZvY3VzT25QcmV2aW91c0NoYW5nZSk9XCJvbkZvY3VzT25QcmV2aW91cygkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RlZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFsob3BlbildPVwib3V0Ym91bmRPcGVuXCJcbiAgICAgIFsoc2VsZWN0ZWREYXRlKV09XCJvdXRib3VuZFNlbGVjdGVkRGF0ZVwiPnt7b3V0Ym91bmRMYWJlbH19PC9uYXMtZGF0ZXBpY2tlci1uZXc+XG4gIDwvZGl2PlxuICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3NlcGFyYXRvcicpXCI+PC9zcGFuPlxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tPdXRib3VuZE9ubHkoKVwiXG4gICAgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlcicsIGNoZWNrSW5ib3VuZERpc2FibGVkKCkgJiYgJ2hpZGUnKVwiPlxuICAgIDxuYXMtZGF0ZXBpY2tlci1uZXcgI2RhdGVwaWNrZXJJbmJvdW5kXG4gICAgICBjb21wYWN0XG4gICAgICBbZGlzYWJsZUJhY2tkcm9wXT1cImRpc2FibGVCYWNrZHJvcFwiXG4gICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lXT1cIm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcIlxuICAgICAgW2Rpc2FibGVkXT1cImNoZWNrSW5ib3VuZERpc2FibGVkKClcIlxuICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJleGlzdHMoZGlzYWJsZVBhc3RTZWxlY3Rpb24pXCJcbiAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgW2F2YWlsYWJsZURhdGVzXT1cImluYm91bmRBdmFpbGFibGVEYXRlc1wiXG4gICAgICBbbG93ZXJMaW1pdERhdGVdPVwiaW5ib3VuZExvd2VyTGltaXREYXRlXCJcbiAgICAgIFt0aW1lc109XCJ0aW1lc1wiXG4gICAgICBbdGltZXBpY2tlckxhYmVsXT1cInRpbWVwaWNrZXJMYWJlbFwiXG4gICAgICBbc2VsZWN0ZWRUaW1lXT1cImluYm91bmRTZWxlY3RlZFRpbWVcIlxuICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgIFt0aW1lRGlzcGxheUZvcm1hdF09XCJ0aW1lRGlzcGxheUZvcm1hdFwiXG4gICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICBbYXJpYUxhYmVsTmV4dE1vbnRoXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAoZm9jdXNPbk5leHRDaGFuZ2UpPVwib25Gb2N1c09uTmV4dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1c09uUHJldmlvdXNDaGFuZ2UpPVwib25JbmJvdW5kRm9jdXNPblByZXZpb3VzKClcIlxuICAgICAgWyhvcGVuKV09XCJpbmJvdW5kT3BlblwiXG4gICAgICBbKHNlbGVjdGVkTW9udGgpXT1cImluYm91bmRTZWxlY3RlZE1vbnRoXCJcbiAgICAgIFsoc2VsZWN0ZWREYXRlKV09XCJpbmJvdW5kU2VsZWN0ZWREYXRlXCI+e3tpbmJvdW5kTGFiZWx9fTwvbmFzLWRhdGVwaWNrZXItbmV3PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==