@tsi-developpement/tsi-shared-ui 1.11.4 → 1.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/esm2022/lib/consts/tsi-consts.mjs +3 -1
  2. package/esm2022/lib/models/index.mjs +2 -1
  3. package/esm2022/lib/models/settings/devise-detail.mjs +3 -0
  4. package/esm2022/lib/models/settings/devise.mjs +4 -1
  5. package/esm2022/lib/services/fichier/upload-generic-fichier.service.mjs +18 -25
  6. package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +1 -1
  7. package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +13 -5
  8. package/esm2022/lib/tsi-components/tsi-action-erp-list/tsi-action-erp-list.component.mjs +1 -1
  9. package/esm2022/lib/tsi-components/tsi-dynamic-form/dynamic-form-list/dynamic-form-list.component.mjs +1 -1
  10. package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +3 -3
  11. package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +8 -5
  12. package/esm2022/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.mjs +1 -2
  13. package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +1 -1
  14. package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +11 -14
  15. package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +5 -3
  16. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +63 -53
  17. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
  18. package/lib/consts/app-providers.d.ts +1 -1
  19. package/lib/consts/tsi-consts.d.ts +2 -0
  20. package/lib/models/index.d.ts +1 -0
  21. package/lib/models/settings/devise-detail.d.ts +7 -0
  22. package/lib/models/settings/devise.d.ts +3 -0
  23. package/lib/services/fichier/upload-generic-fichier.service.d.ts +3 -3
  24. package/lib/tsi-components/reporting/reporting.component.d.ts +3 -1
  25. package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +2 -1
  26. package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +4 -3
  27. package/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.d.ts +2 -0
  28. package/package.json +1 -1
@@ -188,6 +188,7 @@ export class TsiGenericCrudComponent {
188
188
  this.showGlobalSearch = true;
189
189
  this.showExportButton = true;
190
190
  this.showReporting = true;
191
+ this.extraData = {};
191
192
  //#endregion
192
193
  //#region Outputs
193
194
  this.selectedItemsChange = new EventEmitter();
@@ -420,7 +421,7 @@ export class TsiGenericCrudComponent {
420
421
  }
421
422
  else if (event.field == 'upload') {
422
423
  const conf = {
423
- data: {},
424
+ data: { attachedToId: itemKey, attachedToBusinessClass: this.businessClass },
424
425
  styleClass: '',
425
426
  width: this.modalSize.width,
426
427
  height: this.modalSize.height,
@@ -713,7 +714,7 @@ export class TsiGenericCrudComponent {
713
714
  let conf;
714
715
  if (this.modalSize != null && this.modalSize != undefined) {
715
716
  conf = {
716
- data: { id: itemKey, mode: mode, customData: data, entityInfo: this.entityInfo },
717
+ data: { id: itemKey, mode: mode, customData: data, entityInfo: this.entityInfo, ...this.extraData },
717
718
  styleClass: '',
718
719
  width: this.modalSize.width,
719
720
  height: this.modalSize.height,
@@ -725,7 +726,7 @@ export class TsiGenericCrudComponent {
725
726
  }
726
727
  else {
727
728
  conf = {
728
- data: { id: itemKey, mode: mode, customData: data },
729
+ data: { id: itemKey, mode: mode, customData: data, ...this.extraData },
729
730
  maximizable: true,
730
731
  };
731
732
  }
@@ -938,7 +939,7 @@ export class TsiGenericCrudComponent {
938
939
  return null;
939
940
  }
940
941
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericCrudComponent, deps: [{ token: i1.TsiNotificationService }, { token: i2.MessageService }, { token: i3.TsiModalService }, { token: i0.ChangeDetectorRef }, { token: i4.LocalizePipe }, { token: i5.DialogDataService }, { token: i6.UploadGenericFichierService }, { token: i7.RecordInfoPopupService }, { token: i8.WorkflowConfigurationService }, { token: i9.EntityConfigurationService }, { token: i10.NoteService }, { token: i0.EnvironmentInjector }, { token: i11.DiscriminatorService }, { token: i12.ColonnePersonnaliseeService }], target: i0.ɵɵFactoryTarget.Component }); }
941
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: { entityInfo: "entityInfo", modalData: "modalData", columns: "columns", gridConfiguration: "gridConfiguration", cudComponent: "cudComponent", crudService: "crudService", header: "header", modalSize: "modalSize", descriminatorValue: "descriminatorValue", presentationSettings: "presentationSettings", preventAddEvent: "preventAddEvent", formEndpoint: "formEndpoint", formName: "formName", isSearchButtonDisabled: "isSearchButtonDisabled", showHeaderFilters: "showHeaderFilters", showEditButton: "showEditButton", showDeleteButton: "showDeleteButton", showAddButton: "showAddButton", showConsultButton: "showConsultButton", showUploadButton: "showUploadButton", showNoteButton: "showNoteButton", showDownloadButton: "showDownloadButton", showInfoButton: "showInfoButton", showDuplicateButton: "showDuplicateButton", showFormButton: "showFormButton", showCalenderView: "showCalenderView", showCardView: "showCardView", showImportFromOutlookButton: "showImportFromOutlookButton", showKanbanView: "showKanbanView", showKanbanViewOfWorkFlowEtat: "showKanbanViewOfWorkFlowEtat", showSearchField: "showSearchField", searchFields: "searchFields", calenderSchema: "calenderSchema", showActionButton: "showActionButton", sizingMode: "sizingMode", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", id: "id", businessClass: "businessClass", searchOnInit: "searchOnInit", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showReporting: "showReporting" }, outputs: { selectedItemsChange: "selectedItemsChange", searchFieldsValueChanged: "searchFieldsValueChanged", buttonColumnClicked: "buttonColumnClicked", onImportFromOutlookClicked: "onImportFromOutlookClicked" }, host: { listeners: { "window:keydown": "handleKeyDown($event)" } }, providers: [TsiNotificationService], viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [groupBy]=\"groupBy\"\r\n [cudComponent]=\"cudComponent\"\r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n [showInfoButton]=\"true\"\r\n [showDownloadButton]=\"true\"\r\n [showUploadButton]=\"true\"\r\n [showNoteButton]=\"true\"\r\n [showActionButton]=\"true\"\r\n [sizingMode]=\"sizingMode\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i15.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "component", type: i16.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "showInfoButton", "showDownloadButton", "showUploadButton", "showNoteButton", "showActionButton", "sizingMode", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "groupBy", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i17.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i18.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "showManageWorkflowButton", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode", "openWorkflow"] }, { kind: "directive", type: i19.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
942
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: { entityInfo: "entityInfo", modalData: "modalData", columns: "columns", gridConfiguration: "gridConfiguration", cudComponent: "cudComponent", crudService: "crudService", header: "header", modalSize: "modalSize", descriminatorValue: "descriminatorValue", presentationSettings: "presentationSettings", preventAddEvent: "preventAddEvent", formEndpoint: "formEndpoint", formName: "formName", isSearchButtonDisabled: "isSearchButtonDisabled", showHeaderFilters: "showHeaderFilters", showEditButton: "showEditButton", showDeleteButton: "showDeleteButton", showAddButton: "showAddButton", showConsultButton: "showConsultButton", showUploadButton: "showUploadButton", showNoteButton: "showNoteButton", showDownloadButton: "showDownloadButton", showInfoButton: "showInfoButton", showDuplicateButton: "showDuplicateButton", showFormButton: "showFormButton", showCalenderView: "showCalenderView", showCardView: "showCardView", showImportFromOutlookButton: "showImportFromOutlookButton", showKanbanView: "showKanbanView", showKanbanViewOfWorkFlowEtat: "showKanbanViewOfWorkFlowEtat", showSearchField: "showSearchField", searchFields: "searchFields", calenderSchema: "calenderSchema", showActionButton: "showActionButton", sizingMode: "sizingMode", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", id: "id", businessClass: "businessClass", searchOnInit: "searchOnInit", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showReporting: "showReporting", extraData: "extraData" }, outputs: { selectedItemsChange: "selectedItemsChange", searchFieldsValueChanged: "searchFieldsValueChanged", buttonColumnClicked: "buttonColumnClicked", onImportFromOutlookClicked: "onImportFromOutlookClicked" }, host: { listeners: { "window:keydown": "handleKeyDown($event)" } }, providers: [TsiNotificationService], viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [groupBy]=\"groupBy\"\r\n [cudComponent]=\"cudComponent\"\r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n [showInfoButton]=\"true\"\r\n [showDownloadButton]=\"true\"\r\n [showUploadButton]=\"true\"\r\n [showNoteButton]=\"true\"\r\n [showActionButton]=\"true\"\r\n [sizingMode]=\"sizingMode\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i15.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "component", type: i16.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "showInfoButton", "showDownloadButton", "showUploadButton", "showNoteButton", "showActionButton", "sizingMode", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "groupBy", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i17.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i18.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "mode", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "showManageWorkflowButton", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode", "openWorkflow"] }, { kind: "directive", type: i19.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
942
943
  }
943
944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericCrudComponent, decorators: [{
944
945
  type: Component,
@@ -1036,6 +1037,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1036
1037
  type: Input
1037
1038
  }], showReporting: [{
1038
1039
  type: Input
1040
+ }], extraData: [{
1041
+ type: Input
1039
1042
  }], selectedItemsChange: [{
1040
1043
  type: Output
1041
1044
  }], searchFieldsValueChanged: [{
@@ -1048,4 +1051,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1048
1051
  type: HostListener,
1049
1052
  args: ['window:keydown', ['$event']]
1050
1053
  }] } });
1051
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsNkJBQTZCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFleEksT0FBTyxFQUFFLHNC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QXpCLEtBQUs7Z0JBbUJPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBWUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkErd0JQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIERpc3BsYXlUeXBlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEFjdGlvblBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2VudW1zL2FjdGlvbi1wbGFjZW1lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zZWxlY3Rpb24tbW9kZSc7XHJcbmltcG9ydCB7IEdyaWRTaXppbmdNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zaXppbmctbW9kZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgdG9Eb3ROZXRDYW1lbENhc2UgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvY29tbW9uLmZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IG9wZW5BY3Rpb25MaXN0LCBvcGVuRHluYW1pY0Zvcm1Nb2RhbENvbXBvbmVudCwgb3Blbk1vZGFsVXBsb2FkR3JpZCwgb3Blbk5vdGVzTGlzdCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQsIEdyaWRDb2x1bW4sIElDdXN0b21Db2x1bW5TY2hlbWEsIElHcmlkQ29uZmlndXJhdGlvbiwgSU1vZGFsU2l6ZSwgSVBhZ2UsIElQYWdlZFJlcXVlc3QsIElQYWdlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgb2NjdXJlbmNlSW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IEV2ZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbi9ldmVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgTm90ZXNHcm91cGVkQnlVc2VyUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvTm90ZXMvTm90ZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJlc2VudGF0aW9uLXNldHRpbmdzL3ByZXNlbnRhdGlvbi1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVcGxvYWRHZW5lcmljRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL3VwbG9hZC1nZW5lcmljLWZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Ob3RlL05vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktZm9ybS1tb2RhbC1mb290ZXIvdHNpLWZvcm0tbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1ub3Rlcy1hdmVydGlyL3RzaS1ub3Rlcy1hdmVydGlyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1wb3B1cC10ZXh0LXZpZXdlci90c2ktcG9wdXAtdGV4dC12aWV3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2Rpc2NyaW1pbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IERpc2NyaW1pbmF0b3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQvZGlzY3JpbWluYXRvci1yZXNwb25zZSc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUnO1xyXG5cclxuLyoqXHJcbiAqIGBDb2xvbm5lUGVyc29ubmFsaXNlZS5UeXBlYCAodGhlIGBUeXBlQ29sb25uZUVudW1gIHZhbHVlcykgLT4gZ3JpZCBkaXNwbGF5IHR5cGUuIFNldHRpbmcgYSByZWFsXHJcbiAqIGRpc3BsYXkgdHlwZSBpcyB3aGF0IGxldHMgdGhlIGdyaWQgZGVyaXZlIGBmaWx0ZXJJbnB1dFR5cGVgLCBgaXNOdW1lcmljYCBhbmQgYG51bU9mRGVjaW1hbGAgb24gaXRzXHJcbiAqIG93biBhbmQgcmVuZGVyIHRoZSBjZWxsIGxpa2UgYSBuYXRpdmUgY29sdW1uLlxyXG4gKlxyXG4gKiBTaGFyZWQgYnkgYm90aCBtZXRhZGF0YSBzb3VyY2VzOiB0aGUgZ3JpZCByZXNwb25zZSBub3cgcmVwb3J0cyB0aGlzIHNhbWUgcmF3IHZvY2FidWxhcnksIHNvIHRoZXJlXHJcbiAqIGlzIG5vdGhpbmcgbGVmdCB0byB0cmFuc2xhdGUgYmV0d2VlbiB0aGVtLlxyXG4gKi9cclxuY29uc3QgQ1VTVE9NX0NPTFVNTl9ESVNQTEFZX1RZUEVTOiBSZWNvcmQ8c3RyaW5nLCBEaXNwbGF5VHlwZXM+ID0ge1xyXG4gIElOVDogRGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWSxcclxuICBERUNJTUFMOiBEaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZLFxyXG4gIEZMT0FUOiBEaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZLFxyXG4gIEJPT0xFQU46IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gIFNUUklORzogRGlzcGxheVR5cGVzLlRFWFRfRElTUExBWSxcclxuICBCSU5BSVJFOiBEaXNwbGF5VHlwZXMuVEVYVF9ESVNQTEFZLFxyXG4gIC8vIFJlYWQgcGF0aCBvbmx5IOKAlCBEQVRFIGhhcyBubyBzdG9yYWdlIGNvbHVtbiBhbmQgbm8gZm9ybSBpbnB1dC5cclxuICBEQVRFOiBEaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZLFxyXG4gIERBVEVUSU1FOiBEaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZLFxyXG59O1xyXG5cclxuLy8gU2VydmVyLXNpZGUgZ3JvdXAtYnkgY29sdW1uIGZvciB0aGUgd29ya2Zsb3ctZXRhdCBLYW5iYW4gdmFyaWFudC4gR3JvdXBpbmcgaXMgcmVzb2x2ZWQgdmlhXHJcbi8vIHJlZmxlY3Rpb24gYWdhaW5zdCB0aGUgcXVlcmllZCBlbnRpdHkgdHlwZSAoc2VlIFF1ZXJ5YWJsZUV4dGVuc2lvbnMuQXBwbHlHcm91cGluZ0FzeW5jIGluXHJcbi8vIFRzaS1TaGFyZWRLZXJuZWwpLCBzbyB0aGlzIG11c3QgbWF0Y2ggdGhlIGVudGl0eSdzIFdvcmtmbG93RXRhdCBwcm9wZXJ0eSBuYW1lLlxyXG5jb25zdCBXT1JLRkxPV19FVEFUX0dST1VQX0JZX0ZJRUxEID0gJ3dvcmtmbG93RXRhdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUNydWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVHNpTm90aWZpY2F0aW9uU2VydmljZV0sXHJcbn0pIC8qLCBPbkNoYW5nZXMqL1xyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICBidXR0b25UeXBlID0gQnV0dG9uVHlwZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgY29uZmlnTW9kZUJ1dHRvbklkOiBzdHJpbmcgPSBcImNvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdFwiXHJcbiAgc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWUgPSBcImNvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdC1zYXZlLXByb3BlcnRpZXNcIjtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcblxyXG4gIGl0ZW1zPzogYW55W107XHJcblxyXG4gIHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCA9IHt9O1xyXG5cclxuICBwYWdlOiBJUGFnZTxhbnk+ID0ge1xyXG4gICAgaXRlbXM6IFtdLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgcGFnZU51bWJlcjogMSxcclxuICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHJvd3MgPSAxO1xyXG4gIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBmaWx0ZXJzSHRtbFRlbXBsYXRlPzogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBfc2VhcmNoT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfbW9kYWxEYXRhOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkQ29tcG9uZW50PzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5wdXRzXHJcbiAgQElucHV0KCkgc2V0IG1vZGFsRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9tb2RhbERhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGdyaWRDb25maWd1cmF0aW9uPzogSUdyaWRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBJbnB1dCgpIGRlc2NyaW1pbmF0b3JWYWx1ZT86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHByZXNlbnRhdGlvblNldHRpbmdzPzogUHJlc2VudGF0aW9uU2V0dGluZ1xyXG4gIEBJbnB1dCgpIHByZXZlbnRBZGRFdmVudD86IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHNldCBmb3JtRW5kcG9pbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1FbmRwb2ludCA9IGAke3ZhbHVlfS9nZXRhbGxwYWdlZGA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb3JtRW5kcG9pbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybU5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGZvcm1OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybU5hbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZm9ybU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZm9ybU5hbWUgPSB2YWx1ZTtcclxuICAgIC8vIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTZWFyY2hCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBASW5wdXQoKSBmb3JtTmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SGVhZGVyRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dFZGl0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q29uc3VsdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dOb3RlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RG93bmxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SW5mb0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0R1cGxpY2F0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Zvcm1CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q2FyZFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RnJvbU91dGxvb2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93S2FuYmFuVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBSZXNvbHZlcyBvbmNlIGluaXRpYWxpc2VTaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0J3MgSFRUUCBjaGVjayBzZXR0bGVzOyBhd2FpdGVkIGJ5XHJcbiAgLy8gdG9nZ2xlS2FuYmFuVmlldyBzbyBpdCBuZXZlciBwaWNrcyB0aGUgd3JvbmcgZ3JvdXBCeSBvbiBhIG5vdC15ZXQtcmVzb2x2ZWQgdmFyaWFudC5cclxuICBwcml2YXRlIF93b3JrZmxvd0V0YXRLYW5iYW5DaGVjazogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAvLyBTZXJ2ZXItc2lkZSBncm91cC1ieSBjb2x1bW4sIGFjdGl2ZSBvbmx5IHdoaWxlIHRoZSBLYW5iYW4gdmlldyBpcyBzaG93biAocmVzb2x2ZWQgZnJvbVxyXG4gIC8vIEVudGl0eUluZm8uc3RhdHVzQ29sdW1uTmFtZSwgb3IgV09SS0ZMT1dfRVRBVF9HUk9VUF9CWV9GSUVMRCBmb3IgdGhlIHdvcmtmbG93LWV0YXQgdmFyaWFudCk7XHJcbiAgLy8gcGFzc2VkIGRvd24gdG8gdGhlIGdyaWQgc28gZ3JpZC1kcml2ZW4gcmVsb2FkcyAoa2FuYmFuIHBhZ2luYXRpb24sIHNlYXJjaCkga2VlcCB0aGUgZ3JvdXBpbmcuXHJcbiAgZ3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNhbGVuZGVyU2NoZW1hOiBFdmVudFNjaGVtYSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaXppbmdNb2RlOiBHcmlkU2l6aW5nTW9kZSA9IEdyaWRTaXppbmdNb2RlLkZpbGw7XHJcblxyXG4gIC8vZ3JpZCBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3RLZXlPbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmU7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIF9idXNpbmVzc0NsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGNvbHVtbnMgYXJlIHRoZSBzYW1lIHNldCB3aGljaGV2ZXIgc291cmNlIGRlbGl2ZXJzIHRoZW0sIHNvIHRoZXkgYXJlIHJlZ2lzdGVyZWQgZXhhY3RseVxyXG4gICAqIG9uY2UuIExhdGNoZWQgYnkgd2hpY2hldmVyIHNvdXJjZSBnZXRzIHRoZXJlIGZpcnN0OyByZXNldCB3aGVuIHRoZSBlbnRpdHkgY2hhbmdlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9jdXN0b21Db2x1bW5zUmVnaXN0ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgLy8gQSBkaWZmZXJlbnQgZW50aXR5IG1lYW5zIGEgZGlmZmVyZW50IHNldCBvZiBjdXN0b20gY29sdW1ucy5cclxuICAgIHRoaXMuX2N1c3RvbUNvbHVtbnNSZWdpc3RlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX2J1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKTtcclxuXHJcbiAgICAgIHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5nZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUodGhpcy5fYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB0aGlzLl9yZWdpc3RlckN1c3RvbUNvbHVtbnNGcm9tRGVmaW5pdGlvbnMocmVzLmZsYXRNYXAociA9PiByLmNvbG9ubmVzKSksXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hPbkluaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hPbkluaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0O1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dSZXBvcnRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+KCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNvbHVtbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBvbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb24gT3V0cHV0c1xyXG4gIGNsaWNrQ291bnQgPSAxO1xyXG4gIGN1cnJlbnRJY29uID0gXCJwaSBwaS1hbGlnbi1qdXN0aWZ5XCI7XHJcbiAgY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfbGlzdF92aWV3XCI7XHJcblxyXG4gIHZpZXdPcHRpb25zOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIHBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2dTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dEYXRhU2VydmljZTogRGlhbG9nRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVwbG9hZEdlbmVyaWNGaWNoaWVyU2VydmljZTogVXBsb2FkR2VuZXJpY0ZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VudGl0eUNvbmZpZ1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3Rlc1NlcnZpY2U6IE5vdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9kaXNjcmltaW5hdG9yU2VydmljZTogRGlzY3JpbWluYXRvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2U6IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gZ3JpZCBzdGF0ZVxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LmdldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQucmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldFdvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50QnVzaW5lc3NDbGFzcygpIHtcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ2xhc3NGcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgd29ya2Zsb3cgc3RhdGUgZm9ybTonLCBlcnJvcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMobmV3U2VhcmNoRmllbGRWYWx1ZXM6IEFycmF5PFNlYXJjaEZpZWxkPikge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQuZW1pdChuZXdTZWFyY2hGaWVsZFZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SGVhZGVyRmlsdGVycyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSAnaGlkZV9maWx0ZXInO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSAncGkgcGktZmlsdGVyLXNsYXNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9ICdzaG93X2ZpbHRlcic7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnMgPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnY29sdW1ucyBjYW50IGJlIG51bGwgb3IgdW5kZWZpbmVkLCBkZXZlbG9wcGVyIG11c3Qgc2V0IGNvbHVtbnMgb2YgZ3JpZCAhJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2luaXRTZWxlY3RlZENvbHVtbnMoKTtcclxuXHJcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3RfdmlldycpLFxyXG4gICAgICAgIGljb246ICdwaSBwaS1hbGlnbi1qdXN0aWZ5JyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUxpc3RWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiKSxcclxuICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYXJkX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktaWQtY2FyZCcsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVDYXJkVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktdGgtbGFyZ2UnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlS2FuYmFuVmlldygpXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5faW5pdE1vZGVscygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFNlbGVjdGVkQ29sdW1ucygpIHtcclxuICAvLyBFYWNoIGVudHJ5IGlzIFtlbmFibGVkIGZsYWcsIGNvbHVtbiBkZWZpbml0aW9uXVxyXG4gIGNvbnN0IGFjdGlvbkNvbHVtbnM6IFtib29sZWFuLCBHcmlkQ29sdW1uXVtdID0gW1xyXG4gICAgW3RoaXMuc2hvd0NvbnN1bHRCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfY29uc3VsdCcsIGZpZWxkOiAnY29uc3VsdCcsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktZXllJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtYmx1ZS01MDAnLCBpc0Zyb3plbjogdHJ1ZSwgb3JkZXI6IDAsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnQ29uc3VsdGVyJywgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICB9XSxcclxuICAgIFt0aGlzLnNob3dEZWxldGVCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZGVsZXRlJywgZmllbGQ6ICdkZWxldGUnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTggcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LXJlZC01MDAnLCBpc0Zyb3plbjogdHJ1ZSwgb3JkZXI6IDEsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnRGVsZXRlJywgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93RG93bmxvYWRCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZG93bmxvYWQnLCBmaWVsZDogJ2Rvd25sb2FkJywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1kb3dubG9hZCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAyLCB0b29sVGlwVGV4dDogJ1TDqWzDqWNoYXJnZXInLCBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd0luZm9CdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfaW5mbycsIGZpZWxkOiAnaW5mbycsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktaW5mbycsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAzLCB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2luZm8nLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd1VwbG9hZEJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50JywgZmllbGQ6ICd1cGxvYWQnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiA0LCB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2F0dGFjaG1lbnQnLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd05vdGVCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfbm90ZXMnLCBidXR0b25MYWJlbDogJycsIGZpZWxkOiAnbm90ZXMnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNvbW1lbnQnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogNSwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19ub3RlcycsXHJcbiAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSwgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93RWRpdEJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19lZGl0JywgZmllbGQ6ICdlZGl0JywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wZW5jaWwnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogNiwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50LklubGluZSxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd0R1cGxpY2F0ZUJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19kdXBsaWNhdGUnLCBmaWVsZDogJ2R1cGxpY2F0ZScsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktY2xvbmUnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1wdXJwbGUtNTAwJywgaXNGcm96ZW46IHRydWUsIG9yZGVyOiA3LFxyXG4gICAgICB0b29sVGlwVGV4dDogJ0R1cGxpcXVlcicsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93Rm9ybUJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19mb3JtJywgZmllbGQ6ICdmb3JtJywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib29rJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtaW5kaWdvLTUwMCcsIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogOCxcclxuICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19mb3JtJywgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICB9XSxcclxuICAgIFt0aGlzLnNob3dBY3Rpb25CdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfYWN0aW9uJywgYnV0dG9uTGFiZWw6ICcnLCBmaWVsZDogJ0FjdGlvbkVSUCcsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktYm9sdCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAxMCwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19hY3Rpb24nLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gIF07XHJcblxyXG4gIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Db2x1bW5zXHJcbiAgICAuZmlsdGVyKChbZW5hYmxlZF0pID0+IGVuYWJsZWQpXHJcbiAgICAubWFwKChbLCBjb2x1bW5dKSA9PiBjb2x1bW4pO1xyXG5cclxuICBjb25zdCBhbGxDb2x1bW5zID0gWy4uLmJ1dHRvbnMsIC4uLnRoaXMuY29sdW1uc107XHJcblxyXG4gIC8vIE9yZGVyZWQgY29sdW1ucyBmaXJzdCAoc29ydGVkIGJ5IG9yZGVyKSwgdGhlbiB0aGUgcmVzdCDigJQgYXNzaWduZWQgb25jZVxyXG4gIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgLi4uYWxsQ29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgLi4uYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICBdLm1hcChjb2x1bW4gPT4gKHtcclxuICAgIC4uLmNvbHVtbixcclxuICAgIHRyYW5zbGF0ZWRIZWFkZXI6IGNvbHVtbi5oZWFkZXJcclxuICAgICAgPyB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyKVxyXG4gICAgICA6IGNvbHVtbi5oZWFkZXIsXHJcbiAgfSkpO1xyXG59XHJcblxyXG5cclxuICAvKiB0b2dnbGVIZWFkZXJGaWx0ZXJzKCl7XHJcbiAgICBpZih0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKXtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcInNob3dfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy90aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICB9ICovXHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlXHJcbiAgICAgID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IHRoaXMucGFnZS50b3RhbENvdW50IC0gdGhpcy5wYWdlLnBhZ2VTaXplXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAwIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhenlMb2FkXHJcbiAgICovXHJcbiAgLy9maXJzdCA9PT4gcGFnZS5wYWdlTnVtYmVyXHJcbiAgLy9yb3dzID09PiBwYWdlLnBhZ2VTaXplXHJcbiAgLy90aGlzLnBhZ2UuaXRlbXMubGVuZ3RoID09PiB0b3RhbCBjb3VudFxyXG5cclxuICBvcGVuTmV3KCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXZlbnRBZGRFdmVudCkge1xyXG4gICAgICB0aGlzLl9vcGVuTW9kYWwoQ29tcG9uZW50X01vZGVzLkNSRUFURSwgbnVsbCwgdGhpcy5fbW9kYWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgIGtleTogdW5kZWZpbmVkLFxyXG4gICAgICBmaWVsZDogJ2FkZCcsXHJcbiAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZChldmVudDogQnV0dG9uQ2xpY2tSZXN1bHQpIHtcclxuXHJcbiAgICBsZXQgaXRlbUtleTogYW55ID0gZXZlbnQuc2VsZWN0S2V5T25seSA/IGV2ZW50LmtleSA6IGV2ZW50LmtleVt0aGlzLmtleV07XHJcblxyXG4gICAgY29uc3QgZXhjbHVkZWQgPSBbXCJOb3Rlc1wiLCBcIkZpY2hpZXJcIl07XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICFleGNsdWRlZC5pbmNsdWRlcyh0aGlzLmJ1c2luZXNzQ2xhc3MpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YVNlcnZpY2Uuc2V0RGF0YSh7IGlkOiBpdGVtS2V5LCBjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5maWVsZCA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgdGhpcy5fZGVsZXRlUm93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnY29uc3VsdCcpIHtcclxuICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2R1cGxpY2F0ZScpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJCdXNzaW5lc3MgY2xhc3MgaXMgbm90IGRlZmluZWQgIVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZHVwbGljYXRlUm93KGl0ZW1LZXkpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ3VwbG9hZCcpIHtcclxuICAgICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdub3RlcycpIHtcclxuXHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Ob3Rlc0xpc3QodGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdkb3dubG9hZCcpIHtcclxuXHJcbiAgICAgIHRoaXMudXBsb2FkR2VuZXJpY0ZpY2hpZXJTZXJ2aWNlLmdldEJ5SWQoaXRlbUtleSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlKGRhdGEuY29udGVudSwgZGF0YS5ub21GaWNoaWVyQ29tcGxldCEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2luZm8nKSB7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCBpdGVtS2V5KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICBpdGVtS2V5ICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IGl0ZW1LZXksXHJcbiAgICAgICAgICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBUc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgY29uZlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT5cclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZm9ybScpe1xyXG4gICAgICBpZighdGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAge1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFmb3JtRGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RGlzY3JpbWluYXRvcih0aGlzLmJ1c2luZXNzQ2xhc3MsIGl0ZW1LZXkpO1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSBkaXNjcmltaW5hdG9yUmVzcG9uc2U/LmRpc2NyaW1pbmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1vZGFsQ29uZmlnID0ge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHNvdXJjZUJ1c2luZXNzQ2xhc3M6IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yVmFsdWU6IGZvcm1EZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5EeW5hbWljRm9ybU1vZGFsQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBtb2RhbENvbmZpZylcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfWVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdBY3Rpb25FUlAnKSB7XHJcblxyXG4gICAgICBsZXQgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zID0ge1xyXG4gICAgICAgIGJ1c2luZXNzY2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyA/PyAnJyxcclxuICAgICAgICBvY2N1cmVuY2U6IGl0ZW1LZXlcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkFjdGlvbkxpc3QodGhpcy5faW5qZWN0b3IsIHsgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zIH0pO1xyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoe1xyXG4gICAgICAgIGtleTogZXZlbnQua2V5LFxyXG4gICAgICAgIGZpZWxkOiBldmVudC5maWVsZCxcclxuICAgICAgICBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUZpbGUoYmFzZTY0RGF0YTogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBieXRlTnVtYmVyc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBhLmNsaWNrKCk7XHJcblxyXG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIGxvYWQoZXZlbnQ6IHsgcmVxdWVzdDogSVBhZ2VkUmVxdWVzdDsgaXNGb3JDYWxlbmRhcjogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IGV2ZW50LnJlcXVlc3Q7XHJcbiAgICB0aGlzLl9zZXRmb3JtRW5kcG9pbnRCb2R5KCk7XHJcbiAgICB0aGlzLl9sb2FkRFMoZXZlbnQuaXNGb3JDYWxlbmRhcik7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9zZXRmb3JtRW5kcG9pbnRCb2R5KCk6IHZvaWQge1xyXG4gICAgbGV0IG94OiBhbnkgPSB0aGlzLl9jbG9uZVBhZ2VkUmVxdWVzdCh0aGlzLnBhZ2VkUmVxdWVzdCk7XHJcbiAgICBveFsnZ2V0QWxsRGF0YSddID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9ybUVuZHBvaW50Qm9keSA9IEpTT04uc3RyaW5naWZ5KG94KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RlbHMoKSB7XHJcblxyXG4gICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICBpdGVtczogW10sXHJcbiAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgcGFnZU51bWJlcjogMSxcclxuICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgdG90YWxQYWdlczogMCxcclxuICAgICAgc3VtbWFyaWVzOiBbXSxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogMTAsXHJcbiAgICAgIHNraXBDb3VudDogMCxcclxuICAgICAgc29ydGluZzogW10sXHJcbiAgICAgIGtleXdvcmQ6ICcnLFxyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgZ2V0QWxsRGF0YTogZmFsc2UsXHJcbiAgICAgIHN1bW1hcmllczogW10sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZERTKGlzRm9yQ2FsZW5kZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIHRoaXMucGFnZS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZSQubmV4dCh0aGlzLnBhZ2UpO1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnZWRSZXF1ZXN0LFxyXG4gICAgICBnZXRBbGxEYXRhOiBpc0ZvckNhbGVuZGVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogSVBhZ2VkUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgaXRlbXMgOiB2YWx1ZS5pdGVtcyxcclxuICAgICAgICAgICAgICB0b3RhbENvdW50IDogdmFsdWUudG90YWxDb3VudCxcclxuICAgICAgICAgICAgICBzdW1tYXJpZXMgOiB2YWx1ZS5zdW1tYXJpZXMgPyB2YWx1ZS5zdW1tYXJpZXMgOiBbXSxcclxuICAgICAgICAgICAgICBncm91cHMgOiB2YWx1ZS5ncm91cHMsXHJcbiAgICAgICAgICAgICAgdG90YWxQYWdlcyA6ICh0aGlzLnBhZ2UudG90YWxDb3VudCAtICAodGhpcy5wYWdlLnRvdGFsQ291bnQgJSB0aGlzLnBhZ2UucGFnZVNpemUpKSAvIHRoaXMucGFnZS5wYWdlU2l6ZSArIDEsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Tm90ZUJ1dHRvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZE5vdGVzQ291bnRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNlY29uZCBzb3VyY2UsIGVxdWl2YWxlbnQgdG8gdGhlIGRlZmluaXRpb25zIGFuZCB0aGUgb25seSBvbmUgdGhhdCByZWFjaGVzIHNjcmVlbnNcclxuICAgICAgICAgICAgLy8gdGhleSBjYW5ub3Qgc2VydmU6IHRob3NlIHRoYXQgbmV2ZXIgc2V0IGBidXNpbmVzc0NsYXNzYCwgYW5kIHRob3NlIHdob3NlXHJcbiAgICAgICAgICAgIC8vIGBidXNpbmVzc0NsYXNzYCBpcyBhIHJvdXRlIHNlZ21lbnQgb3IgdmlldyBuYW1lIHJhdGhlciB0aGFuIGFuIGVudGl0eSBjbGFzcyBuYW1lLCBzb1xyXG4gICAgICAgICAgICAvLyBpdCBkb2VzIG5vdCBtYXRjaCBgQ29sb25uZVBlcnNvbm5hbGlzZWUuQ2xhc3NlYC4gVGhlIHNjaGVtYSBpcyBkZXJpdmVkIHNlcnZlci1zaWRlXHJcbiAgICAgICAgICAgIC8vIGZyb20gYHR5cGVvZihURW50aXR5KS5OYW1lYCwgc28gaXQgYWx3YXlzIG1hdGNoZXMuIFdoaWNoZXZlciBzb3VyY2UgYW5zd2VycyBmaXJzdCB3aW5zLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2N1c3RvbUNvbHVtbnNSZWdpc3RlcmVkICYmIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJDdXN0b21Db2x1bW5zRnJvbVNjaGVtYSh2YWx1ZS5jdXN0b21Db2x1bW5TY2hlbWEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRGVmaW5pdGlvbnMgc291cmNlIOKAlCByZWFjaGVkIHdoZXJldmVyIGBidXNpbmVzc0NsYXNzYCBtYXRjaGVzIGBDb2xvbm5lUGVyc29ubmFsaXNlZS5DbGFzc2VgLiAqL1xyXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ3VzdG9tQ29sdW1uc0Zyb21EZWZpbml0aW9ucyhkZWZpbml0aW9uczogQ29sb25uZVBlcnNvbm5hbGlzZWVbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVnaXN0ZXJDdXN0b21Db2x1bW5zKGRlZmluaXRpb25zLm1hcDxHcmlkQ29sdW1uPihjcCA9PiAoe1xyXG4gICAgICAvLyBUaGUgQVBJIGNhbWVsQ2FzZXMgYE5vbWAgd2hlbiBpdCB3cml0ZXMgdGhlIGNvbHVtbidzIHZhbHVlIG9udG8gZWFjaCByb3csIHNvIHRoZSBmaWVsZCBoYXNcclxuICAgICAgLy8gdG8gZm9sbG93IHRoZSBzYW1lIHBvbGljeSBvciB0aGUgY2VsbCBsb29rdXAgbWlzc2VzLlxyXG4gICAgICBmaWVsZDogdG9Eb3ROZXRDYW1lbENhc2UoY3Aubm9tKSxcclxuICAgICAgaGVhZGVyOiBjcC5saWJlbGxlLFxyXG4gICAgICB0cmFuc2xhdGVkSGVhZGVyOiBjcC5saWJlbGxlLCAvLyBhIHVzZXItdHlwZWQgbGFiZWwgaXMgbm90IGEgdHJhbnNsYXRpb24ga2V5XHJcbiAgICAgIHR5cGU6IENVU1RPTV9DT0xVTU5fRElTUExBWV9UWVBFU1soY3AudHlwZSA/PyAnJykudG9VcHBlckNhc2UoKV0gPz8gRGlzcGxheVR5cGVzLlRFWFRfRElTUExBWSxcclxuICAgICAgaXNDdXN0b21Db2x1bW46IHRydWUsXHJcbiAgICB9KSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR3JpZC1yZXNwb25zZSBzb3VyY2UuIGBjb2x1bW5OYW1lYCBpcyBjYW1lbENhc2VkIGJ5IHRoZSBzYW1lIHNlcmlhbGl6ZXIgcGFzcyB0aGF0IHdyaXRlcyB0aGUgcm93XHJcbiAgICogcHJvcGVydGllcywgYW5kIGB0eXBlYCBpcyB0aGUgc2FtZSByYXcgdm9jYWJ1bGFyeSB0aGUgZGVmaW5pdGlvbnMgcmVwb3J0IOKAlCBzbyB0aGlzIHByb2R1Y2VzIGFuXHJcbiAgICogaWRlbnRpY2FsIGNvbHVtbiwgbm90IGEgZGVncmFkZWQgb25lLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ3VzdG9tQ29sdW1uc0Zyb21TY2hlbWEoc2NoZW1hOiBJQ3VzdG9tQ29sdW1uU2NoZW1hW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlZ2lzdGVyQ3VzdG9tQ29sdW1ucyhzY2hlbWEubWFwPEdyaWRDb2x1bW4+KGNjcyA9PiAoe1xyXG4gICAgICBmaWVsZDogY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgIGhlYWRlcjogY2NzLmNvbHVtbkxpYmVsbGUgPz8gY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgIHRyYW5zbGF0ZWRIZWFkZXI6IGNjcy5jb2x1bW5MaWJlbGxlID8/IGNjcy5jb2x1bW5OYW1lLFxyXG4gICAgICB0eXBlOiBDVVNUT01fQ09MVU1OX0RJU1BMQVlfVFlQRVNbKGNjcy50eXBlID8/ICcnKS50b1VwcGVyQ2FzZSgpXSA/PyBEaXNwbGF5VHlwZXMuVEVYVF9ESVNQTEFZLFxyXG4gICAgICBpc0N1c3RvbUNvbHVtbjogdHJ1ZSxcclxuICAgIH0pKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc2luZ2xlIHJlZ2lzdHJhdGlvbiBwb2ludCDigJQgd2hpY2hldmVyIHNvdXJjZSBnb3QgaGVyZSBmaXJzdCBpcyB0aGUgb25seSBvbmUgdGhhdCBydW5zLlxyXG4gICAqIEJvdGggZGVyaXZlIGBmaWVsZGAgd2l0aCB0aGUgc2FtZSBjYW1lbENhc2UgcG9saWN5LCBzbyB0aGUgZGVkdXAgaXMgb25seSBhIGd1YXJkIGFnYWluc3QgYVxyXG4gICAqIGN1c3RvbSBjb2x1bW4gY29sbGlkaW5nIHdpdGggYSBuYXRpdmUgb25lLCB3aGljaCBtdXN0IG5ldmVyIGJlIHJlcGxhY2VkLlxyXG4gICAqXHJcbiAgICogQXNzaWducyBhIE5FVyBhcnJheTogYW4gaW4tcGxhY2UgbXV0YXRpb24ga2VlcHMgdGhlIHNhbWUgcmVmZXJlbmNlLCBzbyBBbmd1bGFyJ3MgaWRlbnRpdHkgY2hlY2tcclxuICAgKiBuZXZlciByZS1pbnZva2VzIHRoZSBncmlkJ3MgYGNvbHVtbnNgIHNldHRlciBhbmQgdGhlIGNvbHVtbiBpcyBuZXZlciByZW5kZXJlZC5cclxuICAgKi9cclxuICBwcml2YXRlIF9yZWdpc3RlckN1c3RvbUNvbHVtbnMoY2FuZGlkYXRlczogR3JpZENvbHVtbltdKTogdm9pZCB7XHJcbiAgICBpZiAoIWNhbmRpZGF0ZXMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gVGhlIHNvdXJjZSBkZWxpdmVyZWQg4oCUIG5vdGhpbmcgZWxzZSBzaG91bGQgcmVnaXN0ZXIgYWZ0ZXIgdGhpcywgZXZlbiBpZiBldmVyeSBjYW5kaWRhdGVcclxuICAgIC8vIHR1cm5zIG91dCB0byBiZSBhIGR1cGxpY2F0ZS5cclxuICAgIHRoaXMuX2N1c3RvbUNvbHVtbnNSZWdpc3RlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBrbm93biA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKGMgPT4gYy5maWVsZD8udG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgY29uc3QgdG9BcHBlbmQgPSBjYW5kaWRhdGVzLmZpbHRlcihjID0+ICFrbm93bi5oYXMoYy5maWVsZD8udG9Mb3dlckNhc2UoKSkpO1xyXG5cclxuICAgIGlmICghdG9BcHBlbmQubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsIC4uLnRvQXBwZW5kXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZE5vdGVzQ291bnRzKCkge1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5wYWdlLml0ZW1zLm1hcCh4ID0+IHhbdGhpcy5rZXldKVxyXG4gICAgICAuZmlsdGVyKHggPT4geCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQpXHJcbiAgICAgIC5tYXAoeCA9PiBTdHJpbmcoeCkpO1xyXG5cclxuICAgIGlmICghaWRzLmxlbmd0aCB8fCAhdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm5vdGVzU2VydmljZVxyXG4gICAgICAuZ2V0Tm90ZXNDb3VudEJ5Um93cyh0aGlzLmJ1c2luZXNzQ2xhc3MsIGlkcylcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihcclxuICAgICAgICAgIHJlc3VsdC5tYXAoeCA9PiBbeC5yb3dVaWQsIHguY291bnRdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKGl0ZW1bdGhpcy5rZXldKTtcclxuICAgICAgICAgIGNvbnN0IGNvdW50ID0gbWFwLmdldChrZXkpO1xyXG4gICAgICAgICAgKGl0ZW0gYXMgYW55KS5ub3Rlc0NvdW50ID0gdHlwZW9mIGNvdW50ID09PSAnbnVtYmVyJyA/IGNvdW50IDogMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9lZGl0Um93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2soQ29tcG9uZW50X01vZGVzLkVESVQsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVsZXRlUm93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2soQ29tcG9uZW50X01vZGVzLkRFTEVURSwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25zdWx0Um93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2soQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsIGl0ZW1LZXkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9kdXBsaWNhdGVSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuRFVQTElDQVRFLCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5SW5mbygpIHtcclxuICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8pIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYE5vIGVudGl0eSBpbmZvIGZvdW5kIGZvciAke3RoaXMuYnVzaW5lc3NDbGFzc31gKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb3Blbk1vZGFsKG1vZGU6IHN0cmluZywgaXRlbUtleTogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY3J1ZFNlcnZpY2UhLmlzRHVwbGljYXRlID0gbW9kZSA9PT0gTW9kZXMuZHVwbGljYXRlO1xyXG5cclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcil7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGFsU2l6ZSAhPSBudWxsICYmIHRoaXMubW9kYWxTaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUsIGN1c3RvbURhdGE6IGRhdGEsIGVudGl0eUluZm86IHRoaXMuZW50aXR5SW5mbyB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgIGZvb3RlcjogVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSB9LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5jdWRDb21wb25lbnQgPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdWRDb21wb25lbnQgPSBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZSh0aGlzLmN1ZENvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jdWRDb21wb25lbnQsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKGNvbmYpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwoY29uZj86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmYgJiYgY29uZj8uZGF0YT8ucmVmcmVzaExpc3QpIHtcclxuICAgICAgdGhpcy5fbG9hZERTKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb25lUGFnZWRSZXF1ZXN0KHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QpOiBJUGFnZWRSZXF1ZXN0IHtcclxuICAgIGxldCBjbG9uZTogSVBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHJlcXVlc3QubWF4UmVzdWx0Q291bnQsXHJcbiAgICAgIHNraXBDb3VudDogcmVxdWVzdC5za2lwQ291bnQsXHJcbiAgICAgIHNvcnRpbmc6IHJlcXVlc3Quc29ydGluZyxcclxuICAgICAga2V5d29yZDogcmVxdWVzdC5rZXl3b3JkLFxyXG4gICAgICBmaWx0ZXJzOiByZXF1ZXN0LmZpbHRlcnMsXHJcbiAgICAgIGdldEFsbERhdGE6IHJlcXVlc3QuZ2V0QWxsRGF0YSxcclxuICAgICAgc3VtbWFyaWVzOiByZXF1ZXN0LnN1bW1hcmllcyxcclxuICAgICAgZ3JvdXBCeTogcmVxdWVzdC5ncm91cEJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZGlzcGxheVNlYXJjaEZpZWxkcygpIHtcclxuICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkID0gIXRoaXMuc2hvd1NlYXJjaEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNhbGVuZGVyXHJcbiAgaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKGl0ZW06IGFueSkge1xyXG4gICAgc3dpdGNoIChpdGVtLm1vZGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDpcclxuICAgICAgICB0aGlzLl9jb25zdWx0Um93KGl0ZW0uaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5DUkVBVEU6XHJcbiAgICAgICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIG51bGwse2l0ZW19ICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkVESVQ6XHJcbiAgICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnaW5mbycsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZG93bmxvYWQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnZG93bmxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKHsgZmllbGQ6ICd1cGxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdGVzJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ25vdGVzJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBY3Rpb25FUlAnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnQWN0aW9uRVJQJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVMaXN0VmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2NsZWFyR3JvdXBCeSgpO1xyXG4gICAgdGhpcy5fbG9hZERTKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRJY29uID0gXCJwaSBwaS1hbGlnbi1qdXN0aWZ5XCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3Rfdmlld1wiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDYWxlbmRlclZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSAhdGhpcy5zaG93Q2FsZW5kZXJWaWV3O1xyXG4gICAgdGhpcy5zaG93Q2FyZFZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2NsZWFyR3JvdXBCeSgpO1xyXG4gICAgdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhbGVuZGVyVmlldyk7XHJcbiAgICB0aGlzLmN1cnJlbnRJY29uID0gXCJwaSBwaS1jYWxlbmRhclwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYWxlbmRlcl92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUNhcmRWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FyZFZpZXcgPSAhdGhpcy5zaG93Q2FyZFZpZXc7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2NsZWFyR3JvdXBCeSgpO1xyXG4gICAgLy8gdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhcmRWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWlkLWNhcmRcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHRvZ2dsZUthbmJhblZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gIXRoaXMuc2hvd0thbmJhblZpZXc7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0thbmJhblZpZXcpIHtcclxuICAgICAgLy8gR3JvdXAgc2VydmVyLXNpZGUgc28gZWFjaCBLYW5iYW4gY29sdW1uIGdldHMgaXRzIG93biBwYWdlIGFuZCBpdHMgb3duIGFjY3VyYXRlXHJcbiAgICAgIC8vICh1bnBhZ2VkKSB0b3RhbCBjb3VudDogYnkgdGhlIHdvcmtmbG93LWV0YXQgZmllbGQgZm9yIHRoYXQgdmFyaWFudCwgb3RoZXJ3aXNlIGJ5XHJcbiAgICAgIC8vIHRoZSBlbnRpdHkncyBzdGF0dXMgY29sdW1uLiBBd2FpdCB0aGUgd29ya2Zsb3ctZXRhdCBjaGVjayBzbyBhIHRvZ2dsZSB0aGF0IHJhY2VzXHJcbiAgICAgIC8vIGFoZWFkIG9mIGl0IGNhbid0IGxvY2sgaW4gdGhlIHdyb25nIGdyb3VwQnkuXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5SW5mbygpO1xyXG4gICAgICBhd2FpdCB0aGlzLl93b3JrZmxvd0V0YXRLYW5iYW5DaGVjaztcclxuICAgICAgdGhpcy5ncm91cEJ5ID0gdGhpcy5zaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0XHJcbiAgICAgICAgPyBXT1JLRkxPV19FVEFUX0dST1VQX0JZX0ZJRUxEXHJcbiAgICAgICAgOiB0aGlzLmVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwQnkgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7IC4uLnRoaXMucGFnZWRSZXF1ZXN0LCBncm91cEJ5OiB0aGlzLmdyb3VwQnkgfTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktdGgtbGFyZ2VcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFyR3JvdXBCeSgpIHtcclxuICAgIHRoaXMuZ3JvdXBCeSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0geyAuLi50aGlzLnBhZ2VkUmVxdWVzdCwgZ3JvdXBCeTogdW5kZWZpbmVkIH07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Y0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW5OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2xpY2tDb3VudCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0VmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy50b2dnbGVDYXJkVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHRoaXMudG9nZ2xlS2FuYmFuVmlldygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2sobW9kZTogQ29tcG9uZW50X01vZGVzLCBpdGVtS2V5OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gQE1lZEFsaSB0byBiZSBmaXhlZFxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLmJ1c2luZXNzQ2xhc3MgIT09IFwiTm90ZXNcIikge1xyXG4gICAgICB0aGlzLm5vdGVzU2VydmljZS5nZXRBbGVydE5vdGVzKGl0ZW1LZXk/LnRvU3RyaW5nKCksIHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IE5vdGVzR3JvdXBlZEJ5VXNlclJlc3BvbnNlW10pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHsgZ3JvdXBlZE5vdGVzOiByZXNwb25zZSB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLlNtYWxsLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5TbWFsbC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbm90ZXMgZm9yIGFsZXJ0JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXR1c0ZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0Q2xpY2tlZCgpe1xyXG4gICAgdGhpcy5vbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKVxyXG4gIHtcclxuICAgIGlmKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dFdGF0S2FuYmFuQ2hlY2sgPSBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEJ5Q2xhc3NOYW1lQW5kRGVzY3JpbWluYXRvcih0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICApLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzczogc3RyaW5nLCBpZDogc3RyaW5nKTogUHJvbWlzZTxEaXNjcmltaW5hdG9yUmVzcG9uc2UgfCBudWxsPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZGlzY3JpbWluYXRvclJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fZGlzY3JpbWluYXRvclNlcnZpY2UuZ2V0RGlzY3JpbWluYXRvcihidXNpbmVzc0NsYXNzLCBpZCkpXHJcblxyXG4gICAgICBpZiAoZGlzY3JpbWluYXRvclJlc3BvbnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JSZXNwb25zZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNhdGNoKGVycm9yKVxyXG4gICAge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gIFxyXG4gIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cImJvcmRlci1yYWRpdXMtNyBtYi0xIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG5vLXBhZFwiIFxyXG4gICAgKm5nSWY9XCIoc2hvd0FkZEJ1dHRvbiB8fCBzZWFyY2hGaWVsZHMgfHwgZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpICYmIHNob3dSZXBvcnRpbmdcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBteC0yXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBZGRCdXR0b25cIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJhZGRfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8VHNpLUJ1dHRvbiBpY29uPVwicGkgcGktcGx1c1wiIFxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBcclxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9XCJzaGFyZWRfdHNpX2NvbXBvbmVudF9hZGRfdmlld1wiIFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuTmV3KClcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRmllbGRzXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hvd19zZWFyY2hfZmllbGRzX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLXNsaWRlcnMtaFwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfbWVudVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IGhvdmVyOnNoYWRvdy02IHt7IHNob3dTZWFyY2hGaWVsZCA/ICdwLWJ1dHRvbi1zZWNvbmRhcnknIDogJ3AtYnV0dG9uLXN1Y2Nlc3MnIH19XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlTZWFyY2hGaWVsZHMoKVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ltcG9ydEZyb21PdXRsb29rQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiaW1wb3J0RnJvbU91dGxvb2tfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8VHNpLUJ1dHRvbiBpY29uPVwicGkgcGktZW52ZWxvcGVcIiBcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfaW1wb3J0X2Zyb21fb3V0bG9va1wiIFxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24taW5mbyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCIgXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkltcG9ydENsaWNrZWQoKVwiPiBcclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwidG9nZ2xlX2FjdGlvbnNfdmlld19idXR0b25cIj5cclxuICAgICAgICAgIDxwLXNwbGl0QnV0dG9uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImN1cnJlbnRJY29uXCJcclxuICAgICAgICAgICAgW21vZGVsXT1cInZpZXdPcHRpb25zXCJcclxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQWN0aW9uVmlld0NsaWNrKClcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJjdXJyZW50VG9vbHRpcCB8IGxvY2FsaXplXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1pY29uLW9ubHkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1wcmltYXJ5IGgtMnJlbSBob3ZlcjpzaGFkb3ctNlwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPCEtLSA8VHNpLUJ1dHRvblxyXG4gICAgICAgICAgICBbaWNvbl09XCJjdXJyZW50SWNvblwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWVsZW1lbnQgcC1idXR0b24tcHJpbWFyeSAgaC0ycmVtIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJjdXJyZW50VG9vbHRpcCB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgICA8YXBwLXJlcG9ydGluZyAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcylcIiBcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRdPVwiZm9ybUVuZHBvaW50XCIgXHJcbiAgICAgICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIlxyXG4gICAgICAgICAgW2Zvcm1FbmRwb2ludEJvZHldPVwiZm9ybUVuZHBvaW50Qm9keVwiIFxyXG4gICAgICAgICAgW2lzRm9ybUVuZHBvaW50UGFnZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgIFtyZXBvcnREaXNjcmltaW5hdG9yXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgICAgICAocmVmcmVzaERhdGEpPVwicmVmcmVzaCgkZXZlbnQpXCJcclxuICAgICAgICAgIFtmaWx0ZXJzSHRtbFRlbXBsYXRlXT1cImZpbHRlcnNIdG1sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW3BhZ2VkUmVxdWVzdF09XCJwYWdlZFJlcXVlc3RcIlxyXG4gICAgICAgICAgW2N1ZENvbXBvbmVudF09XCJjdWRDb21wb25lbnRcIiBcclxuICAgICAgICAgIFtjb25maWdNb2RlQnV0dG9uSWRdPVwiY29uZmlnTW9kZUJ1dHRvbklkXCJcclxuICAgICAgICAgIFtzaG93Tm90ZUJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd0luZm9CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dVcGxvYWRCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgID48L2FwcC1yZXBvcnRpbmc+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10b29sYmFyPlxyXG5cclxuICA8ZGl2PlxyXG5cclxuICAgIDxUc2ktR2VuZXJpYy1HcmlkXHJcbiAgICAgIFtmb3JtTmFtZV09XCJmb3JtTmFtZVwiXHJcbiAgICAgIFtjcnVkU2VydmljZV09XCJjcnVkU2VydmljZVwiXHJcbiAgICAgIFtzaG93U2VhcmNoRmllbGRdPVwic2hvd1NlYXJjaEZpZWxkXCJcclxuICAgICAgW3NlYXJjaEZpZWxkc109XCJzZWFyY2hGaWVsZHNcIlxyXG4gICAgICBbZGVzY3JpbWluYXRvclZhbHVlXT1cImRlc2NyaW1pbmF0b3JWYWx1ZVwiXHJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcclxuICAgICAgW3BhZ2VdPVwicGFnZVwiXHJcbiAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCJcclxuICAgICAgW3Nob3dIZWFkZXJGaWx0ZXJzXT1cInNob3dIZWFkZXJGaWx0ZXJzXCJcclxuICAgICAgWyhmaWx0ZXJzSHRtbFRlbXBsYXRlKV09XCJmaWx0ZXJzSHRtbFRlbXBsYXRlXCJcclxuICAgICAgW3ByZXNlbnRhdGlvblNldHRpbmdzXT1cInByZXNlbnRhdGlvblNldHRpbmdzXCJcclxuICAgICAgKGxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgW3NlbGVjdEtleU9ubHldPVwic2VsZWN0S2V5T25seVwiXHJcbiAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxyXG4gICAgICBba2V5XT1cImtleVwiXHJcbiAgICAgIFsoc2VsZWN0ZWRJdGVtcyldPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgIChzZWxlY3RlZEl0ZW1zQ2hhbmdlKT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZCk9XCJzZWFyY2hGaWVsZFZhbHVlQ2hhbmdlcygkZXZlbnQpXCJcclxuICAgICAgW3NlYXJjaE9uSW5pdF09XCJzZWFyY2hPbkluaXRcIlxyXG4gICAgICBbc2hvd0V4cG9ydEJ1dHRvbl09XCJzaG93RXhwb3J0QnV0dG9uXCJcclxuICAgICAgW3Nob3dHbG9iYWxTZWFyY2hdPVwic2hvd0dsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXT1cImlzU2VhcmNoQnV0dG9uRGlzYWJsZWRcIlxyXG4gICAgICBbc2hvd0NhbGVuZGVyVmlld109XCJzaG93Q2FsZW5kZXJWaWV3XCJcclxuICAgICAgW3Nob3dDYXJkVmlld109XCJzaG93Q2FyZFZpZXdcIlxyXG4gICAgICBbc2hvd0thbmJhblZpZXddPVwic2hvd0thbmJhblZpZXdcIlxyXG4gICAgICBbc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdF09XCJzaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0XCJcclxuICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgIFtncm91cEJ5XT1cImdyb3VwQnlcIlxyXG4gICAgICBbY3VkQ29tcG9uZW50XT1cImN1ZENvbXBvbmVudFwiXHJcbiAgICAgIFttb2RhbFNpemVdPVwibW9kYWxTaXplXCIgXHJcbiAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgIFtwYWdlJF09XCJwYWdlJFwiXHJcbiAgICAgIFtlbnRpdHlJbmZvXT1cImVudGl0eUluZm9cIlxyXG4gICAgICAoY2FsZW5kYXJFdmVudENsaWNrKT1cImhhbmRsZUNhbGVuZGFyRXZlbnRDbGljaygkZXZlbnQpXCJcclxuICAgICAgKHN0YXR1c0ZpbHRlckNoYW5nZWQpPVwib25TdGF0dXNGaWx0ZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICBbc2hvd0luZm9CdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgIFtzaG93RG93bmxvYWRCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd05vdGVCdXR0b25dPVwidHJ1ZVwiXHJcbiAgICAgIFtzaG93QWN0aW9uQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2l6aW5nTW9kZV09XCJzaXppbmdNb2RlXCJcclxuICAgID48L1RzaS1HZW5lcmljLUdyaWQ+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbjwvZGl2PlxyXG4iXX0=
1054
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsNkJBQTZCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFleEksT0FBTyxFQUFFLHNC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QUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFTTyxhQUFhO3NCQUF6QixLQUFLO2dCQW1CTyxZQUFZO3NCQUF4QixLQUFLO2dCQVlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkErd0JQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIERpc3BsYXlUeXBlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEFjdGlvblBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2VudW1zL2FjdGlvbi1wbGFjZW1lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zZWxlY3Rpb24tbW9kZSc7XHJcbmltcG9ydCB7IEdyaWRTaXppbmdNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zaXppbmctbW9kZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgdG9Eb3ROZXRDYW1lbENhc2UgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvY29tbW9uLmZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IG9wZW5BY3Rpb25MaXN0LCBvcGVuRHluYW1pY0Zvcm1Nb2RhbENvbXBvbmVudCwgb3Blbk1vZGFsVXBsb2FkR3JpZCwgb3Blbk5vdGVzTGlzdCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQsIEdyaWRDb2x1bW4sIElDdXN0b21Db2x1bW5TY2hlbWEsIElHcmlkQ29uZmlndXJhdGlvbiwgSU1vZGFsU2l6ZSwgSVBhZ2UsIElQYWdlZFJlcXVlc3QsIElQYWdlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgb2NjdXJlbmNlSW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IEV2ZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbi9ldmVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgTm90ZXNHcm91cGVkQnlVc2VyUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvTm90ZXMvTm90ZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJlc2VudGF0aW9uLXNldHRpbmdzL3ByZXNlbnRhdGlvbi1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVcGxvYWRHZW5lcmljRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL3VwbG9hZC1nZW5lcmljLWZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Ob3RlL05vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktZm9ybS1tb2RhbC1mb290ZXIvdHNpLWZvcm0tbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1ub3Rlcy1hdmVydGlyL3RzaS1ub3Rlcy1hdmVydGlyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1wb3B1cC10ZXh0LXZpZXdlci90c2ktcG9wdXAtdGV4dC12aWV3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2Rpc2NyaW1pbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IERpc2NyaW1pbmF0b3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQvZGlzY3JpbWluYXRvci1yZXNwb25zZSc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUnO1xyXG5cclxuLyoqXHJcbiAqIGBDb2xvbm5lUGVyc29ubmFsaXNlZS5UeXBlYCAodGhlIGBUeXBlQ29sb25uZUVudW1gIHZhbHVlcykgLT4gZ3JpZCBkaXNwbGF5IHR5cGUuIFNldHRpbmcgYSByZWFsXHJcbiAqIGRpc3BsYXkgdHlwZSBpcyB3aGF0IGxldHMgdGhlIGdyaWQgZGVyaXZlIGBmaWx0ZXJJbnB1dFR5cGVgLCBgaXNOdW1lcmljYCBhbmQgYG51bU9mRGVjaW1hbGAgb24gaXRzXHJcbiAqIG93biBhbmQgcmVuZGVyIHRoZSBjZWxsIGxpa2UgYSBuYXRpdmUgY29sdW1uLlxyXG4gKlxyXG4gKiBTaGFyZWQgYnkgYm90aCBtZXRhZGF0YSBzb3VyY2VzOiB0aGUgZ3JpZCByZXNwb25zZSBub3cgcmVwb3J0cyB0aGlzIHNhbWUgcmF3IHZvY2FidWxhcnksIHNvIHRoZXJlXHJcbiAqIGlzIG5vdGhpbmcgbGVmdCB0byB0cmFuc2xhdGUgYmV0d2VlbiB0aGVtLlxyXG4gKi9cclxuY29uc3QgQ1VTVE9NX0NPTFVNTl9ESVNQTEFZX1RZUEVTOiBSZWNvcmQ8c3RyaW5nLCBEaXNwbGF5VHlwZXM+ID0ge1xyXG4gIElOVDogRGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWSxcclxuICBERUNJTUFMOiBEaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZLFxyXG4gIEZMT0FUOiBEaXNwbGF5VHlwZXMuREVDSU1BTF9ESVNQTEFZLFxyXG4gIEJPT0xFQU46IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gIFNUUklORzogRGlzcGxheVR5cGVzLlRFWFRfRElTUExBWSxcclxuICBCSU5BSVJFOiBEaXNwbGF5VHlwZXMuVEVYVF9ESVNQTEFZLFxyXG4gIC8vIFJlYWQgcGF0aCBvbmx5IOKAlCBEQVRFIGhhcyBubyBzdG9yYWdlIGNvbHVtbiBhbmQgbm8gZm9ybSBpbnB1dC5cclxuICBEQVRFOiBEaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZLFxyXG4gIERBVEVUSU1FOiBEaXNwbGF5VHlwZXMuREFURV9ESVNQTEFZLFxyXG59O1xyXG5cclxuLy8gU2VydmVyLXNpZGUgZ3JvdXAtYnkgY29sdW1uIGZvciB0aGUgd29ya2Zsb3ctZXRhdCBLYW5iYW4gdmFyaWFudC4gR3JvdXBpbmcgaXMgcmVzb2x2ZWQgdmlhXHJcbi8vIHJlZmxlY3Rpb24gYWdhaW5zdCB0aGUgcXVlcmllZCBlbnRpdHkgdHlwZSAoc2VlIFF1ZXJ5YWJsZUV4dGVuc2lvbnMuQXBwbHlHcm91cGluZ0FzeW5jIGluXHJcbi8vIFRzaS1TaGFyZWRLZXJuZWwpLCBzbyB0aGlzIG11c3QgbWF0Y2ggdGhlIGVudGl0eSdzIFdvcmtmbG93RXRhdCBwcm9wZXJ0eSBuYW1lLlxyXG5jb25zdCBXT1JLRkxPV19FVEFUX0dST1VQX0JZX0ZJRUxEID0gJ3dvcmtmbG93RXRhdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUNydWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVHNpTm90aWZpY2F0aW9uU2VydmljZV0sXHJcbn0pIC8qLCBPbkNoYW5nZXMqL1xyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICBidXR0b25UeXBlID0gQnV0dG9uVHlwZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgY29uZmlnTW9kZUJ1dHRvbklkOiBzdHJpbmcgPSBcImNvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdFwiXHJcbiAgc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWUgPSBcImNvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdC1zYXZlLXByb3BlcnRpZXNcIjtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcblxyXG4gIGl0ZW1zPzogYW55W107XHJcblxyXG4gIHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCA9IHt9O1xyXG5cclxuICBwYWdlOiBJUGFnZTxhbnk+ID0ge1xyXG4gICAgaXRlbXM6IFtdLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgcGFnZU51bWJlcjogMSxcclxuICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHJvd3MgPSAxO1xyXG4gIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBmaWx0ZXJzSHRtbFRlbXBsYXRlPzogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBfc2VhcmNoT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfbW9kYWxEYXRhOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkQ29tcG9uZW50PzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5wdXRzXHJcbiAgQElucHV0KCkgc2V0IG1vZGFsRGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9tb2RhbERhdGEgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGdyaWRDb25maWd1cmF0aW9uPzogSUdyaWRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBJbnB1dCgpIGRlc2NyaW1pbmF0b3JWYWx1ZT86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHByZXNlbnRhdGlvblNldHRpbmdzPzogUHJlc2VudGF0aW9uU2V0dGluZ1xyXG4gIEBJbnB1dCgpIHByZXZlbnRBZGRFdmVudD86IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpIHNldCBmb3JtRW5kcG9pbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1FbmRwb2ludCA9IGAke3ZhbHVlfS9nZXRhbGxwYWdlZGA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb3JtRW5kcG9pbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybU5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGZvcm1OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybU5hbWU7XHJcbiAgfVxyXG5cclxuICBzZXQgZm9ybU5hbWUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZm9ybU5hbWUgPSB2YWx1ZTtcclxuICAgIC8vIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTZWFyY2hCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLyBASW5wdXQoKSBmb3JtTmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SGVhZGVyRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dFZGl0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q29uc3VsdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dOb3RlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RG93bmxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SW5mb0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0R1cGxpY2F0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Zvcm1CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q2FyZFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RnJvbU91dGxvb2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93S2FuYmFuVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvLyBSZXNvbHZlcyBvbmNlIGluaXRpYWxpc2VTaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0J3MgSFRUUCBjaGVjayBzZXR0bGVzOyBhd2FpdGVkIGJ5XHJcbiAgLy8gdG9nZ2xlS2FuYmFuVmlldyBzbyBpdCBuZXZlciBwaWNrcyB0aGUgd3JvbmcgZ3JvdXBCeSBvbiBhIG5vdC15ZXQtcmVzb2x2ZWQgdmFyaWFudC5cclxuICBwcml2YXRlIF93b3JrZmxvd0V0YXRLYW5iYW5DaGVjazogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG5cclxuICAvLyBTZXJ2ZXItc2lkZSBncm91cC1ieSBjb2x1bW4sIGFjdGl2ZSBvbmx5IHdoaWxlIHRoZSBLYW5iYW4gdmlldyBpcyBzaG93biAocmVzb2x2ZWQgZnJvbVxyXG4gIC8vIEVudGl0eUluZm8uc3RhdHVzQ29sdW1uTmFtZSwgb3IgV09SS0ZMT1dfRVRBVF9HUk9VUF9CWV9GSUVMRCBmb3IgdGhlIHdvcmtmbG93LWV0YXQgdmFyaWFudCk7XHJcbiAgLy8gcGFzc2VkIGRvd24gdG8gdGhlIGdyaWQgc28gZ3JpZC1kcml2ZW4gcmVsb2FkcyAoa2FuYmFuIHBhZ2luYXRpb24sIHNlYXJjaCkga2VlcCB0aGUgZ3JvdXBpbmcuXHJcbiAgZ3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNhbGVuZGVyU2NoZW1hOiBFdmVudFNjaGVtYSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaXppbmdNb2RlOiBHcmlkU2l6aW5nTW9kZSA9IEdyaWRTaXppbmdNb2RlLkZpbGw7XHJcblxyXG4gIC8vZ3JpZCBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3RLZXlPbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmU7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIF9idXNpbmVzc0NsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGNvbHVtbnMgYXJlIHRoZSBzYW1lIHNldCB3aGljaGV2ZXIgc291cmNlIGRlbGl2ZXJzIHRoZW0sIHNvIHRoZXkgYXJlIHJlZ2lzdGVyZWQgZXhhY3RseVxyXG4gICAqIG9uY2UuIExhdGNoZWQgYnkgd2hpY2hldmVyIHNvdXJjZSBnZXRzIHRoZXJlIGZpcnN0OyByZXNldCB3aGVuIHRoZSBlbnRpdHkgY2hhbmdlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9jdXN0b21Db2x1bW5zUmVnaXN0ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgLy8gQSBkaWZmZXJlbnQgZW50aXR5IG1lYW5zIGEgZGlmZmVyZW50IHNldCBvZiBjdXN0b20gY29sdW1ucy5cclxuICAgIHRoaXMuX2N1c3RvbUNvbHVtbnNSZWdpc3RlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX2J1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKTtcclxuXHJcbiAgICAgIHRoaXMuX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZS5nZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUodGhpcy5fYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzKSA9PiB0aGlzLl9yZWdpc3RlckN1c3RvbUNvbHVtbnNGcm9tRGVmaW5pdGlvbnMocmVzLmZsYXRNYXAociA9PiByLmNvbG9ubmVzKSksXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hPbkluaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hPbkluaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0O1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dSZXBvcnRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGV4dHJhRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+KCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNvbHVtbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBvbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb24gT3V0cHV0c1xyXG4gIGNsaWNrQ291bnQgPSAxO1xyXG4gIGN1cnJlbnRJY29uID0gXCJwaSBwaS1hbGlnbi1qdXN0aWZ5XCI7XHJcbiAgY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfbGlzdF92aWV3XCI7XHJcblxyXG4gIHZpZXdPcHRpb25zOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIHBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2dTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dEYXRhU2VydmljZTogRGlhbG9nRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVwbG9hZEdlbmVyaWNGaWNoaWVyU2VydmljZTogVXBsb2FkR2VuZXJpY0ZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VudGl0eUNvbmZpZ1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3Rlc1NlcnZpY2U6IE5vdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9kaXNjcmltaW5hdG9yU2VydmljZTogRGlzY3JpbWluYXRvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2U6IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gZ3JpZCBzdGF0ZVxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LmdldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQucmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAvLyB9XHJcblxyXG4gIC8vIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIGdldFdvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50QnVzaW5lc3NDbGFzcygpIHtcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ2xhc3NGcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgd29ya2Zsb3cgc3RhdGUgZm9ybTonLCBlcnJvcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMobmV3U2VhcmNoRmllbGRWYWx1ZXM6IEFycmF5PFNlYXJjaEZpZWxkPikge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQuZW1pdChuZXdTZWFyY2hGaWVsZFZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SGVhZGVyRmlsdGVycyA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSAnaGlkZV9maWx0ZXInO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSAncGkgcGktZmlsdGVyLXNsYXNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9ICdzaG93X2ZpbHRlcic7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnMgPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnY29sdW1ucyBjYW50IGJlIG51bGwgb3IgdW5kZWZpbmVkLCBkZXZlbG9wcGVyIG11c3Qgc2V0IGNvbHVtbnMgb2YgZ3JpZCAhJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2luaXRTZWxlY3RlZENvbHVtbnMoKTtcclxuXHJcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3RfdmlldycpLFxyXG4gICAgICAgIGljb246ICdwaSBwaS1hbGlnbi1qdXN0aWZ5JyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUxpc3RWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiKSxcclxuICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYXJkX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktaWQtY2FyZCcsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVDYXJkVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktdGgtbGFyZ2UnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlS2FuYmFuVmlldygpXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5faW5pdE1vZGVscygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFNlbGVjdGVkQ29sdW1ucygpIHtcclxuICAvLyBFYWNoIGVudHJ5IGlzIFtlbmFibGVkIGZsYWcsIGNvbHVtbiBkZWZpbml0aW9uXVxyXG4gIGNvbnN0IGFjdGlvbkNvbHVtbnM6IFtib29sZWFuLCBHcmlkQ29sdW1uXVtdID0gW1xyXG4gICAgW3RoaXMuc2hvd0NvbnN1bHRCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfY29uc3VsdCcsIGZpZWxkOiAnY29uc3VsdCcsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktZXllJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtYmx1ZS01MDAnLCBpc0Zyb3plbjogdHJ1ZSwgb3JkZXI6IDAsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnQ29uc3VsdGVyJywgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICB9XSxcclxuICAgIFt0aGlzLnNob3dEZWxldGVCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZGVsZXRlJywgZmllbGQ6ICdkZWxldGUnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTggcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LXJlZC01MDAnLCBpc0Zyb3plbjogdHJ1ZSwgb3JkZXI6IDEsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnRGVsZXRlJywgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93RG93bmxvYWRCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZG93bmxvYWQnLCBmaWVsZDogJ2Rvd25sb2FkJywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1kb3dubG9hZCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAyLCB0b29sVGlwVGV4dDogJ1TDqWzDqWNoYXJnZXInLCBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd0luZm9CdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfaW5mbycsIGZpZWxkOiAnaW5mbycsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktaW5mbycsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAzLCB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2luZm8nLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd1VwbG9hZEJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50JywgZmllbGQ6ICd1cGxvYWQnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiA0LCB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2F0dGFjaG1lbnQnLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd05vdGVCdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfbm90ZXMnLCBidXR0b25MYWJlbDogJycsIGZpZWxkOiAnbm90ZXMnLCBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNvbW1lbnQnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogNSwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19ub3RlcycsXHJcbiAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSwgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93RWRpdEJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19lZGl0JywgZmllbGQ6ICdlZGl0JywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wZW5jaWwnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogNiwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50LklubGluZSxcclxuICAgIH1dLFxyXG4gICAgW3RoaXMuc2hvd0R1cGxpY2F0ZUJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19kdXBsaWNhdGUnLCBmaWVsZDogJ2R1cGxpY2F0ZScsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktY2xvbmUnLCBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1wdXJwbGUtNTAwJywgaXNGcm96ZW46IHRydWUsIG9yZGVyOiA3LFxyXG4gICAgICB0b29sVGlwVGV4dDogJ0R1cGxpcXVlcicsIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgfV0sXHJcbiAgICBbdGhpcy5zaG93Rm9ybUJ1dHRvbiwge1xyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19mb3JtJywgZmllbGQ6ICdmb3JtJywgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib29rJywgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtaW5kaWdvLTUwMCcsIGlzRnJvemVuOiB0cnVlLCBvcmRlcjogOCxcclxuICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19mb3JtJywgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICB9XSxcclxuICAgIFt0aGlzLnNob3dBY3Rpb25CdXR0b24sIHtcclxuICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfYWN0aW9uJywgYnV0dG9uTGFiZWw6ICcnLCBmaWVsZDogJ0FjdGlvbkVSUCcsIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktYm9sdCcsIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgaXNGcm96ZW46IHRydWUsIG9yZGVyOiAxMCwgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19hY3Rpb24nLFxyXG4gICAgICBpc0ljb25CdXR0b246IHRydWUsIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgIH1dLFxyXG4gIF07XHJcblxyXG4gIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Db2x1bW5zXHJcbiAgICAuZmlsdGVyKChbZW5hYmxlZF0pID0+IGVuYWJsZWQpXHJcbiAgICAubWFwKChbLCBjb2x1bW5dKSA9PiBjb2x1bW4pO1xyXG5cclxuICBjb25zdCBhbGxDb2x1bW5zID0gWy4uLmJ1dHRvbnMsIC4uLnRoaXMuY29sdW1uc107XHJcblxyXG4gIC8vIE9yZGVyZWQgY29sdW1ucyBmaXJzdCAoc29ydGVkIGJ5IG9yZGVyKSwgdGhlbiB0aGUgcmVzdCDigJQgYXNzaWduZWQgb25jZVxyXG4gIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgLi4uYWxsQ29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgLi4uYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICBdLm1hcChjb2x1bW4gPT4gKHtcclxuICAgIC4uLmNvbHVtbixcclxuICAgIHRyYW5zbGF0ZWRIZWFkZXI6IGNvbHVtbi5oZWFkZXJcclxuICAgICAgPyB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyKVxyXG4gICAgICA6IGNvbHVtbi5oZWFkZXIsXHJcbiAgfSkpO1xyXG59XHJcblxyXG5cclxuICAvKiB0b2dnbGVIZWFkZXJGaWx0ZXJzKCl7XHJcbiAgICBpZih0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKXtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcInNob3dfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy90aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICB9ICovXHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlXHJcbiAgICAgID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IHRoaXMucGFnZS50b3RhbENvdW50IC0gdGhpcy5wYWdlLnBhZ2VTaXplXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAwIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhenlMb2FkXHJcbiAgICovXHJcbiAgLy9maXJzdCA9PT4gcGFnZS5wYWdlTnVtYmVyXHJcbiAgLy9yb3dzID09PiBwYWdlLnBhZ2VTaXplXHJcbiAgLy90aGlzLnBhZ2UuaXRlbXMubGVuZ3RoID09PiB0b3RhbCBjb3VudFxyXG5cclxuICBvcGVuTmV3KCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXZlbnRBZGRFdmVudCkge1xyXG4gICAgICB0aGlzLl9vcGVuTW9kYWwoQ29tcG9uZW50X01vZGVzLkNSRUFURSwgbnVsbCwgdGhpcy5fbW9kYWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgIGtleTogdW5kZWZpbmVkLFxyXG4gICAgICBmaWVsZDogJ2FkZCcsXHJcbiAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZChldmVudDogQnV0dG9uQ2xpY2tSZXN1bHQpIHtcclxuXHJcbiAgICBsZXQgaXRlbUtleTogYW55ID0gZXZlbnQuc2VsZWN0S2V5T25seSA/IGV2ZW50LmtleSA6IGV2ZW50LmtleVt0aGlzLmtleV07XHJcblxyXG4gICAgY29uc3QgZXhjbHVkZWQgPSBbXCJOb3Rlc1wiLCBcIkZpY2hpZXJcIl07XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICFleGNsdWRlZC5pbmNsdWRlcyh0aGlzLmJ1c2luZXNzQ2xhc3MpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YVNlcnZpY2Uuc2V0RGF0YSh7IGlkOiBpdGVtS2V5LCBjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5maWVsZCA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgdGhpcy5fZGVsZXRlUm93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnY29uc3VsdCcpIHtcclxuICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2R1cGxpY2F0ZScpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJCdXNzaW5lc3MgY2xhc3MgaXMgbm90IGRlZmluZWQgIVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZHVwbGljYXRlUm93KGl0ZW1LZXkpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ3VwbG9hZCcpIHtcclxuICAgICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7IGF0dGFjaGVkVG9JZDogaXRlbUtleSwgYXR0YWNoZWRUb0J1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Nb2RhbFVwbG9hZEdyaWQodGhpcy5faW5qZWN0b3IsIGNvbmYpXHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ25vdGVzJykge1xyXG5cclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk5vdGVzTGlzdCh0aGlzLl9pbmplY3Rvcik7XHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2Rvd25sb2FkJykge1xyXG5cclxuICAgICAgdGhpcy51cGxvYWRHZW5lcmljRmljaGllclNlcnZpY2UuZ2V0QnlJZChpdGVtS2V5KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUZpbGUoZGF0YS5jb250ZW51LCBkYXRhLm5vbUZpY2hpZXJDb21wbGV0ISk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnaW5mbycpIHtcclxuXHJcbiAgICAgIHRoaXMucmVjb3JkSW5mb1BvcHVwU2VydmljZVxyXG4gICAgICAgIC5nZXRJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcyEsIGl0ZW1LZXkpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2U7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID1cclxuICAgICAgICAgICAgICAnVUlEIDogICcgK1xyXG4gICAgICAgICAgICAgIGl0ZW1LZXkgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBieSA6ICAnICtcclxuICAgICAgICAgICAgICBkYXRhLmNyZWF0aW9uVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBieSA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEubW9kaWZVc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVTYWlzaWUgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVNb2RpZjtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIFVpZDogaXRlbUtleSxcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgICAgIGNyZWF0aW9uVXNlcjogZGF0YS5jcmVhdGlvblVzZXIsXHJcbiAgICAgICAgICAgICAgICBtb2RpZlVzZXI6IGRhdGEubW9kaWZVc2VyLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVNhaXNpZTogZGF0YS5kYXRlU2Fpc2llLFxyXG4gICAgICAgICAgICAgICAgZGF0ZU1vZGlmOiBkYXRhLmRhdGVNb2RpZixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnOTByZW0nLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzgwcmVtJyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICBjb25mXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdmb3JtJyl7XHJcbiAgICAgIGlmKCF0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBmb3JtRGVzY3JpbWluYXRvclZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICB7XHJcbiAgICAgICAgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZvcm1EZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgZGlzY3JpbWluYXRvclJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXREaXNjcmltaW5hdG9yKHRoaXMuYnVzaW5lc3NDbGFzcywgaXRlbUtleSk7XHJcbiAgICAgICAgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZSA9IGRpc2NyaW1pbmF0b3JSZXNwb25zZT8uZGlzY3JpbWluYXRvcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9kYWxDb25maWcgPSB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgc291cmNlQnVzaW5lc3NDbGFzczoge1xyXG4gICAgICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JWYWx1ZTogZm9ybURlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplIS5oZWlnaHQsXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkR5bmFtaWNGb3JtTW9kYWxDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIG1vZGFsQ29uZmlnKVxyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9ZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ0FjdGlvbkVSUCcpIHtcclxuXHJcbiAgICAgIGxldCBvY2N1cmVuY2VJbmZvczogb2NjdXJlbmNlSW5mb3MgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzID8/ICcnLFxyXG4gICAgICAgIG9jY3VyZW5jZTogaXRlbUtleVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuQWN0aW9uTGlzdCh0aGlzLl9pbmplY3RvciwgeyBvY2N1cmVuY2VJbmZvczogb2NjdXJlbmNlSW5mb3MgfSk7XHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgICAga2V5OiBldmVudC5rZXksXHJcbiAgICAgICAgZmllbGQ6IGV2ZW50LmZpZWxkLFxyXG4gICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlRmlsZShiYXNlNjREYXRhOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgbG9hZChldmVudDogeyByZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0OyBpc0ZvckNhbGVuZGFyOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcclxuICAgIHRoaXMuX3NldGZvcm1FbmRwb2ludEJvZHkoKTtcclxuICAgIHRoaXMuX2xvYWREUyhldmVudC5pc0ZvckNhbGVuZGFyKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJdGVtc0NoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3NldGZvcm1FbmRwb2ludEJvZHkoKTogdm9pZCB7XHJcbiAgICBsZXQgb3g6IGFueSA9IHRoaXMuX2Nsb25lUGFnZWRSZXF1ZXN0KHRoaXMucGFnZWRSZXF1ZXN0KTtcclxuICAgIG94WydnZXRBbGxEYXRhJ10gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnRCb2R5ID0gSlNPTi5zdHJpbmdpZnkob3gpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE1vZGVscygpIHtcclxuXHJcbiAgICB0aGlzLnBhZ2UgPSB7XHJcbiAgICAgIGl0ZW1zOiBbXSxcclxuICAgICAgcGFnZVNpemU6IDEwLFxyXG4gICAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiAxMCxcclxuICAgICAgc2tpcENvdW50OiAwLFxyXG4gICAgICBzb3J0aW5nOiBbXSxcclxuICAgICAga2V5d29yZDogJycsXHJcbiAgICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgICBnZXRBbGxEYXRhOiBmYWxzZSxcclxuICAgICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkRFMoaXNGb3JDYWxlbmRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgdGhpcy5wYWdlLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlJC5uZXh0KHRoaXMucGFnZSk7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgLi4udGhpcy5wYWdlZFJlcXVlc3QsXHJcbiAgICAgIGdldEFsbERhdGE6IGlzRm9yQ2FsZW5kZXIsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZ2V0QWxsUGFnZWQodGhpcy5wYWdlZFJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucGFnZSxcclxuICAgICAgICAgICAgICBpdGVtcyA6IHZhbHVlLml0ZW1zLFxyXG4gICAgICAgICAgICAgIHRvdGFsQ291bnQgOiB2YWx1ZS50b3RhbENvdW50LFxyXG4gICAgICAgICAgICAgIHN1bW1hcmllcyA6IHZhbHVlLnN1bW1hcmllcyA/IHZhbHVlLnN1bW1hcmllcyA6IFtdLFxyXG4gICAgICAgICAgICAgIGdyb3VwcyA6IHZhbHVlLmdyb3VwcyxcclxuICAgICAgICAgICAgICB0b3RhbFBhZ2VzIDogKHRoaXMucGFnZS50b3RhbENvdW50IC0gICh0aGlzLnBhZ2UudG90YWxDb3VudCAlIHRoaXMucGFnZS5wYWdlU2l6ZSkpIC8gdGhpcy5wYWdlLnBhZ2VTaXplICsgMSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dOb3RlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTm90ZXNDb3VudHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2Vjb25kIHNvdXJjZSwgZXF1aXZhbGVudCB0byB0aGUgZGVmaW5pdGlvbnMgYW5kIHRoZSBvbmx5IG9uZSB0aGF0IHJlYWNoZXMgc2NyZWVuc1xyXG4gICAgICAgICAgICAvLyB0aGV5IGNhbm5vdCBzZXJ2ZTogdGhvc2UgdGhhdCBuZXZlciBzZXQgYGJ1c2luZXNzQ2xhc3NgLCBhbmQgdGhvc2Ugd2hvc2VcclxuICAgICAgICAgICAgLy8gYGJ1c2luZXNzQ2xhc3NgIGlzIGEgcm91dGUgc2VnbWVudCBvciB2aWV3IG5hbWUgcmF0aGVyIHRoYW4gYW4gZW50aXR5IGNsYXNzIG5hbWUsIHNvXHJcbiAgICAgICAgICAgIC8vIGl0IGRvZXMgbm90IG1hdGNoIGBDb2xvbm5lUGVyc29ubmFsaXNlZS5DbGFzc2VgLiBUaGUgc2NoZW1hIGlzIGRlcml2ZWQgc2VydmVyLXNpZGVcclxuICAgICAgICAgICAgLy8gZnJvbSBgdHlwZW9mKFRFbnRpdHkpLk5hbWVgLCBzbyBpdCBhbHdheXMgbWF0Y2hlcy4gV2hpY2hldmVyIHNvdXJjZSBhbnN3ZXJzIGZpcnN0IHdpbnMuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY3VzdG9tQ29sdW1uc1JlZ2lzdGVyZWQgJiYgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlckN1c3RvbUNvbHVtbnNGcm9tU2NoZW1hKHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UkLm5leHQodmFsdWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBEZWZpbml0aW9ucyBzb3VyY2Ug4oCUIHJlYWNoZWQgd2hlcmV2ZXIgYGJ1c2luZXNzQ2xhc3NgIG1hdGNoZXMgYENvbG9ubmVQZXJzb25uYWxpc2VlLkNsYXNzZWAuICovXHJcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDdXN0b21Db2x1bW5zRnJvbURlZmluaXRpb25zKGRlZmluaXRpb25zOiBDb2xvbm5lUGVyc29ubmFsaXNlZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWdpc3RlckN1c3RvbUNvbHVtbnMoZGVmaW5pdGlvbnMubWFwPEdyaWRDb2x1bW4+KGNwID0+ICh7XHJcbiAgICAgIC8vIFRoZSBBUEkgY2FtZWxDYXNlcyBgTm9tYCB3aGVuIGl0IHdyaXRlcyB0aGUgY29sdW1uJ3MgdmFsdWUgb250byBlYWNoIHJvdywgc28gdGhlIGZpZWxkIGhhc1xyXG4gICAgICAvLyB0byBmb2xsb3cgdGhlIHNhbWUgcG9saWN5IG9yIHRoZSBjZWxsIGxvb2t1cCBtaXNzZXMuXHJcbiAgICAgIGZpZWxkOiB0b0RvdE5ldENhbWVsQ2FzZShjcC5ub20pLFxyXG4gICAgICBoZWFkZXI6IGNwLmxpYmVsbGUsXHJcbiAgICAgIHRyYW5zbGF0ZWRIZWFkZXI6IGNwLmxpYmVsbGUsIC8vIGEgdXNlci10eXBlZCBsYWJlbCBpcyBub3QgYSB0cmFuc2xhdGlvbiBrZXlcclxuICAgICAgdHlwZTogQ1VTVE9NX0NPTFVNTl9ESVNQTEFZX1RZUEVTWyhjcC50eXBlID8/ICcnKS50b1VwcGVyQ2FzZSgpXSA/PyBEaXNwbGF5VHlwZXMuVEVYVF9ESVNQTEFZLFxyXG4gICAgICBpc0N1c3RvbUNvbHVtbjogdHJ1ZSxcclxuICAgIH0pKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHcmlkLXJlc3BvbnNlIHNvdXJjZS4gYGNvbHVtbk5hbWVgIGlzIGNhbWVsQ2FzZWQgYnkgdGhlIHNhbWUgc2VyaWFsaXplciBwYXNzIHRoYXQgd3JpdGVzIHRoZSByb3dcclxuICAgKiBwcm9wZXJ0aWVzLCBhbmQgYHR5cGVgIGlzIHRoZSBzYW1lIHJhdyB2b2NhYnVsYXJ5IHRoZSBkZWZpbml0aW9ucyByZXBvcnQg4oCUIHNvIHRoaXMgcHJvZHVjZXMgYW5cclxuICAgKiBpZGVudGljYWwgY29sdW1uLCBub3QgYSBkZWdyYWRlZCBvbmUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDdXN0b21Db2x1bW5zRnJvbVNjaGVtYShzY2hlbWE6IElDdXN0b21Db2x1bW5TY2hlbWFbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVnaXN0ZXJDdXN0b21Db2x1bW5zKHNjaGVtYS5tYXA8R3JpZENvbHVtbj4oY2NzID0+ICh7XHJcbiAgICAgIGZpZWxkOiBjY3MuY29sdW1uTmFtZSxcclxuICAgICAgaGVhZGVyOiBjY3MuY29sdW1uTGliZWxsZSA/PyBjY3MuY29sdW1uTmFtZSxcclxuICAgICAgdHJhbnNsYXRlZEhlYWRlcjogY2NzLmNvbHVtbkxpYmVsbGUgPz8gY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgIHR5cGU6IENVU1RPTV9DT0xVTU5fRElTUExBWV9UWVBFU1soY2NzLnR5cGUgPz8gJycpLnRvVXBwZXJDYXNlKCldID8/IERpc3BsYXlUeXBlcy5URVhUX0RJU1BMQVksXHJcbiAgICAgIGlzQ3VzdG9tQ29sdW1uOiB0cnVlLFxyXG4gICAgfSkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzaW5nbGUgcmVnaXN0cmF0aW9uIHBvaW50IOKAlCB3aGljaGV2ZXIgc291cmNlIGdvdCBoZXJlIGZpcnN0IGlzIHRoZSBvbmx5IG9uZSB0aGF0IHJ1bnMuXHJcbiAgICogQm90aCBkZXJpdmUgYGZpZWxkYCB3aXRoIHRoZSBzYW1lIGNhbWVsQ2FzZSBwb2xpY3ksIHNvIHRoZSBkZWR1cCBpcyBvbmx5IGEgZ3VhcmQgYWdhaW5zdCBhXHJcbiAgICogY3VzdG9tIGNvbHVtbiBjb2xsaWRpbmcgd2l0aCBhIG5hdGl2ZSBvbmUsIHdoaWNoIG11c3QgbmV2ZXIgYmUgcmVwbGFjZWQuXHJcbiAgICpcclxuICAgKiBBc3NpZ25zIGEgTkVXIGFycmF5OiBhbiBpbi1wbGFjZSBtdXRhdGlvbiBrZWVwcyB0aGUgc2FtZSByZWZlcmVuY2UsIHNvIEFuZ3VsYXIncyBpZGVudGl0eSBjaGVja1xyXG4gICAqIG5ldmVyIHJlLWludm9rZXMgdGhlIGdyaWQncyBgY29sdW1uc2Agc2V0dGVyIGFuZCB0aGUgY29sdW1uIGlzIG5ldmVyIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ3VzdG9tQ29sdW1ucyhjYW5kaWRhdGVzOiBHcmlkQ29sdW1uW10pOiB2b2lkIHtcclxuICAgIGlmICghY2FuZGlkYXRlcy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAvLyBUaGUgc291cmNlIGRlbGl2ZXJlZCDigJQgbm90aGluZyBlbHNlIHNob3VsZCByZWdpc3RlciBhZnRlciB0aGlzLCBldmVuIGlmIGV2ZXJ5IGNhbmRpZGF0ZVxyXG4gICAgLy8gdHVybnMgb3V0IHRvIGJlIGEgZHVwbGljYXRlLlxyXG4gICAgdGhpcy5fY3VzdG9tQ29sdW1uc1JlZ2lzdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGtub3duID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoYyA9PiBjLmZpZWxkPy50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICBjb25zdCB0b0FwcGVuZCA9IGNhbmRpZGF0ZXMuZmlsdGVyKGMgPT4gIWtub3duLmhhcyhjLmZpZWxkPy50b0xvd2VyQ2FzZSgpKSk7XHJcblxyXG4gICAgaWYgKCF0b0FwcGVuZC5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFsuLi50aGlzLnNlbGVjdGVkQ29sdW1ucywgLi4udG9BcHBlbmRdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTm90ZXNDb3VudHMoKSB7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnBhZ2UuaXRlbXMubWFwKHggPT4geFt0aGlzLmtleV0pXHJcbiAgICAgIC5maWx0ZXIoeCA9PiB4ICE9PSBudWxsICYmIHggIT09IHVuZGVmaW5lZClcclxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSk7XHJcblxyXG4gICAgaWYgKCFpZHMubGVuZ3RoIHx8ICF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubm90ZXNTZXJ2aWNlXHJcbiAgICAgIC5nZXROb3Rlc0NvdW50QnlSb3dzKHRoaXMuYnVzaW5lc3NDbGFzcywgaWRzKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxyXG4gICAgICAgICAgcmVzdWx0Lm1hcCh4ID0+IFt4LnJvd1VpZCwgeC5jb3VudF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcoaXRlbVt0aGlzLmtleV0pO1xyXG4gICAgICAgICAgY29uc3QgY291bnQgPSBtYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICAoaXRlbSBhcyBhbnkpLm5vdGVzQ291bnQgPSB0eXBlb2YgY291bnQgPT09ICdudW1iZXInID8gY291bnQgOiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VkaXRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuRURJVCwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuREVMRVRFLCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnN1bHRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuQ09OU1VMVCwgaXRlbUtleSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2R1cGxpY2F0ZVJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEUsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCkge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgTm8gZW50aXR5IGluZm8gZm91bmQgZm9yICR7dGhpcy5idXNpbmVzc0NsYXNzfWApO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vcGVuTW9kYWwobW9kZTogc3RyaW5nLCBpdGVtS2V5OiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5jcnVkU2VydmljZSEuaXNEdXBsaWNhdGUgPSBtb2RlID09PSBNb2Rlcy5kdXBsaWNhdGU7XHJcblxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGVycm9yKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWc7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kYWxTaXplICE9IG51bGwgJiYgdGhpcy5tb2RhbFNpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSwgZW50aXR5SW5mbzogdGhpcy5lbnRpdHlJbmZvLCAuLi50aGlzLmV4dHJhRGF0YSB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgIGZvb3RlcjogVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSwgLi4udGhpcy5leHRyYURhdGEgfSxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuY3VkQ29tcG9uZW50ID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUodGhpcy5jdWRDb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKHRoaXMuY3VkQ29tcG9uZW50LCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbChjb25mKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKGNvbmY/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChjb25mICYmIGNvbmY/LmRhdGE/LnJlZnJlc2hMaXN0KSB7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9uZVBhZ2VkUmVxdWVzdChyZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0KTogSVBhZ2VkUmVxdWVzdCB7XHJcbiAgICBsZXQgY2xvbmU6IElQYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiByZXF1ZXN0Lm1heFJlc3VsdENvdW50LFxyXG4gICAgICBza2lwQ291bnQ6IHJlcXVlc3Quc2tpcENvdW50LFxyXG4gICAgICBzb3J0aW5nOiByZXF1ZXN0LnNvcnRpbmcsXHJcbiAgICAgIGtleXdvcmQ6IHJlcXVlc3Qua2V5d29yZCxcclxuICAgICAgZmlsdGVyczogcmVxdWVzdC5maWx0ZXJzLFxyXG4gICAgICBnZXRBbGxEYXRhOiByZXF1ZXN0LmdldEFsbERhdGEsXHJcbiAgICAgIHN1bW1hcmllczogcmVxdWVzdC5zdW1tYXJpZXMsXHJcbiAgICAgIGdyb3VwQnk6IHJlcXVlc3QuZ3JvdXBCeSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGRpc3BsYXlTZWFyY2hGaWVsZHMoKSB7XHJcbiAgICB0aGlzLnNob3dTZWFyY2hGaWVsZCA9ICF0aGlzLnNob3dTZWFyY2hGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjYWxlbmRlclxyXG4gIGhhbmRsZUNhbGVuZGFyRXZlbnRDbGljayhpdGVtOiBhbnkpIHtcclxuICAgIHN3aXRjaCAoaXRlbS5tb2RlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ6XHJcbiAgICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFOlxyXG4gICAgICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBudWxsLHtpdGVtfSApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5FRElUOlxyXG4gICAgICAgIHRoaXMuX2VkaXRSb3coaXRlbS5pZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdpbmZvJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ2luZm8nLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ2Rvd25sb2FkJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGxvYWQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAndXBsb2FkJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3Rlcyc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKHsgZmllbGQ6ICdub3RlcycsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQWN0aW9uRVJQJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ0FjdGlvbkVSUCcsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlTGlzdFZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FsZW5kZXJWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gIXRoaXMuc2hvd0NhbGVuZGVyVmlldztcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIHRoaXMuX2xvYWREUyh0aGlzLnNob3dDYWxlbmRlclZpZXcpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktY2FsZW5kYXJcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDYXJkVmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gIXRoaXMuc2hvd0NhcmRWaWV3O1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIC8vIHRoaXMuX2xvYWREUyh0aGlzLnNob3dDYXJkVmlldyk7XHJcbiAgICB0aGlzLmN1cnJlbnRJY29uID0gXCJwaSBwaS1pZC1jYXJkXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhcmRfdmlld1wiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b2dnbGVLYW5iYW5WaWV3KCkge1xyXG4gICAgdGhpcy5zaG93S2FuYmFuVmlldyA9ICF0aGlzLnNob3dLYW5iYW5WaWV3O1xyXG4gICAgdGhpcy5zaG93Q2FyZFZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dLYW5iYW5WaWV3KSB7XHJcbiAgICAgIC8vIEdyb3VwIHNlcnZlci1zaWRlIHNvIGVhY2ggS2FuYmFuIGNvbHVtbiBnZXRzIGl0cyBvd24gcGFnZSBhbmQgaXRzIG93biBhY2N1cmF0ZVxyXG4gICAgICAvLyAodW5wYWdlZCkgdG90YWwgY291bnQ6IGJ5IHRoZSB3b3JrZmxvdy1ldGF0IGZpZWxkIGZvciB0aGF0IHZhcmlhbnQsIG90aGVyd2lzZSBieVxyXG4gICAgICAvLyB0aGUgZW50aXR5J3Mgc3RhdHVzIGNvbHVtbi4gQXdhaXQgdGhlIHdvcmtmbG93LWV0YXQgY2hlY2sgc28gYSB0b2dnbGUgdGhhdCByYWNlc1xyXG4gICAgICAvLyBhaGVhZCBvZiBpdCBjYW4ndCBsb2NrIGluIHRoZSB3cm9uZyBncm91cEJ5LlxyXG4gICAgICBhd2FpdCB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuICAgICAgYXdhaXQgdGhpcy5fd29ya2Zsb3dFdGF0S2FuYmFuQ2hlY2s7XHJcbiAgICAgIHRoaXMuZ3JvdXBCeSA9IHRoaXMuc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdFxyXG4gICAgICAgID8gV09SS0ZMT1dfRVRBVF9HUk9VUF9CWV9GSUVMRFxyXG4gICAgICAgIDogdGhpcy5lbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cEJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0geyAuLi50aGlzLnBhZ2VkUmVxdWVzdCwgZ3JvdXBCeTogdGhpcy5ncm91cEJ5IH07XHJcbiAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLXRoLWxhcmdlXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGVhckdyb3VwQnkoKSB7XHJcbiAgICB0aGlzLmdyb3VwQnkgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IHsgLi4udGhpcy5wYWdlZFJlcXVlc3QsIGdyb3VwQnk6IHVuZGVmaW5lZCB9O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdGNCcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5vcGVuTmV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlQWN0aW9uVmlld0NsaWNrKCkge1xyXG4gICAgdGhpcy5jbGlja0NvdW50Kys7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmNsaWNrQ291bnQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlTGlzdFZpZXcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLnRvZ2dsZUNhbGVuZGVyVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FyZFZpZXcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLnRvZ2dsZUthbmJhblZpZXcoKTtcclxuICAgICAgICB0aGlzLmNsaWNrQ291bnQgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmNsaWNrQ291bnQgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKG1vZGU6IENvbXBvbmVudF9Nb2RlcywgaXRlbUtleTogYW55KSB7XHJcbiAgICAvLyBUT0RPIEBNZWRBbGkgdG8gYmUgZml4ZWRcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MgJiYgdGhpcy5idXNpbmVzc0NsYXNzICE9PSBcIk5vdGVzXCIpIHtcclxuICAgICAgdGhpcy5ub3Rlc1NlcnZpY2UuZ2V0QWxlcnROb3RlcyhpdGVtS2V5Py50b1N0cmluZygpLCB0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBOb3Rlc0dyb3VwZWRCeVVzZXJSZXNwb25zZVtdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vcGVuTW9kYWwobW9kZSwgaXRlbUtleSwgdGhpcy5fbW9kYWxEYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihUc2lOb3Rlc0F2ZXJ0aXJDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICBkYXRhOiB7IGdyb3VwZWROb3RlczogcmVzcG9uc2UgfSxcclxuICAgICAgICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5TbWFsbC53aWR0aCxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uU21hbGwuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIG5vdGVzIGZvciBhbGVydCcsIGVycik7XHJcbiAgICAgICAgICB0aGlzLl9vcGVuTW9kYWwobW9kZSwgaXRlbUtleSwgdGhpcy5fbW9kYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdGF0dXNGaWx0ZXJDaGFuZ2VkKGV2dDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhldnQpXHJcbiAgfVxyXG5cclxuICBvbkltcG9ydENsaWNrZWQoKXtcclxuICAgIHRoaXMub25JbXBvcnRGcm9tT3V0bG9va0NsaWNrZWQuZW1pdCh7XHJcbiAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLnNlYXJjaEZpZWxkc1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2VTaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0KClcclxuICB7XHJcbiAgICBpZih0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICB7XHJcbiAgICAgIHRoaXMuX3dvcmtmbG93RXRhdEthbmJhbkNoZWNrID0gZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXREaXNjcmltaW5hdG9yKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8RGlzY3JpbWluYXRvclJlc3BvbnNlIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlLmdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzcywgaWQpKVxyXG5cclxuICAgICAgaWYgKGRpc2NyaW1pbmF0b3JSZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnJvcilcclxuICAgIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICBcclxuICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJib3JkZXItcmFkaXVzLTcgbWItMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBuby1wYWRcIiBcclxuICAgICpuZ0lmPVwiKHNob3dBZGRCdXR0b24gfHwgc2VhcmNoRmllbGRzIHx8IGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBzaG93UmVwb3J0aW5nXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYWRkX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfYWRkX3ZpZXdcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbk5ldygpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpZWxkc1wiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNob3dfc2VhcmNoX2ZpZWxkc19idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X21lbnVcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSBob3ZlcjpzaGFkb3ctNiB7eyBzaG93U2VhcmNoRmllbGQgPyAncC1idXR0b24tc2Vjb25kYXJ5JyA6ICdwLWJ1dHRvbi1zdWNjZXNzJyB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5U2VhcmNoRmllbGRzKClcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydEZyb21PdXRsb29rX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLWVudmVsb3BlXCIgXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2ltcG9ydF9mcm9tX291dGxvb2tcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbXBvcnRDbGlja2VkKClcIj4gXHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInRvZ2dsZV9hY3Rpb25zX3ZpZXdfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgICBbaWNvbl09XCJjdXJyZW50SWNvblwiXHJcbiAgICAgICAgICAgIFttb2RlbF09XCJ2aWV3T3B0aW9uc1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUFjdGlvblZpZXdDbGljaygpXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tcHJpbWFyeSBoLTJyZW0gaG92ZXI6c2hhZG93LTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDwhLS0gPFRzaS1CdXR0b25cclxuICAgICAgICAgICAgW2ljb25dPVwiY3VycmVudEljb25cIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXByaW1hcnkgIGgtMnJlbSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uVmlld0NsaWNrKClcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGFwcC1yZXBvcnRpbmcgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpXCIgXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiIFxyXG4gICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRCb2R5XT1cImZvcm1FbmRwb2ludEJvZHlcIiBcclxuICAgICAgICAgIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICBbcmVwb3J0RGlzY3JpbWluYXRvcl09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICAgICAgKHJlZnJlc2hEYXRhKT1cInJlZnJlc2goJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsdGVyc0h0bWxUZW1wbGF0ZV09XCJmaWx0ZXJzSHRtbFRlbXBsYXRlXCJcclxuICAgICAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgICAgIFtjdWRDb21wb25lbnRdPVwiY3VkQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICBbc2hvd05vdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dBY3Rpb25CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICA+PC9hcHAtcmVwb3J0aW5nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPGRpdj5cclxuXHJcbiAgICA8VHNpLUdlbmVyaWMtR3JpZFxyXG4gICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIlxyXG4gICAgICBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICBbc2hvd1NlYXJjaEZpZWxkXT1cInNob3dTZWFyY2hGaWVsZFwiXHJcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwic2VhcmNoRmllbGRzXCJcclxuICAgICAgW2Rlc2NyaW1pbmF0b3JWYWx1ZV09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXHJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIlxyXG4gICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXHJcbiAgICAgIFtzaG93SGVhZGVyRmlsdGVyc109XCJzaG93SGVhZGVyRmlsdGVyc1wiXHJcbiAgICAgIFsoZmlsdGVyc0h0bWxUZW1wbGF0ZSldPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtwcmVzZW50YXRpb25TZXR0aW5nc109XCJwcmVzZW50YXRpb25TZXR0aW5nc1wiXHJcbiAgICAgIChsb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWxlY3RLZXlPbmx5XT1cInNlbGVjdEtleU9ubHlcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgW2tleV09XCJrZXlcIlxyXG4gICAgICBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQpPVwic2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWFyY2hPbkluaXRdPVwic2VhcmNoT25Jbml0XCJcclxuICAgICAgW3Nob3dFeHBvcnRCdXR0b25dPVwic2hvd0V4cG9ydEJ1dHRvblwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbaXNTZWFyY2hCdXR0b25EaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgW3Nob3dDYWxlbmRlclZpZXddPVwic2hvd0NhbGVuZGVyVmlld1wiXHJcbiAgICAgIFtzaG93Q2FyZFZpZXddPVwic2hvd0NhcmRWaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3XT1cInNob3dLYW5iYW5WaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXRdPVwic2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdFwiXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbZ3JvdXBCeV09XCJncm91cEJ5XCJcclxuICAgICAgW2N1ZENvbXBvbmVudF09XCJjdWRDb21wb25lbnRcIlxyXG4gICAgICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiIFxyXG4gICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICBbcGFnZSRdPVwicGFnZSRcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgKGNhbGVuZGFyRXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChzdGF0dXNGaWx0ZXJDaGFuZ2VkKT1cIm9uU3RhdHVzRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3Nob3dOb3RlQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3NpemluZ01vZGVdPVwic2l6aW5nTW9kZVwiXHJcbiAgICA+PC9Uc2ktR2VuZXJpYy1HcmlkPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG48L2Rpdj5cclxuIl19