igniteui-angular 15.1.10 → 15.1.12

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.
@@ -677,16 +677,16 @@ export class IgxDatePickerComponent extends PickerBaseDirective {
677
677
  }
678
678
  setCalendarViewDate() {
679
679
  const { minValue, maxValue } = this.getMinMaxDates();
680
- this._dateValue = this.dateValue || new Date();
681
- if (minValue && DateTimeUtil.lessThanMinValue(this.dateValue, minValue)) {
680
+ const dateValue = DateTimeUtil.isValidDate(this.dateValue) ? this.dateValue : new Date();
681
+ if (minValue && DateTimeUtil.lessThanMinValue(dateValue, minValue)) {
682
682
  this._calendar.viewDate = this._targetViewDate = minValue;
683
683
  return;
684
684
  }
685
- if (maxValue && DateTimeUtil.greaterThanMaxValue(this.dateValue, maxValue)) {
685
+ if (maxValue && DateTimeUtil.greaterThanMaxValue(dateValue, maxValue)) {
686
686
  this._calendar.viewDate = this._targetViewDate = maxValue;
687
687
  return;
688
688
  }
689
- this._calendar.viewDate = this._targetViewDate = this.dateValue;
689
+ this._calendar.viewDate = this._targetViewDate = dateValue;
690
690
  }
691
691
  }
692
692
  IgxDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: IgxDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: IgxOverlayService }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i1.PlatformUtil }, { token: i0.ChangeDetectorRef }, { token: DisplayDensityToken, optional: true }, { token: IGX_INPUT_GROUP_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
@@ -794,4 +794,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
794
794
  type: HostListener,
795
795
  args: ['keydown', ['$event']]
796
796
  }] } });
797
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFDTCxTQUFTLEVBR1QsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHSCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUdwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQTRCLElBQUksRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFJSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLGNBQWMsRUFDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQXVCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQW1DLE1BQU0sRUFBZ0IsTUFB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QWM7c0JBRHJCLFlBQVk7dUJBQUMsa0NBQWtDO2dCQUl4QyxjQUFjO3NCQURyQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsZ0JBQWdCO3NCQUR2QixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUlyRCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSXBCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSTNDLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQTRHaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBMT0NBTEVfSUQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgTmdDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIG5vb3AsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQgfSBmcm9tICcuLi9hbmltYXRpb25zL2ZhZGUnO1xuaW1wb3J0IHtcbiAgICBJRm9ybWF0dGluZ09wdGlvbnMsXG4gICAgSUZvcm1hdHRpbmdWaWV3cyxcbiAgICBJZ3hDYWxlbmRhckNvbXBvbmVudCxcbiAgICBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgaXNEYXRlSW5SYW5nZXNcbn0gZnJvbSAnLi4vY2FsZW5kYXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEZXNjcmlwdG9yLCBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcy9kYXRlUmFuZ2UnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9kYXRlLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgaXNEYXRlLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgUGlja2VySGVhZGVyT3JpZW50YXRpb24gfSBmcm9tICcuLi9kYXRlLWNvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcbmltcG9ydCB7IERhdGVQYXJ0LCBEYXRlUGFydERlbHRhcywgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGUtdGltZS1lZGl0b3IvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBJZ3hJbnB1dERpcmVjdGl2ZSxcbiAgSWd4SW5wdXRHcm91cENvbXBvbmVudCxcbiAgSWd4SW5wdXRHcm91cFR5cGUsXG4gIElneElucHV0U3RhdGUsXG4gIElneExhYmVsRGlyZWN0aXZlLFxuICBJR1hfSU5QVVRfR1JPVVBfVFlQRVxufSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7XG4gIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LFxuICBJZ3hPdmVybGF5U2VydmljZSxcbiAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gIE92ZXJsYXlFdmVudEFyZ3MsXG4gIE92ZXJsYXlTZXR0aW5nc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tbW9uJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIERhdGUgUGlja2VyIGRpc3BsYXlzIGEgcG9wdXAgY2FsZW5kYXIgdGhhdCBsZXRzIHVzZXJzIHNlbGVjdCBhIHNpbmdsZSBkYXRlLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVBpY2tlck1vZHVsZVxuICogQGlneFRoZW1lIGlneC1jYWxlbmRhci10aGVtZSwgaWd4LWljb24tdGhlbWVcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKiBAaWd4S2V5d29yZHMgZGF0ZXBpY2tlciwgY2FsZW5kYXIsIHNjaGVkdWxlLCBkYXRlXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1kYXRlLXBpY2tlciBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J11cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFBpY2tlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLFxuICAgIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB3aGV0aGVyIHRoZSBpbmFjdGl2ZSBkYXRlcyB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQXBwbGllcyB0byBkYXRlcyB0aGF0IGFyZSBvdXQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2hpZGVPdXRzaWRlRGF5c109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuZGF0ZVBpY2tlci5oaWRlT3V0c2lkZURheXM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZU91dHNpZGVEYXlzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2Rpc3BsYXlNb250aHNDb3VudF09XCIyXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG1vbnRoVmlld3NEaXNwbGF5ZWQgPSB0aGlzLmRhdGVQaWNrZXIuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlNb250aHNDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvbiBvbiB0aGUgc2VsZWN0ZWQgb3IgcGFzc2VkIGRhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCIgW2Zvcm1hdHRlcl09XCJmb3JtYXR0ZXJcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWw6IERhdGUpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBoZWFkZXJPcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246IFBpY2tlckhlYWRlck9yaWVudGF0aW9uID0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdG9kYXkgYnV0dG9uJ3MgbGFiZWwuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciB0b2RheUJ1dHRvbkxhYmVsPVwiVG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b2RheUJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNhbmNlbCBidXR0b24ncyBsYWJlbC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgY2FuY2VsQnV0dG9uTGFiZWw9XCJDYW5jZWxcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBpZiB0aGUgY3VycmVudGx5IHNwdW4gZGF0ZSBzZWdtZW50IHNob3VsZCBsb29wIG92ZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBEZWx0YSB2YWx1ZXMgdXNlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGVhY2ggZWRpdG9yIGRhdGUgcGFydCBvbiBzcGluIGFjdGlvbnMuXG4gICAgICogQWxsIHZhbHVlcyBkZWZhdWx0IHRvIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3NwaW5EZWx0YV09XCJ7IGRhdGU6IDUsIG1vbnRoOiAyIH1cIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluRGVsdGE6IFBpY2s8RGF0ZVBhcnREZWx0YXMsICdkYXRlJyB8ICdtb250aCcgfCAneWVhcic+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjb250YWluZXIgdXNlZCBmb3IgdGhlIHBvcHVwIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqICBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2lkXT1cIidpZ3gtZGF0ZS1waWNrZXItMydcIiBjYW5jZWxCdXR0b25MYWJlbD1cImNhbmNlbFwiIHRvZGF5QnV0dG9uTGFiZWw9XCJ0b2RheVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRhdGUtcGlja2VyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvLyNyZWdpb24gY2FsZW5kYXIgbWVtYmVyc1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBmb3JtYXQgdmlld3Mgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBmb3JtYXRWaWV3cyA9IHRoaXMuZGF0ZVBpY2tlci5mb3JtYXRWaWV3cztcbiAgICAgKiAgdGhpcy5kYXRlUGlja2VyLmZvcm1hdFZpZXdzID0ge2RheTpmYWxzZSwgbW9udGg6IGZhbHNlLCB5ZWFyOmZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGlzYWJsZWREYXRlcyA9IHRoaXMuZGF0ZXBpY2tlci5kaXNhYmxlZERhdGVzO1xuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5kaXNhYmxlZERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLl07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHNwZWNpYWwgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3BlY2lhbERhdGVzID0gdGhpcy5kYXRlcGlja2VyLnNwZWNpYWxEYXRlcztcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuc3BlY2lhbERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzcGVjaWFsRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxEYXRlcztcbiAgICB9XG4gICAgcHVibGljIHNldCBzcGVjaWFsRGF0ZXModmFsdWU6IERhdGVSYW5nZURlc2NyaXB0b3JbXSkge1xuICAgICAgICB0aGlzLl9zcGVjaWFsRGF0ZXMgPSB2YWx1ZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5jYWxlbmRhckZvcm1hdCA9IHtkYXk6IFwibnVtZXJpY1wiLCAgbW9udGg6IFwibG9uZ1wiLCB3ZWVrZGF5OiBcImxvbmdcIiwgeWVhcjogXCJudW1lcmljXCJ9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbGVuZGFyRm9ybWF0OiBJRm9ybWF0dGluZ09wdGlvbnM7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdmFsdWUoZGF0ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKGRhdGUpO1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSAhPT0gZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IHRoaXMuX2RhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRlVmFsdWUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgcGlja2VyIHdpbGwgYWNjZXB0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5EYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW21heFZhbHVlXT1cIm1heERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgcGlja2VyJ3MgZGVmYXVsdCB0b2dnbGUgaWNvbi5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5nczogSURhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3M7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBwaWNrZXIncyB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VkIGZvciBgdHdvLXdheWAgYmluZGluZ3MuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFsodmFsdWUpXT1cImRhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgdHlwZXMvc3BpbnMgaW52YWxpZCBkYXRlIGluIHRoZSBkYXRlLXBpY2tlciBlZGl0b3IuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAodmFsaWRhdGlvbkZhaWxlZCk9XCJvblZhbGlkYXRpb25GYWlsZWQoJGV2ZW50KVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGF0ZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFBpY2tlckNsZWFyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBjbGVhckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxJZ3hQaWNrZXJDbGVhckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkYXRlVGltZUVkaXRvcjogSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBsYWJlbERpcmVjdGl2ZTogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgc3ViaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBwaWNrZXJBY3Rpb25zOiBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnB1dEdyb3VwRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0R3JvdXA/LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkYXRlVmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyRm9ybWF0Vmlld3MoKTogSUZvcm1hdHRpbmdWaWV3cyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZGb3JtYXRWaWV3cywgdGhpcy5mb3JtYXRWaWV3cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyQ2FsZW5kYXJGb3JtYXQoKTogSUZvcm1hdHRpbmdPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NhbGVuZGFyRm9ybWF0LCB0aGlzLmNhbGVuZGFyRm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBQaXBlVHJhbnNmb3JtID0geyB0cmFuc2Zvcm06IChkYXRlOiBEYXRlKSA9PiB0aGlzLmZvcm1hdHRlcihkYXRlKSB9O1xuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5EYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9vdmVybGF5SWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBwcml2YXRlIF90YXJnZXRWaWV3RGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9uZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfc3BlY2lhbERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10gPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPixcbiAgICAgICAgICAgIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzIHwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+XSA9IFtcbiAgICAgICAgICAgIGZpbHRlcih4ID0+IHguaWQgPT09IHRoaXMuX292ZXJsYXlJZCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgIF07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmlucHV0R3JvdXBFbGVtZW50LFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWUsXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJGb3JtYXQ6IElGb3JtYXR0aW5nT3B0aW9ucyA9IHtcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9O1xuICAgIHByaXZhdGUgX2RlZkZvcm1hdFZpZXdzOiBJRm9ybWF0dGluZ1ZpZXdzID0ge1xuICAgICAgICBkYXk6IGZhbHNlLFxuICAgICAgICBtb250aDogdHJ1ZSxcbiAgICAgICAgeWVhcjogZmFsc2VcbiAgICB9O1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBfbG9jYWxlSWQ6IHN0cmluZyxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJpdmF0ZSBfb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM/OiBJRGlzcGxheURlbnNpdHlPcHRpb25zLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKSBfaW5wdXRHcm91cFR5cGU/OiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIC8vIFJ1biB0aGUgdmFsaWRhdGlvbiB3aXRoIGVtcHR5IG9iamVjdCB0byBjaGVjayBpZiByZXF1aXJlZCBpcyBlbmFibGVkLlxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpY2tlclJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHRoaXMucmVzb3VyY2VTdHJpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbihzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaXNEcm9wZG93blxuICAgICAgICAgICAgPyB0aGlzLmRyb3BEb3duT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICA6IHRoaXMuZGlhbG9nT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICAsIHNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIHRoaXMuaW5wdXRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIG92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmlucHV0R3JvdXBFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGxldCkge1xuICAgICAgICAgICAgb3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3V0bGV0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlTZXJ2aWNlXG4gICAgICAgICAgICAuYXR0YWNoKElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIG92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLnNob3codGhpcy5fb3ZlcmxheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2dcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci50b2dnbGUoKVwiPlRvZ2dsZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKHNldHRpbmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLmNsb3NlKClcIj5DbG9zZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSBkYXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3MgVXBkYXRlcyB0aGUgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLnNlbGVjdChkYXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGF0ZSBwYXNzZWQgZGF0ZSB0aGF0IGhhcyB0byBiZSBzZXQgdG8gdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdG9kYXkncyBkYXRlIGFuZCBjbG9zZXMgdGhlIHBpY2tlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci5zZWxlY3RUb2RheSgpXCI+U2VsZWN0IFRvZGF5PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogKi9cbiAgICBwdWJsaWMgc2VsZWN0VG9kYXkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgdG9kYXkuc2V0SG91cnMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbnV0ZXMoMCk7XG4gICAgICAgIHRvZGF5LnNldFNlY29uZHMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgdGhpcy5zZWxlY3QodG9kYXkpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlIHBpY2tlcidzIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmNsZWFyKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kZXNlbGVjdERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBhIHNwZWNpZmllZCBgRGF0ZVBhcnRgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBpbmNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBpbmNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuaW5jcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpbmNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5pbmNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZW1lbnQgYSBzcGVjaWZpZWQgYERhdGVQYXJ0YFxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBkZWNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBkZWNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuZGVjcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5kZWNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gdGhpcy5fZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gVmFsaWRhdG9yXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW52YWxpZERhdGUgaGFuZGxpbmdcbiAgICAgICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmRpc2FibGVkRGF0ZXMgJiYgaXNEYXRlSW5SYW5nZXModmFsdWUsIHRoaXMuZGlzYWJsZWREYXRlcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IGRhdGVJc0Rpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIGZhbHNlKSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGw7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ0NvbnRyb2wgPSB0aGlzLl9pbmplY3Rvci5nZXQ8TmdDb250cm9sPihOZ0NvbnRyb2wsIG51bGwpO1xuXG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9DbGljaygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpO1xuXG4gICAgICAgIHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSk7XG4gICAgICAgIHRoaXMuY2xlYXJDb21wb25lbnRzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1YlRvSWNvbnNDbGlja2VkKHRoaXMuY2xlYXJDb21wb25lbnRzLCAoKSA9PiB0aGlzLmNsZWFyKCkpKTtcblxuICAgICAgICB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLmlucHV0R3JvdXAuZWxlbWVudC5uYXRpdmVFbGVtZW50XTtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LCAnYmx1cicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fbmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB0aGlzLmxhYmVsRGlyZWN0aXZlLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX292ZXJsYXlJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvQ2xpY2soKSB7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmdldEVkaXRFbGVtZW50KCksICdjbGljaycpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICBpZiAoaXNEYXRlKHZhbHVlKSAmJiBpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodmFsdWUpID8gdmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5KCkge1xuICAgICAgICAvLyBCLlAuIDE4IE1heSAyMDIxOiBJZ3hEYXRlUGlja2VyIGRvZXMgbm90IHJlc2V0IGl0cyBzdGF0ZSB1cG9uIHJlc2V0Rm9ybSAjOTUyNlxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkXG4gICAgICAgICAgICAgICAgICAgID8gSWd4SW5wdXRTdGF0ZS5WQUxJRFxuICAgICAgICAgICAgICAgICAgICA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZFxuICAgICAgICAgICAgICAgICAgICA/IElneElucHV0U3RhdGUuSU5JVElBTFxuICAgICAgICAgICAgICAgICAgICA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpXG4gICAgICAgICAgICAmJiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblN0YXR1c0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9uZ0NvbnRyb2wuZGlzYWJsZWQ7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVWYWx1ZSAmJiBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKHRoaXMuZGF0ZVZhbHVlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHRoaXMuZGF0ZVZhbHVlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldFNlY29uZHModGhpcy5kYXRlVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKHRoaXMuZGF0ZVZhbHVlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWxpZGF0aW9uRmFpbGVkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgcHJldlZhbHVlOiBldmVudC5vbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmluZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZTogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoZS5jb21wb25lbnRSZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLm9wZW5lZC5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FsZW5kYXI/LmRheXNWaWV3Py5zZWxlY3RlZERhdGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXI/LmRheXNWaWV3Py5mb2N1c0FjdGl2ZURhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Vmlld0RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRWaWV3RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LmRhdGVzXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKGQgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSB0aGlzLl90YXJnZXRWaWV3RGF0ZS5nZXRUaW1lKCkpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NpbmcucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKGU6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIG5vdCBmb2N1cyB0aGUgaW5wdXQgaWYgY2xpY2tpbmcgb3V0c2lkZSBpbiBkcm9wZG93biBtb2RlXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRFZGl0RWxlbWVudCgpICYmICEoYXJncy5ldmVudCAmJiB0aGlzLmlzRHJvcGRvd24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2VkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWluTWF4RGF0ZXMoKSB7XG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWluVmFsdWUpID8gdGhpcy5taW5WYWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5taW5WYWx1ZSk7XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWF4VmFsdWUpID8gdGhpcy5tYXhWYWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIHJldHVybiB7IG1pblZhbHVlLCBtYXhWYWx1ZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGlzYWJsZWREYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcyA9IHRoaXMuZGlzYWJsZWREYXRlcyA/IFsuLi50aGlzLmRpc2FibGVkRGF0ZXNdIDogW107XG4gICAgICAgIGNvbnN0IHsgbWluVmFsdWUsIG1heFZhbHVlIH0gPSB0aGlzLmdldE1pbk1heERhdGVzKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZWZvcmUsIGRhdGVSYW5nZTogW21pblZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLmRpc2FibGVkRGF0ZXMucHVzaCh7IHR5cGU6IERhdGVSYW5nZVR5cGUuQWZ0ZXIsIGRhdGVSYW5nZTogW21heFZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGNvbXBvbmVudEluc3RhbmNlOiBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9jYWxlbmRhciA9IGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyO1xuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5oZWFkZXJPcmllbnRhdGlvbiA9PT0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhhc0hlYWRlciA9ICF0aGlzLmlzRHJvcGRvd247XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdE9wdGlvbnMgPSB0aGlzLnBpY2tlckNhbGVuZGFyRm9ybWF0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5mb3JtYXRWaWV3cyA9IHRoaXMucGlja2VyRm9ybWF0Vmlld3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLndlZWtTdGFydCA9IHRoaXMud2Vla1N0YXJ0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zcGVjaWFsRGF0ZXMgPSB0aGlzLnNwZWNpYWxEYXRlcztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuc3ViaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuaGlkZU91dHNpZGVEYXlzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5tb250aHNWaWV3TnVtYmVyID0gdGhpcy5kaXNwbGF5TW9udGhzQ291bnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNob3dXZWVrTnVtYmVycyA9IHRoaXMuc2hvd1dlZWtOdW1iZXJzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXY6IERhdGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGV2KSk7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWREYXRlcygpO1xuXG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBjYWxlbmRhciB3aWxsIHRocm93IGlmIHRoZSBwaWNrZXIncyB2YWx1ZSBpcyBJbnZhbGlkRGF0ZSAjOTIwOFxuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmFsdWUgPSB0aGlzLmRhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldENhbGVuZGFyVmlld0RhdGUoKTtcblxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSB0aGlzLmNhbmNlbEJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy50b2RheUJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5waWNrZXJBY3Rpb25zID0gdGhpcy5waWNrZXJBY3Rpb25zO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UudG9kYXlTZWxlY3Rpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZWxlY3RUb2RheSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhbGVuZGFyVmlld0RhdGUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluVmFsdWUsIG1heFZhbHVlIH0gPSB0aGlzLmdldE1pbk1heERhdGVzKCk7XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZSh0aGlzLmRhdGVWYWx1ZSwgbWluVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gbWluVmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFZhbHVlICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKHRoaXMuZGF0ZVZhbHVlLCBtYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSBtYXhWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gdGhpcy5kYXRlVmFsdWU7XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiIFt0eXBlXT1cInRoaXMudHlwZVwiIFtzdXBwcmVzc0lucHV0QXV0b2ZvY3VzXT1cInRydWVcIj5cbiAgICA8aWd4LXByZWZpeCAqbmdJZj1cIiF0aGlzLnRvZ2dsZUNvbXBvbmVudHMubGVuZ3RoXCIgKGNsaWNrKT1cInRoaXMudG9nZ2xlKClcIj5cbiAgICAgICAgPGlneC1pY29uIFt0aXRsZV09XCJ0aGlzLnZhbHVlXG4gICAgICAgICAgICA/IHBpY2tlclJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9waWNrZXJfY2hhbmdlX2RhdGVcbiAgICAgICAgICAgIDogcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaG9vc2VfZGF0ZVwiPnRvZGF5PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1wcmVmaXg+XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJpZ3gtZGF0ZS1waWNrZXJfX2lucHV0LWRhdGVcIiBbZGlzcGxheVZhbHVlUGlwZV09XCJ0aGlzLmZvcm1hdHRlciA/IGRpc3BsYXlWYWx1ZSA6IG51bGxcIiBpZ3hJbnB1dFxuICAgICAgICBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwidGhpcy5pbnB1dEZvcm1hdFwiIFtkaXNwbGF5Rm9ybWF0XT1cInRoaXMuZGlzcGxheUZvcm1hdFwiXG4gICAgICAgIFttaW5WYWx1ZV09XCJ0aGlzLm1pblZhbHVlXCIgW21heFZhbHVlXT1cInRoaXMubWF4VmFsdWVcIiBbc3BpbkRlbHRhXT1cInRoaXMuc3BpbkRlbHRhXCIgW3NwaW5Mb29wXT1cInRoaXMuc3Bpbkxvb3BcIiBcbiAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuZGlzYWJsZWRcIiBbcGxhY2Vob2xkZXJdPVwidGhpcy5wbGFjZWhvbGRlclwiIFtyZWFkb25seV09XCIhdGhpcy5pc0Ryb3Bkb3duIHx8IHRoaXMucmVhZE9ubHlcIlxuICAgICAgICBbaWd4VGV4dFNlbGVjdGlvbl09XCJ0aGlzLmlzRHJvcGRvd24gJiYgIXRoaXMucmVhZE9ubHlcIiBbbG9jYWxlXT1cInRoaXMubG9jYWxlXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5jb2xsYXBzZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGhpcy5sYWJlbD8uaWRcIiBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCIgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCIgcm9sZT1cImNvbWJvYm94XCI+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiF0aGlzLmNsZWFyQ29tcG9uZW50cy5sZW5ndGggJiYgdGhpcy52YWx1ZVwiIChjbGljayk9XCJ0aGlzLmNsZWFyKClcIj5cbiAgICAgICAgPGlneC1pY29uPmNsZWFyPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWhpbnQsW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG4iXX0=
797
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBRWYsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFDTCxTQUFTLEVBR1QsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHSCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUdwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQTRCLElBQUksRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFJSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLGNBQWMsRUFDakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQXVCLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQW1DLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBNEIsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqSCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUV0QixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNyQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUlsQixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7QUFHaEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRWhCOzs7Ozs7Ozs7OztHQVdHO0FBVUgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG1CQUFtQjtJQWdLM0Q7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxLQUE0QjtRQUNqRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFXLFlBQVksQ0FBQyxLQUE0QjtRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBY0QsWUFBWTtJQUVaOzs7Ozs7O09BT0c7SUFDSCxJQUNXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQVcsS0FBSyxDQUFDLElBQW1CO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBbUVELElBQVkscUJBQXFCO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBWSx1QkFBdUI7UUFDL0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFZLGlCQUFpQjtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBWSxpQkFBaUI7UUFDekIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBWSxvQkFBb0I7UUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBb0RELFlBQVksT0FBZ0MsRUFDckIsU0FBaUIsRUFDRCxlQUFrQyxFQUM3RCxTQUFtQixFQUNuQixTQUFvQixFQUNwQixRQUFzQixFQUN0QixHQUFzQixFQUNXLHNCQUErQyxFQUM5QyxlQUFtQztRQUM3RSxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVBoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDN0QsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFuWWxDOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBRUksdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBd0I5Qjs7Ozs7OztXQU9HO1FBRUksc0JBQWlCLEdBQTRCLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztRQXdCdkY7Ozs7Ozs7V0FPRztRQUVJLGFBQVEsR0FBRyxJQUFJLENBQUM7UUE4QnZCOzs7Ozs7OztXQVFHO1FBR0ksT0FBRSxHQUFHLG1CQUFtQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBOEgzQyx3QkFBd0I7UUFFakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUV4Qjs7Ozs7Ozs7OztXQVVHO1FBRUksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTlDOzs7Ozs7O1dBT0c7UUFFSSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBd0MsQ0FBQztRQXVEbkYsd0JBQXdCO1FBQ2pCLGlCQUFZLEdBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFakYscUJBQWdCLEdBQUcsc0JBQXNCLENBQUMseUJBQXlCLENBQUM7UUFLcEUsZUFBVSxHQUFjLElBQUksQ0FBQztRQUc3QixrQkFBYSxHQUEwQixJQUFJLENBQUM7UUFDNUMsbUJBQWMsR0FBMEIsSUFBSSxDQUFDO1FBQzdDLHNCQUFpQixHQUUwRDtZQUMzRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDNUIsQ0FBQztRQUNFLDZCQUF3QixHQUFvQjtZQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUM5QixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLEtBQUssRUFBRSxLQUFLO1lBQ1osYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLElBQUksc0JBQXNCLEVBQUU7WUFDNUMsZ0JBQWdCLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQztnQkFDdkMsYUFBYSxFQUFFLE1BQU07Z0JBQ3JCLGNBQWMsRUFBRSxPQUFPO2FBQzFCLENBQUM7U0FDTCxDQUFDO1FBQ00sMkJBQXNCLEdBQW9CO1lBQzlDLG1CQUFtQixFQUFFLElBQUk7WUFDekIsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsSUFBSTtTQUN0QixDQUFDO1FBQ00sb0JBQWUsR0FBdUI7WUFDMUMsR0FBRyxFQUFFLFNBQVM7WUFDZCxLQUFLLEVBQUUsT0FBTztZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxTQUFTO1NBQ2xCLENBQUM7UUFDTSxvQkFBZSxHQUFxQjtZQUN4QyxHQUFHLEVBQUUsS0FBSztZQUNWLEtBQUssRUFBRSxJQUFJO1lBQ1gsSUFBSSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBQ00sc0JBQWlCLEdBQXNCLElBQUksQ0FBQztRQUM1Qyx1QkFBa0IsR0FBZSxJQUFJLENBQUM7UUFDdEMsdUJBQWtCLEdBQWUsSUFBSSxDQUFDO1FBZ1d0QyxvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQXhWRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsUUFBUTtRQUNmLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDakYsd0VBQXdFO1lBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFxQixDQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNsQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxxQkFBcUI7UUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCx3QkFBd0I7SUFFakIsU0FBUyxDQUFDLEtBQW9CO1FBQ2pDLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNmLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUTtnQkFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDaEI7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDZjtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksSUFBSSxDQUFDLFFBQTBCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztTQUNWO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUI7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUNuRDtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDakMsTUFBTSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxRQUEwQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QjthQUFNO1lBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLEtBQUs7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLE1BQU0sQ0FBQyxLQUFXO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7O1NBU0s7SUFDRSxXQUFXO1FBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxTQUFTLENBQUMsUUFBbUIsRUFBRSxLQUFjO1FBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksU0FBUyxDQUFDLFFBQW1CLEVBQUUsS0FBYztRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyx3QkFBd0I7SUFDakIsVUFBVSxDQUFDLEtBQW9CO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZ0JBQWdCLENBQUMsRUFBTztRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsaUJBQWlCLENBQUMsRUFBTztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZ0JBQWdCLENBQUUsVUFBbUI7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUNELFlBQVk7SUFFWixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ2pCLHlCQUF5QixDQUFDLEVBQU87UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLFFBQVEsQ0FBQyxPQUF3QjtRQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsdUJBQXVCO1FBQ3ZCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDMUI7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pILElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDMUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNuRDtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRS9GLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBQ0QsWUFBWTtJQUVaLHdCQUF3QjtJQUNSLFFBQVE7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBWSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0I7SUFDUixlQUFlO1FBQzNCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2RCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVoRyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO2FBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsZUFBZTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7U0FDUjtJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsa0JBQWtCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdHO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNSLFdBQVc7UUFDdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGNBQWM7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxDQUFDO2FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQW9CO1FBQ3JDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU8sY0FBYztRQUNsQixnRkFBZ0Y7UUFDaEYsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO29CQUM3QyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7b0JBQ3JCLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQy9CO2lCQUFNO2dCQUNILElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDN0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPO29CQUN2QixDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUMvQjtTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELElBQVksZ0JBQWdCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2VBQ2xFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQVFPLGVBQWUsQ0FBQyxJQUFVO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUTtnQkFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQzNCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUE2QixFQUFFLEVBQUU7WUFDckcsTUFBTSxJQUFJLEdBQW9DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQzVDLE9BQU87YUFDVjtZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUs7cUJBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbkc7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQTZCLEVBQUUsRUFBRTtZQUNyRyxNQUFNLElBQUksR0FBb0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDYixPQUFPO2FBQ1Y7WUFDRCw4REFBOEQ7WUFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQy9CO2lCQUFNO2dCQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEgsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakYsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUY7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzRjtJQUNMLENBQUM7SUFHTyw0QkFBNEIsQ0FBQyxpQkFBZ0Q7UUFDakYsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixLQUFLLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztRQUMvRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUN4QyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDNUQsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzNELGlCQUFpQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXJELGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6RixJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO1lBQzFELE9BQU87U0FDVjtRQUNELElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7WUFDMUQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDL0QsQ0FBQzs7bUhBcDRCUSxzQkFBc0IsNENBbVpuQixTQUFTLGFBQ1QsaUJBQWlCLDJIQUtMLG1CQUFtQiw2QkFDbkIsb0JBQW9CO3VHQTFabkMsc0JBQXNCLGd5QkFScEI7UUFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUNoRixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7S0FDL0UsNkRBcVRhLGlCQUFpQixpRkFHakIsa0NBQWtDLG9GQWVsQyxxQ0FBcUMsZ0ZBR3JDLHlCQUF5QixxRUF6QnRCLHVCQUF1Qiw2RUFVN0IsMEJBQTBCLGlHQUcxQixzQkFBc0IsMkJBQVUsZ0JBQWdCLDhEQUdoRCxpQkFBaUIsaUZBR2pCLGlCQUFpQix1RUNsYWhDLG95REErQkE7MkZEb0VhLHNCQUFzQjtrQkFUbEMsU0FBUztnQ0FDSzt3QkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHdCQUF3QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ2hGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLHdCQUF3QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQy9FLFlBQ1MsaUJBQWlCOzswQkF1WnRCLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFLeEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUN0QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG9CQUFvQjs0Q0F2WXJDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBbUJDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFZQyxlQUFlO3NCQURyQixLQUFLO2dCQVlDLFNBQVM7c0JBRGYsS0FBSztnQkFZQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBWUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFZQyxRQUFRO3NCQURkLEtBQUs7Z0JBYUMsU0FBUztzQkFEZixLQUFLO2dCQWlCVSxNQUFNO3NCQURyQixLQUFLO2dCQWNDLEVBQUU7c0JBRlIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxTQUFTO2dCQWVmLFdBQVc7c0JBRGpCLEtBQUs7Z0JBYUssYUFBYTtzQkFEdkIsS0FBSztnQkFtQkssWUFBWTtzQkFEdEIsS0FBSztnQkFrQkMsY0FBYztzQkFEcEIsS0FBSztnQkFjSyxLQUFLO3NCQURmLEtBQUs7Z0JBcUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBaUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZUMsZUFBZTtzQkFEckIsS0FBSztnQkFLQyxRQUFRO3NCQURkLEtBQUs7Z0JBZUMsV0FBVztzQkFEakIsTUFBTTtnQkFZQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBS0EsZUFBZTtzQkFEckIsZUFBZTt1QkFBQyx1QkFBdUI7Z0JBS2pDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSXZCLGNBQWM7c0JBRHJCLFlBQVk7dUJBQUMsa0NBQWtDO2dCQUl4QyxjQUFjO3NCQURyQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsZ0JBQWdCO3NCQUR2QixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUlyRCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSXBCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSTNDLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQTRHaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBMT0NBTEVfSUQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUGlwZVRyYW5zZm9ybSxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgTmdDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIG5vb3AsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQgfSBmcm9tICcuLi9hbmltYXRpb25zL2ZhZGUnO1xuaW1wb3J0IHtcbiAgICBJRm9ybWF0dGluZ09wdGlvbnMsXG4gICAgSUZvcm1hdHRpbmdWaWV3cyxcbiAgICBJZ3hDYWxlbmRhckNvbXBvbmVudCxcbiAgICBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgaXNEYXRlSW5SYW5nZXNcbn0gZnJvbSAnLi4vY2FsZW5kYXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEZXNjcmlwdG9yLCBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcy9kYXRlUmFuZ2UnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9kYXRlLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgaXNEYXRlLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgUGlja2VySGVhZGVyT3JpZW50YXRpb24gfSBmcm9tICcuLi9kYXRlLWNvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcbmltcG9ydCB7IERhdGVQYXJ0LCBEYXRlUGFydERlbHRhcywgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGUtdGltZS1lZGl0b3IvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBJZ3hJbnB1dERpcmVjdGl2ZSxcbiAgSWd4SW5wdXRHcm91cENvbXBvbmVudCxcbiAgSWd4SW5wdXRHcm91cFR5cGUsXG4gIElneElucHV0U3RhdGUsXG4gIElneExhYmVsRGlyZWN0aXZlLFxuICBJR1hfSU5QVVRfR1JPVVBfVFlQRVxufSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7XG4gIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LFxuICBJZ3hPdmVybGF5U2VydmljZSxcbiAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gIE92ZXJsYXlFdmVudEFyZ3MsXG4gIE92ZXJsYXlTZXR0aW5nc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tbW9uJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIERhdGUgUGlja2VyIGRpc3BsYXlzIGEgcG9wdXAgY2FsZW5kYXIgdGhhdCBsZXRzIHVzZXJzIHNlbGVjdCBhIHNpbmdsZSBkYXRlLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVBpY2tlck1vZHVsZVxuICogQGlneFRoZW1lIGlneC1jYWxlbmRhci10aGVtZSwgaWd4LWljb24tdGhlbWVcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKiBAaWd4S2V5d29yZHMgZGF0ZXBpY2tlciwgY2FsZW5kYXIsIHNjaGVkdWxlLCBkYXRlXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1kYXRlLXBpY2tlciBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J11cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFBpY2tlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLFxuICAgIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB3aGV0aGVyIHRoZSBpbmFjdGl2ZSBkYXRlcyB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQXBwbGllcyB0byBkYXRlcyB0aGF0IGFyZSBvdXQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2hpZGVPdXRzaWRlRGF5c109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuZGF0ZVBpY2tlci5oaWRlT3V0c2lkZURheXM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZU91dHNpZGVEYXlzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2Rpc3BsYXlNb250aHNDb3VudF09XCIyXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG1vbnRoVmlld3NEaXNwbGF5ZWQgPSB0aGlzLmRhdGVQaWNrZXIuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlNb250aHNDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvbiBvbiB0aGUgc2VsZWN0ZWQgb3IgcGFzc2VkIGRhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCIgW2Zvcm1hdHRlcl09XCJmb3JtYXR0ZXJcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWw6IERhdGUpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBoZWFkZXJPcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246IFBpY2tlckhlYWRlck9yaWVudGF0aW9uID0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdG9kYXkgYnV0dG9uJ3MgbGFiZWwuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciB0b2RheUJ1dHRvbkxhYmVsPVwiVG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b2RheUJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNhbmNlbCBidXR0b24ncyBsYWJlbC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgY2FuY2VsQnV0dG9uTGFiZWw9XCJDYW5jZWxcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBpZiB0aGUgY3VycmVudGx5IHNwdW4gZGF0ZSBzZWdtZW50IHNob3VsZCBsb29wIG92ZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBEZWx0YSB2YWx1ZXMgdXNlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGVhY2ggZWRpdG9yIGRhdGUgcGFydCBvbiBzcGluIGFjdGlvbnMuXG4gICAgICogQWxsIHZhbHVlcyBkZWZhdWx0IHRvIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3NwaW5EZWx0YV09XCJ7IGRhdGU6IDUsIG1vbnRoOiAyIH1cIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluRGVsdGE6IFBpY2s8RGF0ZVBhcnREZWx0YXMsICdkYXRlJyB8ICdtb250aCcgfCAneWVhcic+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjb250YWluZXIgdXNlZCBmb3IgdGhlIHBvcHVwIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqICBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2lkXT1cIidpZ3gtZGF0ZS1waWNrZXItMydcIiBjYW5jZWxCdXR0b25MYWJlbD1cImNhbmNlbFwiIHRvZGF5QnV0dG9uTGFiZWw9XCJ0b2RheVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRhdGUtcGlja2VyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvLyNyZWdpb24gY2FsZW5kYXIgbWVtYmVyc1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBmb3JtYXQgdmlld3Mgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBmb3JtYXRWaWV3cyA9IHRoaXMuZGF0ZVBpY2tlci5mb3JtYXRWaWV3cztcbiAgICAgKiAgdGhpcy5kYXRlUGlja2VyLmZvcm1hdFZpZXdzID0ge2RheTpmYWxzZSwgbW9udGg6IGZhbHNlLCB5ZWFyOmZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGlzYWJsZWREYXRlcyA9IHRoaXMuZGF0ZXBpY2tlci5kaXNhYmxlZERhdGVzO1xuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5kaXNhYmxlZERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLl07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHNwZWNpYWwgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3BlY2lhbERhdGVzID0gdGhpcy5kYXRlcGlja2VyLnNwZWNpYWxEYXRlcztcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuc3BlY2lhbERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzcGVjaWFsRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxEYXRlcztcbiAgICB9XG4gICAgcHVibGljIHNldCBzcGVjaWFsRGF0ZXModmFsdWU6IERhdGVSYW5nZURlc2NyaXB0b3JbXSkge1xuICAgICAgICB0aGlzLl9zcGVjaWFsRGF0ZXMgPSB2YWx1ZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5jYWxlbmRhckZvcm1hdCA9IHtkYXk6IFwibnVtZXJpY1wiLCAgbW9udGg6IFwibG9uZ1wiLCB3ZWVrZGF5OiBcImxvbmdcIiwgeWVhcjogXCJudW1lcmljXCJ9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbGVuZGFyRm9ybWF0OiBJRm9ybWF0dGluZ09wdGlvbnM7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdmFsdWUoZGF0ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKGRhdGUpO1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSAhPT0gZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IHRoaXMuX2RhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRlVmFsdWUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgcGlja2VyIHdpbGwgYWNjZXB0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5EYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW21heFZhbHVlXT1cIm1heERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgcGlja2VyJ3MgZGVmYXVsdCB0b2dnbGUgaWNvbi5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5nczogSURhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3M7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBwaWNrZXIncyB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VkIGZvciBgdHdvLXdheWAgYmluZGluZ3MuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFsodmFsdWUpXT1cImRhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgdHlwZXMvc3BpbnMgaW52YWxpZCBkYXRlIGluIHRoZSBkYXRlLXBpY2tlciBlZGl0b3IuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAodmFsaWRhdGlvbkZhaWxlZCk9XCJvblZhbGlkYXRpb25GYWlsZWQoJGV2ZW50KVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGF0ZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFBpY2tlckNsZWFyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBjbGVhckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxJZ3hQaWNrZXJDbGVhckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkYXRlVGltZUVkaXRvcjogSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBsYWJlbERpcmVjdGl2ZTogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgc3ViaGVhZGVyVGVtcGxhdGU6IElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBwaWNrZXJBY3Rpb25zOiBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkcm9wRG93bk92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnB1dEdyb3VwRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0R3JvdXA/LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBkYXRlVmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyRm9ybWF0Vmlld3MoKTogSUZvcm1hdHRpbmdWaWV3cyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kZWZGb3JtYXRWaWV3cywgdGhpcy5mb3JtYXRWaWV3cyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcGlja2VyQ2FsZW5kYXJGb3JtYXQoKTogSUZvcm1hdHRpbmdPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NhbGVuZGFyRm9ybWF0LCB0aGlzLmNhbGVuZGFyRm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBQaXBlVHJhbnNmb3JtID0geyB0cmFuc2Zvcm06IChkYXRlOiBEYXRlKSA9PiB0aGlzLmZvcm1hdHRlcihkYXRlKSB9O1xuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ3VycmVudFJlc291cmNlU3RyaW5ncy5EYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzO1xuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9vdmVybGF5SWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IHN0cmluZztcbiAgICBwcml2YXRlIF90YXJnZXRWaWV3RGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9uZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfc3BlY2lhbERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10gPSBudWxsO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPixcbiAgICAgICAgICAgIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzIHwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3M+XSA9IFtcbiAgICAgICAgICAgIGZpbHRlcih4ID0+IHguaWQgPT09IHRoaXMuX292ZXJsYXlJZCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgIF07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmlucHV0R3JvdXBFbGVtZW50LFxuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWUsXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koe1xuICAgICAgICAgICAgb3BlbkFuaW1hdGlvbjogZmFkZUluLFxuICAgICAgICAgICAgY2xvc2VBbmltYXRpb246IGZhZGVPdXRcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJGb3JtYXQ6IElGb3JtYXR0aW5nT3B0aW9ucyA9IHtcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiAnc2hvcnQnLFxuICAgICAgICB3ZWVrZGF5OiAnc2hvcnQnLFxuICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9O1xuICAgIHByaXZhdGUgX2RlZkZvcm1hdFZpZXdzOiBJRm9ybWF0dGluZ1ZpZXdzID0ge1xuICAgICAgICBkYXk6IGZhbHNlLFxuICAgICAgICBtb250aDogdHJ1ZSxcbiAgICAgICAgeWVhcjogZmFsc2VcbiAgICB9O1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBfbG9jYWxlSWQ6IHN0cmluZyxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJpdmF0ZSBfb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM/OiBJRGlzcGxheURlbnNpdHlPcHRpb25zLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKSBfaW5wdXRHcm91cFR5cGU/OiBJZ3hJbnB1dEdyb3VwVHlwZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCBfbG9jYWxlSWQsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSk7XG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbCAmJiB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIC8vIFJ1biB0aGUgdmFsaWRhdGlvbiB3aXRoIGVtcHR5IG9iamVjdCB0byBjaGVjayBpZiByZXF1aXJlZCBpcyBlbmFibGVkLlxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5yZXF1aXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpY2tlclJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHRoaXMucmVzb3VyY2VTdHJpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuU1BBQ0U6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbihzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaXNEcm9wZG93blxuICAgICAgICAgICAgPyB0aGlzLmRyb3BEb3duT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICA6IHRoaXMuZGlhbG9nT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICAsIHNldHRpbmdzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIHRoaXMuaW5wdXRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIG92ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0aGlzLmlucHV0R3JvdXBFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dGxldCkge1xuICAgICAgICAgICAgb3ZlcmxheVNldHRpbmdzLm91dGxldCA9IHRoaXMub3V0bGV0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlTZXJ2aWNlXG4gICAgICAgICAgICAuYXR0YWNoKElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIG92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLnNob3codGhpcy5fb3ZlcmxheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2dcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci50b2dnbGUoKVwiPlRvZ2dsZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKHNldHRpbmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLmNsb3NlKClcIj5DbG9zZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSBkYXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3MgVXBkYXRlcyB0aGUgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLnNlbGVjdChkYXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGF0ZSBwYXNzZWQgZGF0ZSB0aGF0IGhhcyB0byBiZSBzZXQgdG8gdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdG9kYXkncyBkYXRlIGFuZCBjbG9zZXMgdGhlIHBpY2tlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci5zZWxlY3RUb2RheSgpXCI+U2VsZWN0IFRvZGF5PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogKi9cbiAgICBwdWJsaWMgc2VsZWN0VG9kYXkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgdG9kYXkuc2V0SG91cnMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbnV0ZXMoMCk7XG4gICAgICAgIHRvZGF5LnNldFNlY29uZHMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgdGhpcy5zZWxlY3QodG9kYXkpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlIHBpY2tlcidzIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmNsZWFyKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kZXNlbGVjdERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBhIHNwZWNpZmllZCBgRGF0ZVBhcnRgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBpbmNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBpbmNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuaW5jcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpbmNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5pbmNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZW1lbnQgYSBzcGVjaWZpZWQgYERhdGVQYXJ0YFxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBkZWNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBkZWNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuZGVjcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5kZWNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gdGhpcy5fZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gVmFsaWRhdG9yXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW52YWxpZERhdGUgaGFuZGxpbmdcbiAgICAgICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmRpc2FibGVkRGF0ZXMgJiYgaXNEYXRlSW5SYW5nZXModmFsdWUsIHRoaXMuZGlzYWJsZWREYXRlcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IGRhdGVJc0Rpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIGZhbHNlKSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGw7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ0NvbnRyb2wgPSB0aGlzLl9pbmplY3Rvci5nZXQ8TmdDb250cm9sPihOZ0NvbnRyb2wsIG51bGwpO1xuXG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9DbGljaygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpO1xuXG4gICAgICAgIHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSk7XG4gICAgICAgIHRoaXMuY2xlYXJDb21wb25lbnRzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN1YlRvSWNvbnNDbGlja2VkKHRoaXMuY2xlYXJDb21wb25lbnRzLCAoKSA9PiB0aGlzLmNsZWFyKCkpKTtcblxuICAgICAgICB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncy5leGNsdWRlRnJvbU91dHNpZGVDbGljayA9IFt0aGlzLmlucHV0R3JvdXAuZWxlbWVudC5uYXRpdmVFbGVtZW50XTtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LCAnYmx1cicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fbmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB0aGlzLmxhYmVsRGlyZWN0aXZlLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX292ZXJsYXlJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvQ2xpY2soKSB7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmdldEVkaXRFbGVtZW50KCksICdjbGljaycpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICBpZiAoaXNEYXRlKHZhbHVlKSAmJiBpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRlVmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodmFsdWUpID8gdmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5KCkge1xuICAgICAgICAvLyBCLlAuIDE4IE1heSAyMDIxOiBJZ3hEYXRlUGlja2VyIGRvZXMgbm90IHJlc2V0IGl0cyBzdGF0ZSB1cG9uIHJlc2V0Rm9ybSAjOTUyNlxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkXG4gICAgICAgICAgICAgICAgICAgID8gSWd4SW5wdXRTdGF0ZS5WQUxJRFxuICAgICAgICAgICAgICAgICAgICA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZFxuICAgICAgICAgICAgICAgICAgICA/IElneElucHV0U3RhdGUuSU5JVElBTFxuICAgICAgICAgICAgICAgICAgICA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpXG4gICAgICAgICAgICAmJiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblN0YXR1c0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLl9uZ0NvbnRyb2wuZGlzYWJsZWQ7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVWYWx1ZSAmJiBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKHRoaXMuZGF0ZVZhbHVlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHRoaXMuZGF0ZVZhbHVlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldFNlY29uZHModGhpcy5kYXRlVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKHRoaXMuZGF0ZVZhbHVlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWxpZGF0aW9uRmFpbGVkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgcHJldlZhbHVlOiBldmVudC5vbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmluZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZTogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoZS5jb21wb25lbnRSZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLm9wZW5lZC5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FsZW5kYXI/LmRheXNWaWV3Py5zZWxlY3RlZERhdGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXI/LmRheXNWaWV3Py5mb2N1c0FjdGl2ZURhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Vmlld0RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXRWaWV3RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LmRhdGVzXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKGQgPT4gZC5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSB0aGlzLl90YXJnZXRWaWV3RGF0ZS5nZXRUaW1lKCkpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NpbmcucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKGU6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIG5vdCBmb2N1cyB0aGUgaW5wdXQgaWYgY2xpY2tpbmcgb3V0c2lkZSBpbiBkcm9wZG93biBtb2RlXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRFZGl0RWxlbWVudCgpICYmICEoYXJncy5ldmVudCAmJiB0aGlzLmlzRHJvcGRvd24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2VkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWluTWF4RGF0ZXMoKSB7XG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWluVmFsdWUpID8gdGhpcy5taW5WYWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5taW5WYWx1ZSk7XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMubWF4VmFsdWUpID8gdGhpcy5tYXhWYWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIHJldHVybiB7IG1pblZhbHVlLCBtYXhWYWx1ZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGlzYWJsZWREYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcyA9IHRoaXMuZGlzYWJsZWREYXRlcyA/IFsuLi50aGlzLmRpc2FibGVkRGF0ZXNdIDogW107XG4gICAgICAgIGNvbnN0IHsgbWluVmFsdWUsIG1heFZhbHVlIH0gPSB0aGlzLmdldE1pbk1heERhdGVzKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5CZWZvcmUsIGRhdGVSYW5nZTogW21pblZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLmRpc2FibGVkRGF0ZXMucHVzaCh7IHR5cGU6IERhdGVSYW5nZVR5cGUuQWZ0ZXIsIGRhdGVSYW5nZTogW21heFZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGNvbXBvbmVudEluc3RhbmNlOiBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9jYWxlbmRhciA9IGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyO1xuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5oZWFkZXJPcmllbnRhdGlvbiA9PT0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhhc0hlYWRlciA9ICF0aGlzLmlzRHJvcGRvd247XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdE9wdGlvbnMgPSB0aGlzLnBpY2tlckNhbGVuZGFyRm9ybWF0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5mb3JtYXRWaWV3cyA9IHRoaXMucGlja2VyRm9ybWF0Vmlld3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLndlZWtTdGFydCA9IHRoaXMud2Vla1N0YXJ0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zcGVjaWFsRGF0ZXMgPSB0aGlzLnNwZWNpYWxEYXRlcztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuc3ViaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuaGlkZU91dHNpZGVEYXlzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5tb250aHNWaWV3TnVtYmVyID0gdGhpcy5kaXNwbGF5TW9udGhzQ291bnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNob3dXZWVrTnVtYmVycyA9IHRoaXMuc2hvd1dlZWtOdW1iZXJzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXY6IERhdGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGV2KSk7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWREYXRlcygpO1xuXG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBjYWxlbmRhciB3aWxsIHRocm93IGlmIHRoZSBwaWNrZXIncyB2YWx1ZSBpcyBJbnZhbGlkRGF0ZSAjOTIwOFxuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmFsdWUgPSB0aGlzLmRhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldENhbGVuZGFyVmlld0RhdGUoKTtcblxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSB0aGlzLmNhbmNlbEJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy50b2RheUJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5waWNrZXJBY3Rpb25zID0gdGhpcy5waWNrZXJBY3Rpb25zO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UudG9kYXlTZWxlY3Rpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZWxlY3RUb2RheSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhbGVuZGFyVmlld0RhdGUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluVmFsdWUsIG1heFZhbHVlIH0gPSB0aGlzLmdldE1pbk1heERhdGVzKCk7XG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkgPyB0aGlzLmRhdGVWYWx1ZSA6IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZShkYXRlVmFsdWUsIG1pblZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSB0aGlzLl90YXJnZXRWaWV3RGF0ZSA9IG1pblZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShkYXRlVmFsdWUsIG1heFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSB0aGlzLl90YXJnZXRWaWV3RGF0ZSA9IG1heFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSBkYXRlVmFsdWU7XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiIFt0eXBlXT1cInRoaXMudHlwZVwiIFtzdXBwcmVzc0lucHV0QXV0b2ZvY3VzXT1cInRydWVcIj5cbiAgICA8aWd4LXByZWZpeCAqbmdJZj1cIiF0aGlzLnRvZ2dsZUNvbXBvbmVudHMubGVuZ3RoXCIgKGNsaWNrKT1cInRoaXMudG9nZ2xlKClcIj5cbiAgICAgICAgPGlneC1pY29uIFt0aXRsZV09XCJ0aGlzLnZhbHVlXG4gICAgICAgICAgICA/IHBpY2tlclJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9waWNrZXJfY2hhbmdlX2RhdGVcbiAgICAgICAgICAgIDogcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaG9vc2VfZGF0ZVwiPnRvZGF5PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1wcmVmaXg+XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJpZ3gtZGF0ZS1waWNrZXJfX2lucHV0LWRhdGVcIiBbZGlzcGxheVZhbHVlUGlwZV09XCJ0aGlzLmZvcm1hdHRlciA/IGRpc3BsYXlWYWx1ZSA6IG51bGxcIiBpZ3hJbnB1dFxuICAgICAgICBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwidGhpcy5pbnB1dEZvcm1hdFwiIFtkaXNwbGF5Rm9ybWF0XT1cInRoaXMuZGlzcGxheUZvcm1hdFwiXG4gICAgICAgIFttaW5WYWx1ZV09XCJ0aGlzLm1pblZhbHVlXCIgW21heFZhbHVlXT1cInRoaXMubWF4VmFsdWVcIiBbc3BpbkRlbHRhXT1cInRoaXMuc3BpbkRlbHRhXCIgW3NwaW5Mb29wXT1cInRoaXMuc3Bpbkxvb3BcIiBcbiAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuZGlzYWJsZWRcIiBbcGxhY2Vob2xkZXJdPVwidGhpcy5wbGFjZWhvbGRlclwiIFtyZWFkb25seV09XCIhdGhpcy5pc0Ryb3Bkb3duIHx8IHRoaXMucmVhZE9ubHlcIlxuICAgICAgICBbaWd4VGV4dFNlbGVjdGlvbl09XCJ0aGlzLmlzRHJvcGRvd24gJiYgIXRoaXMucmVhZE9ubHlcIiBbbG9jYWxlXT1cInRoaXMubG9jYWxlXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5jb2xsYXBzZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGhpcy5sYWJlbD8uaWRcIiBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCIgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCIgcm9sZT1cImNvbWJvYm94XCI+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiF0aGlzLmNsZWFyQ29tcG9uZW50cy5sZW5ndGggJiYgdGhpcy52YWx1ZVwiIChjbGljayk9XCJ0aGlzLmNsZWFyKClcIj5cbiAgICAgICAgPGlneC1pY29uPmNsZWFyPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWhpbnQsW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG4iXX0=
@@ -120,14 +120,12 @@ export class IgxColumnGroupComponent extends IgxColumnComponent {
120
120
  get selectable() {
121
121
  return this.children && this.children.some(child => child.selectable);
122
122
  }
123
+ /**
124
+ * @hidden
125
+ */
123
126
  set selectable(value) { }
124
127
  /**
125
- * Returns a reference to the body template.
126
- * ```typescript
127
- * let bodyTemplate = this.columnGroup.bodyTemplate;
128
- * ```
129
- *
130
- * @memberof IgxColumnGroupComponent
128
+ * @hidden
131
129
  */
132
130
  get bodyTemplate() {
133
131
  return this._bodyTemplate;
@@ -137,12 +135,7 @@ export class IgxColumnGroupComponent extends IgxColumnComponent {
137
135
  */
138
136
  set bodyTemplate(template) { }
139
137
  /**
140
- * Returns a reference to the inline editor template.
141
- * ```typescript
142
- * let inlineEditorTemplate = this.columnGroup.inlineEditorTemplate;
143
- * ```
144
- *
145
- * @memberof IgxColumnGroupComponent
138
+ * @hidden
146
139
  */
147
140
  get inlineEditorTemplate() {
148
141
  return this._inlineEditorTemplate;
@@ -369,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
369
362
  }], hidden: [{
370
363
  type: Input
371
364
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBVTNDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxrQkFBa0I7SUFOL0Q7O1FBU29CLGFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBc0IsQ0FBQztRQTBFL0Q7Ozs7Ozs7Ozs7O1dBV0c7UUFFYSxlQUFVLEdBQUcsSUFBSSxDQUFDO0tBaVJyQztJQXRXRzs7Ozs7Ozs7T0FRRztJQUNILElBQ29CLFdBQVcsQ0FBQyxLQUFjO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdB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QUFFLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7b0hBMVdRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLCtQQUpyQixDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLG1EQU1uRixrQkFBa0IsUUFBVSxrQkFBa0Isb0RBSnJELEVBQUU7MkZBRUgsdUJBQXVCO2tCQU5uQyxTQUFTO21CQUFDO29CQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7b0JBQ3BHLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzhCQUltQixRQUFRO3NCQUR2QixlQUFlO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQWE3QyxXQUFXO3NCQUQ5QixLQUFLO2dCQTRCYyxRQUFRO3NCQUQzQixLQUFLO2dCQXdCYyxTQUFTO3NCQUQ1QixLQUFLO2dCQTBCVSxVQUFVO3NCQUR6QixLQUFLO2dCQVdjLE9BQU87c0JBRDFCLEtBQUs7Z0JBa0RVLDRCQUE0QjtzQkFEM0MsS0FBSztnQkFzQ2MsTUFBTTtzQkFEekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIElucHV0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQ2VsbFR5cGUsIElneENvbHVtblRlbXBsYXRlQ29udGV4dCB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hDb2x1bW5Db21wb25lbnQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneENvbHVtbkdyb3VwQ29tcG9uZW50KSB9XSxcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4tZ3JvdXAnLFxuICAgIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCBleHRlbmRzIElneENvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hDb2x1bW5Db21wb25lbnQsIHsgcmVhZDogSWd4Q29sdW1uQ29tcG9uZW50IH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGNoaWxkcmVuID0gbmV3IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaWYgdGhlIGNvbHVtbiBncm91cCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFtjb2xsYXBzaWJsZV0gPSBcInRydWVcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgY29sbGFwc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29sbGFwc2libGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb2xsYXBzaWJsZUNoYW5nZS5lbWl0KHRoaXMuX2NvbGxhcHNpYmxlKTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gJiYgIXRoaXMuaGlkZGVuKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNvbGxhcHNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2libGUgJiYgdGhpcy5jaGVja0NvbGxhcHNpYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgd2hldGhlciB0aGUgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkIGluaXRpYWxseS5cbiAgICAgKiBBcHBsaWVkIG9ubHkgaWYgdGhlIGNvbGxhcHNpYmxlIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWBcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgY29uc3Qgc3RhdGUgPSBmYWxzZVxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbKGV4cGFuZCldID0gXCJzdGF0ZVwiPjwvaWd4LWNvbHVtbi1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5fZXhwYW5kZWQpO1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGlkZGVuICYmIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kQ29sbGFwc2VTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYHN1bW1hcmllc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFN1bW1hcmllcyA9IHRoaXMuY29sdW1uR3JvdXAuc3VtbWFyaWVzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcmllcygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VtbWFyaWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYHN1bW1hcmllc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc3VtbWFyaWVzID0gSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcmllcyhjbGFzc1JlZjogYW55KSB7IH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGBzZWFyY2hhYmxlYC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzU2VhcmNoYWJsZSA9ICB0aGlzLmNvbHVtbkdyb3VwLnNlYXJjaGFibGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbc2VhcmNoYWJsZV0gPSBcImZhbHNlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2VhcmNoYWJsZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIGdyb3VwIGBmaWx0ZXJzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwRmlsdGVycyA9IHRoaXMuY29sdW1uR3JvdXAuZmlsdGVycztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBmaWx0ZXJzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYGZpbHRlcnNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkdyb3VwLmZpbHRlcnMgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBmaWx0ZXJzKGNsYXNzUmVmOiBhbnkpIHsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIHNlbGVjdGFibGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwU2VsZWN0YWJsZSA9IHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0YWJsZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4gJiYgdGhpcy5jaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnNlbGVjdGFibGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGJvZHkgdGVtcGxhdGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBib2R5VGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmJvZHlUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYm9keVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9keVRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBib2R5VGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBkZWZpbmUgYSBjdXN0b20gdGVtcGxhdGUgZm9yIGV4cGFuZC9jb2xsYXBzZSBpbmRpY2F0b3JcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneENvbHVtblRlbXBsYXRlQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmxpbmUgZWRpdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmlubGluZUVkaXRvclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZUVkaXRvclRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG4gICAgLyoqXG4gICAgICogV2lsbCByZXR1cm4gZW1wdHkgYXJyYXkuIFVzZSB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKVtpbmRleF0uY2VsbHMgdG8gZ2V0IHRoZSBjZWxscyBmb3IgYSBjb2x1bW4gdGhhdCBpcyBwYXJ0IG9mIHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5DZWxscyA9IHRoaXMuY29sdW1uR3JvdXAuY2VsbHM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxDaGlsZHJlbi5ldmVyeShjID0+IGMuaGlkZGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4gW2hpZGRlbl0gPSBcInRydWVcIj48L2lneC1jb2x1bW4+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbiBbKGhpZGRlbildID0gXCJtb2RlbC5jb2x1bW5zWzBdLmlzSGlkZGVuXCI+PC9pZ3gtY29sdW1uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBoaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZGVuQ2hhbmdlLmVtaXQodGhpcy5faGlkZGVuKTtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiB8fCAhdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHRoaXMuX2hpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmhpZGRlbiA9IGZhbHNlOyByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGMuaGlkZGVuID0gdGhpcy5leHBhbmRlZCA/IGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgOiAhYy52aXNpYmxlV2hlbkNvbGxhcHNlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIHNlbGVjdGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTZWxlY3RlZCA9IHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlQ2hpbGRyZW4gPSB0aGlzLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmNvbHVtbkdyb3VwICYmIGMuc2VsZWN0YWJsZSAmJiAhYy5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgc2VsZWN0YWJsZUNoaWxkcmVuLmV2ZXJ5KGMgPT4gYy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0L2Rlc2VsZWN0IHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgYy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEBDb250ZW50Q2hpbGRyZW4gd2l0aCBkZXNjZW5kYW50cyBzdGlsbCByZXR1cm5zIHRoZSBgcGFyZW50YFxuICAgICAgICAgICAgY29tcG9uZW50IGluIHRoZSBxdWVyeSBsaXN0LlxuICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5oZWFkVGVtcGxhdGUgJiYgdGhpcy5oZWFkVGVtcGxhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZFRlbXBsYXRlLnRvQXJyYXkoKVswXS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZUluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLmNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VycmVudGx5IG9ubHkgaXZ5IGZpeGVzIHRoZSBpc3N1ZSwgd2UgaGF2ZSB0byBzbGljZSBvbmx5IGlmIHRoZSBmaXJzdCBjaGlsZCBpcyBncm91cFxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5maXJzdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5yZXNldCh0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoaWxkcmVuLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2UuZm9yRWFjaCh4ID0+IHgucGFyZW50ID0gdGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGRyZW4gY29sdW1ucyBjb2xsZWN0aW9uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1ucyA9ICB0aGlzLmNvbHVtbkdyb3VwLmFsbENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxDaGlsZHJlbigpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuKHRoaXMuY2hpbGRyZW4udG9BcnJheSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY29sdW1uIGlzIGEgYENvbHVtbkdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW5Hcm91cC5jb2x1bW5Hcm91cFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5Hcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNvbHVtbiBpcyBhIGBDb2x1bW5MYXlvdXRgIGZvciBtdWx0aS1yb3cgbGF5b3V0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5MYXlvdXQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwV2lkdGggPSB0aGlzLmNvbHVtbkdyb3VwLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB3aWR0aCgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBgJHt0aGlzLmNoaWxkcmVuLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludCh2YWwuY2FsY1dpZHRoLCAxMCk7XG4gICAgICAgIH0sIDApfWA7XG4gICAgICAgIHJldHVybiB3aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB3aWR0aCh2YWwpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYXBwbHlTZWxlY3RhYmxlQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhcHBseVNlbGVjdGFibGVDbGFzcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgIGMuYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMsIGJhc2VkIG9uIGluZGV4ZXMgb2YgZmlyc3QgYW5kIGxhc3QgdmlzaWJsZSBjb2x1bW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjYWxjQ2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNoaWxkcmVuID0gdGhpcy5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnZpc2libGVJbmRleCA+IC0xKTtcbiAgICAgICAgY29uc3QgZmkgPSB2aXNpYmxlQ2hpbGRyZW5bMF0udmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBsaSA9IHZpc2libGVDaGlsZHJlblt2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoIC0gMV0udmlzaWJsZUluZGV4O1xuICAgICAgICByZXR1cm4gbGkgLSBmaSArIDE7XG4gICAgfVxufVxuIl19
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBVTNDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxrQkFBa0I7SUFOL0Q7O1FBU29CLGFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBc0IsQ0FBQztRQTBFL0Q7Ozs7Ozs7Ozs7O1dBV0c7UUFFYSxlQUFVLEdBQUcsSUFBSSxDQUFDO0tBMFFyQztJQS9WRzs7Ozs7Ozs7T0FRRztJQUNILElBQ29CLFdBQVcsQ0FBQyxLQUFjO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdB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RUFBRSxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7O29IQW5XUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwrUEFKckIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxtREFNbkYsa0JBQWtCLFFBQVUsa0JBQWtCLG9EQUpyRCxFQUFFOzJGQUVILHVCQUF1QjtrQkFObkMsU0FBUzttQkFBQztvQkFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxDQUFDO29CQUNwRyxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsRUFBRTtpQkFDZjs4QkFJbUIsUUFBUTtzQkFEdkIsZUFBZTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtnQkFhN0MsV0FBVztzQkFEOUIsS0FBSztnQkE0QmMsUUFBUTtzQkFEM0IsS0FBSztnQkF3QmMsU0FBUztzQkFENUIsS0FBSztnQkEwQlUsVUFBVTtzQkFEekIsS0FBSztnQkFXYyxPQUFPO3NCQUQxQixLQUFLO2dCQWdEVSw0QkFBNEI7c0JBRDNDLEtBQUs7Z0JBaUNjLE1BQU07c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IENlbGxUeXBlLCBJZ3hDb2x1bW5UZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Q29sdW1uQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCkgfV0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtY29sdW1uLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBJZ3hDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Q29sdW1uQ29tcG9uZW50LCB7IHJlYWQ6IElneENvbHVtbkNvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBjaGlsZHJlbiA9IG5ldyBRdWVyeUxpc3Q8SWd4Q29sdW1uQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGlmIHRoZSBjb2x1bW4gZ3JvdXAgaXMgY29sbGFwc2libGUuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbY29sbGFwc2libGVdID0gXCJ0cnVlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGNvbGxhcHNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29sbGFwc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9jb2xsYXBzaWJsZSk7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICYmICF0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5oaWRkZW4gPSBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2xsYXBzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlICYmIHRoaXMuY2hlY2tDb2xsYXBzaWJsZVN0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHdoZXRoZXIgdGhlIGdyb3VwIGlzIGV4cGFuZGVkIG9yIGNvbGxhcHNlZCBpbml0aWFsbHkuXG4gICAgICogQXBwbGllZCBvbmx5IGlmIHRoZSBjb2xsYXBzaWJsZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIGNvbnN0IHN0YXRlID0gZmFsc2VcbiAgICAgKiAgPGlneC1jb2x1bW4tZ3JvdXAgWyhleHBhbmQpXSA9IFwic3RhdGVcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuX2V4cGFuZGVkKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhpZGRlbiAmJiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIGdyb3VwIGBzdW1tYXJpZXNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBTdW1tYXJpZXMgPSB0aGlzLmNvbHVtbkdyb3VwLnN1bW1hcmllcztcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzdW1tYXJpZXMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1bW1hcmllcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGBzdW1tYXJpZXNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkdyb3VwLnN1bW1hcmllcyA9IElneE51bWJlclN1bW1hcnlPcGVyYW5kO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzdW1tYXJpZXMoY2xhc3NSZWY6IGFueSkgeyB9XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNvbHVtbiBncm91cCBpcyBgc2VhcmNoYWJsZWAuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlYXJjaGFibGUgPSAgdGhpcy5jb2x1bW5Hcm91cC5zZWFyY2hhYmxlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jb2x1bW4tZ3JvdXAgW3NlYXJjaGFibGVdID0gXCJmYWxzZVwiPjwvaWd4LWNvbHVtbi1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNlYXJjaGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBncm91cCBgZmlsdGVyc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cEZpbHRlcnMgPSB0aGlzLmNvbHVtbkdyb3VwLmZpbHRlcnM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZmlsdGVycygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGBmaWx0ZXJzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb2x1bW5Hcm91cC5maWx0ZXJzID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgZmlsdGVycyhjbGFzc1JlZjogYW55KSB7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIGNvbHVtbiBncm91cCBpcyBzZWxlY3RhYmxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFNlbGVjdGFibGUgPSB0aGlzLmNvbHVtbkdyb3VwLnNlbGVjdGFibGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuICYmIHRoaXMuY2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5zZWxlY3RhYmxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYm9keVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9keVRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBib2R5VGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBkZWZpbmUgYSBjdXN0b20gdGVtcGxhdGUgZm9yIGV4cGFuZC9jb2xsYXBzZSBpbmRpY2F0b3JcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneENvbHVtblRlbXBsYXRlQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZUVkaXRvclRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG4gICAgLyoqXG4gICAgICogV2lsbCByZXR1cm4gZW1wdHkgYXJyYXkuIFVzZSB0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKVtpbmRleF0uY2VsbHMgdG8gZ2V0IHRoZSBjZWxscyBmb3IgYSBjb2x1bW4gdGhhdCBpcyBwYXJ0IG9mIHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5DZWxscyA9IHRoaXMuY29sdW1uR3JvdXAuY2VsbHM7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNlbGxzKCk6IENlbGxUeXBlW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxDaGlsZHJlbi5ldmVyeShjID0+IGMuaGlkZGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4gW2hpZGRlbl0gPSBcInRydWVcIj48L2lneC1jb2x1bW4+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbiBbKGhpZGRlbildID0gXCJtb2RlbC5jb2x1bW5zWzBdLmlzSGlkZGVuXCI+PC9pZ3gtY29sdW1uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBoaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZGVuQ2hhbmdlLmVtaXQodGhpcy5faGlkZGVuKTtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiB8fCAhdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHRoaXMuX2hpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmhpZGRlbiA9IGZhbHNlOyByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGMuaGlkZGVuID0gdGhpcy5leHBhbmRlZCA/IGMudmlzaWJsZVdoZW5Db2xsYXBzZWQgOiAhYy52aXNpYmxlV2hlbkNvbGxhcHNlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUgY29sdW1uIGdyb3VwIGlzIHNlbGVjdGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTZWxlY3RlZCA9IHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlQ2hpbGRyZW4gPSB0aGlzLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmNvbHVtbkdyb3VwICYmIGMuc2VsZWN0YWJsZSAmJiAhYy5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgc2VsZWN0YWJsZUNoaWxkcmVuLmV2ZXJ5KGMgPT4gYy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0L2Rlc2VsZWN0IHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICAgICAgYy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEBDb250ZW50Q2hpbGRyZW4gd2l0aCBkZXNjZW5kYW50cyBzdGlsbCByZXR1cm5zIHRoZSBgcGFyZW50YFxuICAgICAgICAgICAgY29tcG9uZW50IGluIHRoZSBxdWVyeSBsaXN0LlxuICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5oZWFkVGVtcGxhdGUgJiYgdGhpcy5oZWFkVGVtcGxhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZFRlbXBsYXRlLnRvQXJyYXkoKVswXS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZUluZGljYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLmNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VycmVudGx5IG9ubHkgaXZ5IGZpeGVzIHRoZSBpc3N1ZSwgd2UgaGF2ZSB0byBzbGljZSBvbmx5IGlmIHRoZSBmaXJzdCBjaGlsZCBpcyBncm91cFxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5maXJzdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5yZXNldCh0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoaWxkcmVuLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogUXVlcnlMaXN0PElneENvbHVtbkNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2UuZm9yRWFjaCh4ID0+IHgucGFyZW50ID0gdGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGRyZW4gY29sdW1ucyBjb2xsZWN0aW9uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1ucyA9ICB0aGlzLmNvbHVtbkdyb3VwLmFsbENoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxDaGlsZHJlbigpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuKHRoaXMuY2hpbGRyZW4udG9BcnJheSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY29sdW1uIGlzIGEgYENvbHVtbkdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzQ29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW5Hcm91cC5jb2x1bW5Hcm91cFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5Hcm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNvbHVtbiBpcyBhIGBDb2x1bW5MYXlvdXRgIGZvciBtdWx0aS1yb3cgbGF5b3V0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXAgPSAgdGhpcy5jb2x1bW4uY29sdW1uR3JvdXA7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5MYXlvdXQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBncm91cC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwV2lkdGggPSB0aGlzLmNvbHVtbkdyb3VwLndpZHRoO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB3aWR0aCgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBgJHt0aGlzLmNoaWxkcmVuLnJlZHVjZSgoYWNjLCB2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludCh2YWwuY2FsY1dpZHRoLCAxMCk7XG4gICAgICAgIH0sIDApfWA7XG4gICAgICAgIHJldHVybiB3aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB3aWR0aCh2YWwpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYXBwbHlTZWxlY3RhYmxlQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhcHBseVNlbGVjdGFibGVDbGFzcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGFibGVDbGFzcyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgIGMuYXBwbHlTZWxlY3RhYmxlQ2xhc3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMsIGJhc2VkIG9uIGluZGV4ZXMgb2YgZmlyc3QgYW5kIGxhc3QgdmlzaWJsZSBjb2x1bW5zLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjYWxjQ2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNoaWxkcmVuID0gdGhpcy5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnZpc2libGVJbmRleCA+IC0xKTtcbiAgICAgICAgY29uc3QgZmkgPSB2aXNpYmxlQ2hpbGRyZW5bMF0udmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBsaSA9IHZpc2libGVDaGlsZHJlblt2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoIC0gMV0udmlzaWJsZUluZGV4O1xuICAgICAgICByZXR1cm4gbGkgLSBmaSArIDE7XG4gICAgfVxufVxuIl19