@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
@@ -3,7 +3,7 @@ import { Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild }
3
3
  import { firstValueFrom, Subject } from 'rxjs';
4
4
  import { TooltipPosition } from '../../enums/tooltipPosition.enum';
5
5
  import { Segment } from '../../end-points';
6
- import { ModalSizeEnum, HttpMethodType, TsiReportType } from '../../enums';
6
+ import { ModalSizeEnum, HttpMethodType, TsiReportType, Component_Modes } from '../../enums';
7
7
  import { Fichier } from '../../models';
8
8
  import { queryParamNamesConst } from '../../consts/queryParamNames.const';
9
9
  import { LocalizePipe } from '../../pipes/localize.pipe';
@@ -295,9 +295,15 @@ export class ReportingComponent {
295
295
  this.messageService.infoMessage('shared_reporting_no_default_report_found');
296
296
  }
297
297
  }
298
+ get isUploadBlockedByMode() {
299
+ return this.mode === Component_Modes.CREATE || this.mode === Component_Modes.DUPLICATE;
300
+ }
298
301
  async showUploadDialog() {
302
+ if (this.isUploadBlockedByMode) {
303
+ return;
304
+ }
299
305
  const conf = {
300
- data: {},
306
+ data: { attachedToId: this.id, attachedToBusinessClass: this.businessClass },
301
307
  styleClass: '',
302
308
  width: this.modalSize.width,
303
309
  height: this.modalSize.height,
@@ -603,11 +609,11 @@ export class ReportingComponent {
603
609
  return key;
604
610
  }
605
611
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, deps: [{ token: i1.TsiModalService }, { token: i2.ReportingService }, { token: i3.IdentityManagerService }, { token: i4.TsiNotificationService }, { token: i5.TsiMessageService }, { token: i6.RecordInfoPopupService }, { token: i7.ErrorResponseManagerService }, { token: i8.LayoutHelperService }, { token: i9.GenericFichierService }, { token: i0.EnvironmentInjector }, { token: i10.MailingService }, { token: i11.InputRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportingComponent, selector: "app-reporting", inputs: { showImportExportButton: "showImportExportButton", showNoteButton: "showNoteButton", showInfoButton: "showInfoButton", showUploadButton: "showUploadButton", showActionButton: "showActionButton", isReportingToolbarDisabled: "isReportingToolbarDisabled", formName: "formName", formEndpoint: "formEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", businessClass: "businessClass", cudComponent: "cudComponent", httpMethodType: "httpMethodType", requestData: "requestData", customReportingMode: "customReportingMode", pagedRequest: "pagedRequest", reportDiscriminator: "reportDiscriminator", nombreDocumentsJoints: "nombreDocumentsJoints", id: "id", configModeButtonId: "configModeButtonId", showManageWorkflowButton: "showManageWorkflowButton", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode", openWorkflow: "openWorkflow" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && fromTsiForm && showManageWorkflowButton\"\r\n presentationDesignerBase=\"shared_manage_workflow_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-sitemap p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_manage_workflow'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"onManageWorkflowClick()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showActionButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_action_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-action-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-bolt p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_action'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (onClick)=\"viewAction()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ customReportingMode ? 'confg-mode-button-from-list' : configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:-5px;right:-5px;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700;min-width:1rem;text-align:center}\n"], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i13.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i14.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
612
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportingComponent, selector: "app-reporting", inputs: { showImportExportButton: "showImportExportButton", showNoteButton: "showNoteButton", showInfoButton: "showInfoButton", showUploadButton: "showUploadButton", showActionButton: "showActionButton", isReportingToolbarDisabled: "isReportingToolbarDisabled", formName: "formName", formEndpoint: "formEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", businessClass: "businessClass", mode: "mode", cudComponent: "cudComponent", httpMethodType: "httpMethodType", requestData: "requestData", customReportingMode: "customReportingMode", pagedRequest: "pagedRequest", reportDiscriminator: "reportDiscriminator", nombreDocumentsJoints: "nombreDocumentsJoints", id: "id", configModeButtonId: "configModeButtonId", showManageWorkflowButton: "showManageWorkflowButton", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode", openWorkflow: "openWorkflow" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled || isUploadBlockedByMode\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && fromTsiForm && showManageWorkflowButton\"\r\n presentationDesignerBase=\"shared_manage_workflow_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-sitemap p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_manage_workflow'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"onManageWorkflowClick()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showActionButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_action_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-action-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-bolt p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_action'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (onClick)=\"viewAction()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ customReportingMode ? 'confg-mode-button-from-list' : configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:-5px;right:-5px;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700;min-width:1rem;text-align:center}\n"], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i13.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i14.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
607
613
  }
608
614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, decorators: [{
609
615
  type: Component,
610
- args: [{ selector: 'app-reporting', template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && fromTsiForm && showManageWorkflowButton\"\r\n presentationDesignerBase=\"shared_manage_workflow_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-sitemap p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_manage_workflow'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"onManageWorkflowClick()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showActionButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_action_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-action-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-bolt p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_action'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (onClick)=\"viewAction()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ customReportingMode ? 'confg-mode-button-from-list' : configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:-5px;right:-5px;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700;min-width:1rem;text-align:center}\n"] }]
616
+ args: [{ selector: 'app-reporting', template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled || isUploadBlockedByMode\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && fromTsiForm && showManageWorkflowButton\"\r\n presentationDesignerBase=\"shared_manage_workflow_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-sitemap p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_manage_workflow'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"onManageWorkflowClick()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showActionButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_action_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-action-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-bolt p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_action'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (onClick)=\"viewAction()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ customReportingMode ? 'confg-mode-button-from-list' : configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:-5px;right:-5px;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700;min-width:1rem;text-align:center}\n"] }]
611
617
  }], ctorParameters: () => [{ type: i1.TsiModalService }, { type: i2.ReportingService }, { type: i3.IdentityManagerService }, { type: i4.TsiNotificationService }, { type: i5.TsiMessageService }, { type: i6.RecordInfoPopupService }, { type: i7.ErrorResponseManagerService }, { type: i8.LayoutHelperService }, { type: i9.GenericFichierService }, { type: i0.EnvironmentInjector }, { type: i10.MailingService }, { type: i11.InputRegistryService }], propDecorators: { showImportExportButton: [{
612
618
  type: Input
613
619
  }], showNoteButton: [{
@@ -636,6 +642,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
636
642
  type: Input
637
643
  }], businessClass: [{
638
644
  type: Input
645
+ }], mode: [{
646
+ type: Input
639
647
  }], cudComponent: [{
640
648
  type: Input
641
649
  }], httpMethodType: [{
@@ -676,4 +684,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
676
684
  type: ViewChild,
677
685
  args: ['wrapper', { read: ElementRef }]
678
686
  }] } });
679
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBNkMsT0FBTyxFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUU5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdyTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1B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TUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsWUFBWTtzQkFBckIsTUFBTTtnQkFJUCxVQUFVO3NCQURULFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgSHR0cE1ldGhvZFR5cGUsIFRzaVJlcG9ydFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUsIElQYWdlZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgT3B0aW9uYWxFbmRwb2ludHMsIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsIEZpY2hpZXIsIFJlcG9ydFRvUHJpbnQsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgR2VuZXJpY0ZpY2hpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmljaGllci9nZW5lcmljLWZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24vaWRlbnRpdHktbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGluZy9yZXBvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IG9wZW5BY3Rpb25MaXN0LCBvcGVuTWFuYWdlSW1wb3J0RXhwb3J0TW9kYWwsIG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQsIG9wZW5Nb2RhbFVwbG9hZEdyaWQsIG9wZW5Ob3Rlc0xpc3QsIG9wZW5Uc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vZXJyb3ItcmVzcG9uc2UtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL2FwcC5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvbWFuYWdlLXJlcG9ydGluZy5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBUc2lTZW5kTWFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1zZW5kLW1haWwvdHNpLXNlbmQtbWFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBFbWFpbEluZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uL2NvbmZpZ3VyYXRpb24vZW1haWwtaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBNYWlsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL21haWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ0luZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3JlcG9ydGluZy9yZXBvcnRpbmctaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IElucHV0UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9pbnB1dC1yZWdpc3RyeS5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRpbmcuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHJlcG9ydFRvUHJpbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHRvU2VuZEVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvck1lc3NhZ2VLZXk6IHN0cmluZyA9ICdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTGFyZ2U7XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9yZXBvcnREaXNjcmltaW5hdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8gcGFyYW1ldHJlOiBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllID0gbmV3IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUoKTtcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgc2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGh0dHBNZXRob2RUeXBlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcGFnZWRSZXF1ZXN0PzogSVBhZ2VkUmVxdWVzdDtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXBvcnREaXNjcmltaW5hdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGlzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIHNldCByZXBvcnREaXNjcmltaW5hdG9yKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIF9ub21icmVEb2N1bWVudHNKb2ludHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KClcclxuICBnZXQgbm9tYnJlRG9jdW1lbnRzSm9pbnRzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vbWJyZURvY3VtZW50c0pvaW50cyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ3Nob3ctaGlkZS1jb25maWctYnV0dG9uJztcclxuICBASW5wdXQoKSBzaG93TWFuYWdlV29ya2Zsb3dCdXR0b24gOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtVWlkczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1VaWRzKGxpc3RVaWRzOiBBcnJheTxhbnk+W10pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHMgPSBsaXN0VWlkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtVWlkcygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbVRzaUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZyb21Uc2lGb3JtKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mcm9tVHNpRm9ybSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZyb21Uc2lGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Uc2lGb3JtXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdXN0b21TZW5kTWFpbE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjdXN0b21TZW5kTWFpbE1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVNlbmRNYWlsTW9kZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1c3RvbVNlbmRNYWlsTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21TZW5kTWFpbE1vZGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9ydGluZ0luZm9ybWF0aW9uPzogUmVwb3J0aW5nSW5mb3JtYXRpb25cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlcG9ydGluZ0luZm9ybWF0aW9uKHZhbHVlOiBSZXBvcnRpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVwb3J0aW5nSW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXBvcnRpbmdJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRpbmdJbmZvcm1hdGlvblxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoRGF0YTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZWRNb2RhbEZpbGVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlRGVzaWduTW9kZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgb3BlbldvcmtmbG93OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3dyYXBwZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICB3cmFwcGVyUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIHNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLlRvcDtcclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVUb1ByaW50UmVwb3J0KCl7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIXRoaXMuZnJvbVRzaUZvcm0gfHwgdGhpcy5faW5wdXRSZWdpc3RyeVNlcnZpY2UuZ2V0QWxsKCkuZXZlcnkoeCA9PiB7XHJcbiAgICAgIHJldHVybiAheC5pc0RpcnR5XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVwb3J0Rm9yRmljaGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZm9ybUVuZHBvaW50Py5pbmNsdWRlcygnZ2V0YWxscGFnZWQnKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IFRzaU1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlOiBMYXlvdXRIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIF9nZW5lcmljRmljaGllclNlcnZpY2U6IEdlbmVyaWNGaWNoaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5wdXRSZWdpc3RyeVNlcnZpY2UgOiBJbnB1dFJlZ2lzdHJ5U2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGE/LnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBvcnRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fZXhwb3J0UGRmKGRhdGEudWlkLCBkYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbmRQZGYoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tU2VuZE1haWxNb2RlKSB7XHJcbiAgICAgIHRoaXMudG9TZW5kRW1haWwgPSB0aGlzLnJlcG9ydGluZ0luZm9ybWF0aW9uPy5kZXN0aW5hdGlvbkFkZHJlc3NcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbmRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLlhNZWRpdW07XHJcbiAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0LCBlbWFpbDogdGhpcy50b1NlbmRFbWFpbCB9LFxyXG4gICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICBUc2lTZW5kTWFpbENvbXBvbmVudCxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG4gICAgICAgIHNhdmVTdWJqZWN0LnN1YnNjcmliZSgodmFsOiBFbWFpbEluZm9ybWF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ1JlcG9ydC5wZGYnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhdHRhY2htZW50czogRmlsZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuc2VuZE1haWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5tZXNzYWdlID8/IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2VudFN1Y2Nlc3NGdWxseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZXhwb3J0UGRmKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24gfHwgIXJlcG9ydEluZm9ybWF0aW9uLnJlc3RFbmRwb2ludCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXN0RW5kcG9pbnRcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5leHQ6IChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gJ1JlcG9ydC5wZGYnO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2hvd1VwbG9hZERpYWxvZygpIHtcclxuXHJcbiAgICBjb25zdCBjb25mID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk1vZGFsVXBsb2FkR3JpZCh0aGlzLl9pbmplY3RvciwgY29uZilcclxuXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VGaWxlTWFuYWdlQ29tcG9uZW50KCkpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRhdGVGaWNoaWVyID0gbmV3IERhdGUoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm5vbSA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5ub21GaWNoaWVyQ29tcGxldCA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnRhYmxlTGllZSA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnBrZXkgPSB0aGlzLmlkO1xyXG5cclxuICAgICAgICB0aGlzLl9nZW5lcmljRmljaGllclNlcnZpY2UuY3JlYXRlKGZpY2hpZXJUb1NlbmQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKHRoaXMubChcIkZpY2hpZXIgZW5yZWdpc3Ryw6kgIVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5sKFwiRXJyZXVyIGxvcnMgZGUgbOKAmWVucmVnaXN0cmVtZW50ICFcIikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fb3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93RXhwb3J0SW1wb3J0RGlhbG9nKCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsKHRoaXMuX2luamVjdG9yLCB0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZm9ybU5hbWUsIHRoaXMucGFnZWRSZXF1ZXN0KVxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsLCB0cnVlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKCkge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmZyb21Uc2lGb3JtKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVMaXN0U3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3ZpZXdSZXBvcnQoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgLy8gY2FzZSB0aGVyZSBpcyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uIHx8ICFyZXBvcnRJbmZvcm1hdGlvbi5yZXN0RW5kcG9pbnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24/LnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0VG9QcmludElkID0gZGF0YS51aWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydFRlbXBsYXRlQnlJZChpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxWaWV3ZXIgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9yZXBvcnQtdmlld2VyLyR7dGhpcy5yZXBvcnRUb1ByaW50SWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHtBcHBSb3V0ZXMuYXBwfS8ke0FwcFJvdXRlcy5kYXNoYm9hcmR9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZFZpZXdlcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3RoaXMucmVwb3J0VG9QcmludElkfSYke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L21haWxtZXJnZS1yZWFkb25seW1vZGUvJHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gbm8gZGVmYXVsdCByZXBvcnRcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9QcmludChcclxuICAgIHVpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0VHlwZTogbnVtYmVyLFxyXG4gICAgcmVzdEVuZHBvaW50Pzogc3RyaW5nLFxyXG4gICAgbW9kdWxlPzogc3RyaW5nLFxyXG4gICAgb3JkZXI/OiBudW1iZXIsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvUHJpbnQge1xyXG4gICAgbGV0IHRva2VuID0gdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLmdldEF1dGhUb2tlbigpO1xyXG4gICAgbGV0IHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxyXG4gICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpLm5hbWU7XHJcbiAgICBpZiAodXNlcm5hbWUpIHtcclxuICAgICAgaWYgKHVpZCAmJiAvKnRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmKi8gdG9rZW4pIHtcclxuICAgICAgICBsZXQgbmV3UmVwb3J0VG9QcmludDogUmVwb3J0VG9QcmludCA9IHtcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChyZXN0RW5kcG9pbnQsIHRoaXMuaWQpID8/XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5mb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICByZXF1ZXN0RGF0YTogIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keSA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgICBmb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICAgIHJlcG9ydFR5cGU6IHJlcG9ydFR5cGUsXHJcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXHJcbiAgICAgICAgICB1c2VyVG9rZW46IHJlcG9ydFR5cGUgPT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQgPyB1bmRlZmluZWQgOiB0b2tlbixcclxuICAgICAgICAgIGlzUGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgICBtb2R1bGU6IG1vZHVsZSxcclxuICAgICAgICAgIG9yZGVyOiBvcmRlcixcclxuICAgICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcclxuICAgICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmdldEh0dHBNZXRob2RUeXBlKClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vcGVuTW9kYWwoKSB7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZztcclxuICAgIGNvbmYgPSB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBvdGhlckZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgIG90aGVyRm9ybUVuZHBvaW50OiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICBmb3JtRW5kcG9pbnRCb2R5OiB0aGlzLmZvcm1FbmRwb2ludEJvZHksXHJcbiAgICAgICAgaXNGb3JtRW5kcG9pbnRQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkLFxyXG4gICAgICAgIGZpbHRlcnNIdG1sVGVtcGxhdGU6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50czogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgcmVwb3J0RGlzY3JpbWluYXRvcjogdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGN1c3RvbVJlcG9ydGluZ01vZGU6IHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSxcclxuICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5nZXRIdHRwTWV0aG9kVHlwZSgpLFxyXG4gICAgICB9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGF3YWl0IG9wZW5NYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SHR0cE1ldGhvZFR5cGUoKSB7XHJcbiAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlICYmICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIEh0dHBNZXRob2RUeXBlLkdFVDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5odHRwTWV0aG9kVHlwZSAmJiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cE1ldGhvZFR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSHR0cE1ldGhvZFR5cGUuUE9TVDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlRmlsZU1hbmFnZUNvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VkTW9kYWxGaWxlVXBsb2FkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55LCByZWZyZXNoRGF0YTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZnJlc2hEYXRhLmVtaXQocmVmcmVzaERhdGEpO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy5fZ2V0QWxsUmVwb3J0cyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuICB9XHJcblxyXG4gIGhpZGVDb250ZXh0TWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgIC8vIHRoaXMucmVwb3J0cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RDb250ZXh0T3B0aW9uKGl0ZW06IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZpZXdSZXBvcnQoaXRlbS51aWQpO1xyXG4gICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFJlcG9ydHMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJlcG9ydHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0cyhcclxuICAgICAgICAgIHRoaXMuZm9ybU5hbWUgPz8gJycsXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3JcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2V0QWxsUmVwb3J0cyhjbGlja1g6IG51bWJlciwgY2xpY2tZOiBudW1iZXIpIHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0UmVwb3J0cygpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCByZWN0ID0gdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRleHRNZW51UG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogY2xpY2tYIC0gcmVjdC5sZWZ0LFxyXG4gICAgICAgIHk6IGNsaWNrWSAtIHJlY3QudG9wLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyB2aWV3Tm90ZXMoKSB7XHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTm90ZXNMaXN0KHRoaXMuX2luamVjdG9yKVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB2aWV3QWN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkFjdGlvbkxpc3QodGhpcy5faW5qZWN0b3IpXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIG9uTWFuYWdlV29ya2Zsb3dDbGljaygpIHtcclxuICAgIHRoaXMub3BlbldvcmtmbG93LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHZpZXdJbmZvKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlkICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRJbmZvUG9wdXBTZXJ2aWNlXHJcbiAgICAgICAgLmdldEluZm8odGhpcy5idXNpbmVzc0NsYXNzISwgdGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZTtcclxuICAgICAgICAgICAgbGV0IHRleHQgPVxyXG4gICAgICAgICAgICAgICdVSUQgOiAgJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5pZCArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIGJ5IDogICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuY3JlYXRpb25Vc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIGJ5IDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5tb2RpZlVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZVNhaXNpZSArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZU1vZGlmO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgVWlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRpb25Vc2VyOiBkYXRhLmNyZWF0aW9uVXNlcixcclxuICAgICAgICAgICAgICAgIG1vZGlmVXNlcjogZGF0YS5tb2RpZlVzZXIsXHJcbiAgICAgICAgICAgICAgICBkYXRlU2Fpc2llOiBkYXRhLmRhdGVTYWlzaWUsXHJcbiAgICAgICAgICAgICAgICBkYXRlTW9kaWY6IGRhdGEuZGF0ZU1vZGlmLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc5MHJlbScsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnODByZW0nLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZilcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMuX2RpYWxvZ1JlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG14LTJcIj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJtYW5hZ2VfcmVwb3J0c19idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2ljb25TcmNdPVwiJy4vYXNzZXRzL2ljb25zL2ljb24tcHJpbnRlci1ncm91cC13aGl0ZS5wbmcnXCJcclxuICAgICAgW2ljb25XaWR0aF09XCIyMFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19tYW5hZ2VfcmVwb3J0cydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJwcmludF9kZWZhdWx0X3JlcG9ydF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi13cmFwcGVyXCJcclxuICAgICN3cmFwcGVyXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wcmludCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yaWdodENsaWNrJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uUHJpbnREZWZhdWx0KCRldmVudClcIlxyXG4gICAgICAocmlnaHRDbGljayk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgICA8IS0tIGBzaGFyZWRfcmVwb3J0aW5nX3ByaW50X3JlcG9ydGAga2V5IGZvciBgSW1wcmltZXJgIHRleHQgIChyZXBsYWNlIGl0IGFzIHZhbHVlIG9yIHRvb2x0aXAgaWYgbmVlZCBpdCkgLS0+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cInNob3dDb250ZXh0TWVudSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgICAgY2xhc3M9XCJjb250ZXh0LW1lbnVcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ3RvcC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueSxcclxuICAgICAgICAnbGVmdC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueFxyXG4gICAgICB9XCJcclxuICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZUNvbnRleHRNZW51KClcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29udGV4dE9wdGlvbihyZXBvcnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHJlcG9ydC5uYW1lIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2VuZF9yZXBvcnRfYnlfZW1haWxfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1zZW5kIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbmRfbWFpbCdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJvblNlbmRQZGYoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBzaG93VXBsb2FkQnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImF0dGFjaG1lbnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBidG4td3JhcHBlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wYXBlcmNsaXAgcC1idXR0b24taWNvblwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93VXBsb2FkRGlhbG9nKClcIlxyXG4gICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJub21icmVEb2N1bWVudHNKb2ludHMgJiYgbm9tYnJlRG9jdW1lbnRzSm9pbnRzID4gMFwiIGNsYXNzPVwiY3VzdG9tLWJhZGdlXCI+XHJcbiAgICAgIHt7IG5vbWJyZURvY3VtZW50c0pvaW50cyB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJpbXBvcnRfZXhwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9leHBvcnRfaW1wb3J0J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RXhwb3J0SW1wb3J0RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dOb3RlQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19ub3Rlc19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktY29tbWVudCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfZ2VzdGlvbl9kZXNfbm90ZXMnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24td2FybmluZyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IHRleHQtd2hpdGVcIlxyXG4gICAgICAoY2xpY2spPVwidmlld05vdGVzKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgZnJvbVRzaUZvcm0gJiYgc2hvd01hbmFnZVdvcmtmbG93QnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNoYXJlZF9tYW5hZ2Vfd29ya2Zsb3dfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1zaXRlbWFwIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV93b3JrZmxvdydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1pbmZvIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgdGV4dC13aGl0ZVwiXHJcbiAgICAgIChjbGljayk9XCJvbk1hbmFnZVdvcmtmbG93Q2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd0FjdGlvbkJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfYWN0aW9uX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCInc2hvdy1hY3Rpb24tYnV0dG9uJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYm9sdCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfZ2VzdGlvbl9kZXNfYWN0aW9uJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKG9uQ2xpY2spPVwidmlld0FjdGlvbigpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93SW5mb0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfaW5mb19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwiJ3Nob3ctaW5mby1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1pbmZvIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19pbmZvJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdJbmZvKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY3VzdG9tUmVwb3J0aW5nTW9kZSA/ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3QnIDogY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1leWUgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2NvbmZpZ19zaG93X2hpZGUnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gIGNsYXNzPVwiY29udGV4dC1tZW51XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgJ2xlZnQucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnhcclxuICB9XCJcclxuICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChjbGljayk9XCJvblNlbGVjdENvbnRleHRPcHRpb24ocmVwb3J0KVwiPlxyXG4gICAge3tyZXBvcnQubmFtZX19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuIl19
687
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RixPQUFPLEVBQTZDLE9BQU8sRUFBOEIsTUFBTSxjQUFjLENBQUM7QUFFOUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBT3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLCtCQUErQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHck0sT0FBTyxFQUFFLFNB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QXBCLEtBQUs7Z0JBRUYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVlGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFjRixFQUFFO3NCQURMLEtBQUs7Z0JBU0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFJSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBWUssV0FBVztzQkFEckIsS0FBSztnQkFXSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWUssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEVudmlyb25tZW50SW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBNb2RhbFNpemVFbnVtLCBIdHRwTWV0aG9kVHlwZSwgVHNpUmVwb3J0VHlwZSwgQ29tcG9uZW50X01vZGVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBJTW9kYWxTaXplLCBJUGFnZWRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IE9wdGlvbmFsRW5kcG9pbnRzLCBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlLCBGaWNoaWVyLCBSZXBvcnRUb1ByaW50LCBTZWFyY2hGaWVsZCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEdlbmVyaWNGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZ2VuZXJpYy1maWNoaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBxdWVyeVBhcmFtTmFtZXNDb25zdCB9IGZyb20gJy4uLy4uL2NvbnN0cy9xdWVyeVBhcmFtTmFtZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjb3JkLWluZm8tcG9wdXAuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IElkZW50aXR5TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uL2lkZW50aXR5LW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnRpbmcvcmVwb3J0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBvcGVuQWN0aW9uTGlzdCwgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsLCBvcGVuTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LCBvcGVuTW9kYWxVcGxvYWRHcmlkLCBvcGVuTm90ZXNMaXN0LCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFJvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9hcHAucm91dGVzJztcclxuaW1wb3J0IHsgTWFuYWdlUmVwb3J0aW5nUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL21hbmFnZS1yZXBvcnRpbmcucm91dGVzJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgRW1haWxJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VtYWlsLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgTWFpbGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9tYWlsaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9yZXBvcnRpbmcvcmVwb3J0aW5nLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnB1dFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vaW5wdXQtcmVnaXN0cnkuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICByZXBvcnRUb1ByaW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICB0b1NlbmRFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuICBtb2RhbFNpemU6IElNb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkxhcmdlO1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgcHJpdmF0ZSBfcmVwb3J0RGlzY3JpbWluYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05vdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dJbmZvQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93VXBsb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblxyXG4gIHNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNyZWdpb24gSW5wdXQgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy89IGAke0dlc3Rpb25Db21tZXJjaWFsZVNlZ21lbnRzLmZhY3R1cmVWZW50ZX0vMTY1ZWM1ZmQtNGQzNC00NTQ2LWFlMTUtMDA0NGU3MDhiOWQ5YDtcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBpc0Zvcm1FbmRwb2ludFBhZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgYnVzaW5lc3NDbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgaHR0cE1ldGhvZFR5cGU/OiBzdHJpbmdcclxuICBASW5wdXQoKSByZXF1ZXN0RGF0YT86IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21SZXBvcnRpbmdNb2RlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwYWdlZFJlcXVlc3Q/OiBJUGFnZWRSZXF1ZXN0O1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcG9ydERpc2NyaW1pbmF0b3IoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnREaXNjcmltaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJlcG9ydERpc2NyaW1pbmF0b3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVwb3J0RGlzY3JpbWluYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgX25vbWJyZURvY3VtZW50c0pvaW50czogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKVxyXG4gIGdldCBub21icmVEb2N1bWVudHNKb2ludHMoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHM7XHJcbiAgfVxyXG5cclxuICBzZXQgbm9tYnJlRG9jdW1lbnRzSm9pbnRzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY29uZmlnTW9kZUJ1dHRvbklkOiBzdHJpbmcgPSAnc2hvdy1oaWRlLWNvbmZpZy1idXR0b24nO1xyXG4gIEBJbnB1dCgpIHNob3dNYW5hZ2VXb3JrZmxvd0J1dHRvbiA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1VaWRzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbVVpZHMobGlzdFVpZHM6IEFycmF5PGFueT5bXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtVWlkcyA9IGxpc3RVaWRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1VaWRzKCk6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mcm9tVHNpRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZnJvbVRzaUZvcm0odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Zyb21Uc2lGb3JtID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZnJvbVRzaUZvcm0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJvbVRzaUZvcm1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2N1c3RvbVNlbmRNYWlsTW9kZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGN1c3RvbVNlbmRNYWlsTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY3VzdG9tU2VuZE1haWxNb2RlID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VzdG9tU2VuZE1haWxNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbVNlbmRNYWlsTW9kZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVwb3J0aW5nSW5mb3JtYXRpb24/OiBSZXBvcnRpbmdJbmZvcm1hdGlvblxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcmVwb3J0aW5nSW5mb3JtYXRpb24odmFsdWU6IFJlcG9ydGluZ0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZXBvcnRpbmdJbmZvcm1hdGlvbiA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlcG9ydGluZ0luZm9ybWF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydGluZ0luZm9ybWF0aW9uXHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgQE91dHB1dCgpIHJlZnJlc2hEYXRhOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlZE1vZGFsRmlsZVVwbG9hZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVEZXNpZ25Nb2RlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBvcGVuV29ya2Zsb3c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZVRvUHJpbnRSZXBvcnQoKXtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5mcm9tVHNpRm9ybSB8fCB0aGlzLl9pbnB1dFJlZ2lzdHJ5U2VydmljZS5nZXRBbGwoKS5ldmVyeSh4ID0+IHtcclxuICAgICAgcmV0dXJuICF4LmlzRGlydHlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogVHNpTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2U6IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX2dlbmVyaWNGaWNoaWVyU2VydmljZTogR2VuZXJpY0ZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9tYWlsaW5nU2VydmljZTogTWFpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbnB1dFJlZ2lzdHJ5U2VydmljZSA6IElucHV0UmVnaXN0cnlTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vaGFuZGxlIExpZmVjeWNsZSBIb29rc1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgb25QcmludERlZmF1bHQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGE6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZGF0YT8udWlkLCBkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydFBkZihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLmZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLl9leHBvcnRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VuZFBkZihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXN0b21TZW5kTWFpbE1vZGUpIHtcclxuICAgICAgdGhpcy50b1NlbmRFbWFpbCA9IHRoaXMucmVwb3J0aW5nSW5mb3JtYXRpb24/LmRlc3RpbmF0aW9uQWRkcmVzc1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLmZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZFBkZihkYXRhLnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VuZFBkZihcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRJbmZvcm1hdGlvbj86IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaWQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2F2ZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uWE1lZGl1bTtcclxuICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QsIGVtYWlsOiB0aGlzLnRvU2VuZEVtYWlsIH0sXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgIFRzaVNlbmRNYWlsQ29tcG9uZW50LFxyXG4gICAgICAgICAgY29uZlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgc2F2ZVN1YmplY3Quc3Vic2NyaWJlKCh2YWw6IEVtYWlsSW5mb3JtYXRpb24pID0+IHtcclxuICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdmFsLnRvQWRkcmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdmFsLnN1YmplY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnUmVwb3J0LnBkZicsIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnRzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChuZXdGaWxlKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWlsaW5nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZW5kTWFpbChcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC50b0FkZHJlc3MhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLnN1YmplY3QhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLm1lc3NhZ2UgPz8gXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLmNjQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zZW50U3VjY2Vzc0Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbiB8fCAhcmVwb3J0SW5mb3JtYXRpb24ucmVzdEVuZHBvaW50KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlc3RFbmRwb2ludFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmV4dDogKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcclxuICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnUmVwb3J0LnBkZic7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgYS5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgdGhlIFBERicsIGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNVcGxvYWRCbG9ja2VkQnlNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gQ29tcG9uZW50X01vZGVzLkNSRUFURSB8fCB0aGlzLm1vZGUgPT09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93VXBsb2FkRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuaXNVcGxvYWRCbG9ja2VkQnlNb2RlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb25mID0ge1xyXG4gICAgICBkYXRhOiB7IGF0dGFjaGVkVG9JZDogdGhpcy5pZCwgYXR0YWNoZWRUb0J1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyB9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZUZpbGVNYW5hZ2VDb21wb25lbnQoKSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBlLnRhcmdldD8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgYmFzZTY0Q29udGVudCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpY2hpZXJUb1NlbmQgPSBuZXcgRmljaGllcigpO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuZGF0ZUZpY2hpZXIgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQub2JqZXQgPSAnJztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm5vbUZpY2hpZXJDb21wbGV0ID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmNvbnRlbnUgPSBiYXNlNjRDb250ZW50O1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQudGFibGVMaWVlID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IHRoaXMuaWQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dlbmVyaWNGaWNoaWVyU2VydmljZS5jcmVhdGUoZmljaGllclRvU2VuZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKFwiRmljaGllciBlbnJlZ2lzdHLDqSAhXCIpKTtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmwoXCJFcnJldXIgbG9ycyBkZSBs4oCZZW5yZWdpc3RyZW1lbnQgIVwiKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dEaWFsb2coKSB7XHJcbiAgICB0aGlzLl9vcGVuTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNob3dFeHBvcnRJbXBvcnREaWFsb2coKSB7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuTWFuYWdlSW1wb3J0RXhwb3J0TW9kYWwodGhpcy5faW5qZWN0b3IsIHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5mb3JtTmFtZSwgdGhpcy5wYWdlZFJlcXVlc3QpXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT5cclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwsIHRydWUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJlc2VudGF0aW9uRGVzaWduZXJDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuZnJvbVRzaUZvcm0pIHtcclxuICAgICAgdGhpcy50b2dnbGVEZXNpZ25Nb2RlLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUxpc3RTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfdmlld1JlcG9ydChcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRJbmZvcm1hdGlvbj86IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaWQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBjYXNlIHRoZXJlIGlzIGRlZmF1bHQgcmVwb3J0XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24gfHwgIXJlcG9ydEluZm9ybWF0aW9uLnJlc3RFbmRwb2ludCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVzdEVuZHBvaW50XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUb1ByaW50SWQgPSBkYXRhLnVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0VGVtcGxhdGVCeUlkKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybFZpZXdlciA9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvUHJpbnR9PSR7dGhpcy5yZXBvcnRUb1ByaW50SWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vbWFpbG1lcmdlLXJlYWRvbmx5bW9kZS8ke3RoaXMucmVwb3J0VG9QcmludElkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybFZpZXdlciwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBubyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgdWlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRUeXBlOiBudW1iZXIsXHJcbiAgICByZXN0RW5kcG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHNob3J0TmFtZT86IHN0cmluZyxcclxuICAgIGRpc3BsYXk/OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9QcmludCB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICBsZXQgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9XHJcbiAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCkubmFtZTtcclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCBuZXdSZXBvcnRUb1ByaW50OiBSZXBvcnRUb1ByaW50ID0ge1xyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KHJlc3RFbmRwb2ludCwgdGhpcy5pZCkgPz9cclxuICAgICAgICAgICAgdGhpcy5mb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5IDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSxcclxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuZ2V0SHR0cE1ldGhvZFR5cGUoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdSZXBvcnRUb1ByaW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSwgZm9ybUVuZHBvaW50IG9yIHNlbGVjdGVkUmVwb3J0IGhhdmUgbm90IGJlZW4gc2V0ICEnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXCJwcm9wZXJ0eSAnVXNlck5hbWUgJyBvZiBjdXJyZW50IHVzZXIgaGF2ZSBub3QgYmVlbiBzZXQgIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29wZW5Nb2RhbCgpIHtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG4gICAgY29uZiA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG90aGVyRm9ybU5hbWU6IHRoaXMuZm9ybU5hbWUsXHJcbiAgICAgICAgb3RoZXJGb3JtRW5kcG9pbnQ6IHRoaXMuZm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGZvcm1FbmRwb2ludEJvZHk6IHRoaXMuZm9ybUVuZHBvaW50Qm9keSxcclxuICAgICAgICBpc0Zvcm1FbmRwb2ludFBhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQsXHJcbiAgICAgICAgZmlsdGVyc0h0bWxUZW1wbGF0ZTogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICByZXBvcnREaXNjcmltaW5hdG9yOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgY3VzdG9tUmVwb3J0aW5nTW9kZTogdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlLFxyXG4gICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmdldEh0dHBNZXRob2RUeXBlKCksXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZik7XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBnZXRIdHRwTWV0aG9kVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUgJiYgIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSkge1xyXG4gICAgICByZXR1cm4gSHR0cE1ldGhvZFR5cGUuR0VUO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmh0dHBNZXRob2RUeXBlICYmIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwTWV0aG9kVHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBIdHRwTWV0aG9kVHlwZS5QT1NUO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VGaWxlTWFuYWdlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZWRNb2RhbEZpbGVVcGxvYWQuZW1pdCh0cnVlKTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw/OiBhbnksIHJlZnJlc2hEYXRhOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMucmVmcmVzaERhdGEuZW1pdChyZWZyZXNoRGF0YSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uUmlnaHRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLl9nZXRBbGxSZXBvcnRzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUNvbnRleHRNZW51KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgLy8gdGhpcy5yZXBvcnRzID0gW107XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdENvbnRleHRPcHRpb24oaXRlbTogUmVwb3J0VGVtcGxhdGVSZXNwb25zZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmlld1JlcG9ydChpdGVtLnVpZCk7XHJcbiAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UmVwb3J0cygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVwb3J0cyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRzKFxyXG4gICAgICAgICAgdGhpcy5mb3JtTmFtZSA/PyAnJyxcclxuICAgICAgICAgIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9nZXRBbGxSZXBvcnRzKGNsaWNrWDogbnVtYmVyLCBjbGlja1k6IG51bWJlcikge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRSZXBvcnRzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLndyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBjbGlja1ggLSByZWN0LmxlZnQsXHJcbiAgICAgICAgeTogY2xpY2tZIC0gcmVjdC50b3AsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIHZpZXdOb3RlcygpIHtcclxuICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Ob3Rlc0xpc3QodGhpcy5faW5qZWN0b3IpXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHZpZXdBY3Rpb24oKSB7XHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuQWN0aW9uTGlzdCh0aGlzLl9pbmplY3RvcilcclxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgb25NYW5hZ2VXb3JrZmxvd0NsaWNrKCkge1xyXG4gICAgdGhpcy5vcGVuV29ya2Zsb3cuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgdmlld0luZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCB0aGlzLmlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlkICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5fZGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cIm1hbmFnZV9yZXBvcnRzX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbaWNvblNyY109XCInLi9hc3NldHMvaWNvbnMvaWNvbi1wcmludGVyLWdyb3VwLXdoaXRlLnBuZydcIlxyXG4gICAgICBbaWNvbldpZHRoXT1cIjIwXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9yZXBvcnRzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInByaW50X2RlZmF1bHRfcmVwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnRuLXdyYXBwZXJcIlxyXG4gICAgI3dyYXBwZXJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXByaW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3JpZ2h0Q2xpY2snXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwib25QcmludERlZmF1bHQoJGV2ZW50KVwiXHJcbiAgICAgIChyaWdodENsaWNrKT1cIm9uUmlnaHRDbGljaygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgIDwhLS0gYHNoYXJlZF9yZXBvcnRpbmdfcHJpbnRfcmVwb3J0YCBrZXkgZm9yIGBJbXByaW1lcmAgdGV4dCAgKHJlcGxhY2UgaXQgYXMgdmFsdWUgb3IgdG9vbHRpcCBpZiBuZWVkIGl0KSAtLT5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2hvd0NvbnRleHRNZW51ICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgICBjbGFzcz1cImNvbnRleHQtbWVudVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgICAgICdsZWZ0LnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi54XHJcbiAgICAgIH1cIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb250ZXh0T3B0aW9uKHJlcG9ydClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcmVwb3J0Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzZW5kX3JlcG9ydF9ieV9lbWFpbF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXNlbmQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfc2VuZF9tYWlsJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU2VuZFBkZigkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHNob3dVcGxvYWRCdXR0b25cIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYXR0YWNobWVudF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi13cmFwcGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQgfHwgaXNVcGxvYWRCbG9ja2VkQnlNb2RlXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wYXBlcmNsaXAgcC1idXR0b24taWNvblwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93VXBsb2FkRGlhbG9nKClcIlxyXG4gICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJub21icmVEb2N1bWVudHNKb2ludHMgJiYgbm9tYnJlRG9jdW1lbnRzSm9pbnRzID4gMFwiIGNsYXNzPVwiY3VzdG9tLWJhZGdlXCI+XHJcbiAgICAgIHt7IG5vbWJyZURvY3VtZW50c0pvaW50cyB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJpbXBvcnRfZXhwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9leHBvcnRfaW1wb3J0J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RXhwb3J0SW1wb3J0RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dOb3RlQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19ub3Rlc19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktY29tbWVudCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfZ2VzdGlvbl9kZXNfbm90ZXMnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24td2FybmluZyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IHRleHQtd2hpdGVcIlxyXG4gICAgICAoY2xpY2spPVwidmlld05vdGVzKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgZnJvbVRzaUZvcm0gJiYgc2hvd01hbmFnZVdvcmtmbG93QnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNoYXJlZF9tYW5hZ2Vfd29ya2Zsb3dfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1zaXRlbWFwIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV93b3JrZmxvdydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1pbmZvIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgdGV4dC13aGl0ZVwiXHJcbiAgICAgIChjbGljayk9XCJvbk1hbmFnZVdvcmtmbG93Q2xpY2soKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd0FjdGlvbkJ1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfYWN0aW9uX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCInc2hvdy1hY3Rpb24tYnV0dG9uJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYm9sdCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfZ2VzdGlvbl9kZXNfYWN0aW9uJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKG9uQ2xpY2spPVwidmlld0FjdGlvbigpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93SW5mb0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfaW5mb19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwiJ3Nob3ctaW5mby1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1pbmZvIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19pbmZvJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdJbmZvKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY3VzdG9tUmVwb3J0aW5nTW9kZSA/ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3QnIDogY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1leWUgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2NvbmZpZ19zaG93X2hpZGUnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gIGNsYXNzPVwiY29udGV4dC1tZW51XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgJ2xlZnQucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnhcclxuICB9XCJcclxuICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChjbGljayk9XCJvblNlbGVjdENvbnRleHRPcHRpb24ocmVwb3J0KVwiPlxyXG4gICAge3tyZXBvcnQubmFtZX19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuIl19
@@ -178,7 +178,7 @@ export class TsiActionErpListComponent extends TsiListBaseComponent {
178
178
  this.setModalSize({ width: ModalSizeEnum.Medium.width, height: ModalSizeEnum.Large.height });
179
179
  }
180
180
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiActionErpListComponent, deps: [{ token: i1.IdentityManagerService }, { token: i1.ActionErpService }, { token: i2.DynamicDialogConfig }, { token: i2.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiActionErpListComponent, selector: "lib-tsi-action-erp-list", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud \r\n[cudComponent]=\"comp\" \r\n[header]=\"titleComponent\" \r\n[columns]=\"columns\" \r\n[crudService]=\"actionservice\"\r\n[modalSize]=\"modalSize\"\r\n[showUploadButton]=\"false\"\r\n[showNoteButton]=\"true\"\r\npresentationDesigner [id]=\"'lib-tsi-action-erp-list'\" \r\n[searchFields]=\"searchFields\" \r\n[modalData]=\"modalData\"\r\n[businessClass]=\"businessClass\"></Tsi-Generic-Crud>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i4.PresentationDesignerDirective, selector: "[presentationDesigner]:not(tsi-tab-panel)" }] }); }
181
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiActionErpListComponent, selector: "lib-tsi-action-erp-list", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<Tsi-Generic-Crud \r\n[cudComponent]=\"comp\" \r\n[header]=\"titleComponent\" \r\n[columns]=\"columns\" \r\n[crudService]=\"actionservice\"\r\n[modalSize]=\"modalSize\"\r\n[showUploadButton]=\"false\"\r\n[showNoteButton]=\"true\"\r\npresentationDesigner [id]=\"'lib-tsi-action-erp-list'\" \r\n[searchFields]=\"searchFields\" \r\n[modalData]=\"modalData\"\r\n[businessClass]=\"businessClass\"></Tsi-Generic-Crud>\r\n", styles: [""], dependencies: [{ kind: "component", type: i3.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting", "extraData"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i4.PresentationDesignerDirective, selector: "[presentationDesigner]:not(tsi-tab-panel)" }] }); }
182
182
  }
183
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiActionErpListComponent, decorators: [{
184
184
  type: Component,
@@ -118,7 +118,7 @@ export class DynamicFormListComponent extends TsiListBaseComponent {
118
118
  }
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicFormListComponent, deps: [{ token: i1.FormDataService }, { token: i2.DialogDataService }, { token: i3.DynamicDialogRef }, { token: i3.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DynamicFormListComponent, selector: "shared-dynamic-form-list", inputs: { occurence: "occurence", occurenceBusinessClass: "occurenceBusinessClass", occurenceDiscriminatorValue: "occurenceDiscriminatorValue", ignoreDialogConfig: "ignoreDialogConfig" }, providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isLoaded\">\r\n <Tsi-Generic-Crud\r\n [cudComponent]=\"comp\"\r\n [header]=\"titleComponent\"\r\n [columns]=\"columns\"\r\n [crudService]=\"formDataService\"\r\n [modalData]=\"modalData\"\r\n [modalSize]=\"modalSize\"\r\n [showUploadButton]=\"false\"\r\n [showNoteButton]=\"false\"\r\n [showCalenderView]=\"false\"\r\n [showFormButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showConsultButton]=\"true\"\r\n presentationDesigner />\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i6.PresentationDesignerDirective, selector: "[presentationDesigner]:not(tsi-tab-panel)" }] }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DynamicFormListComponent, selector: "shared-dynamic-form-list", inputs: { occurence: "occurence", occurenceBusinessClass: "occurenceBusinessClass", occurenceDiscriminatorValue: "occurenceDiscriminatorValue", ignoreDialogConfig: "ignoreDialogConfig" }, providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isLoaded\">\r\n <Tsi-Generic-Crud\r\n [cudComponent]=\"comp\"\r\n [header]=\"titleComponent\"\r\n [columns]=\"columns\"\r\n [crudService]=\"formDataService\"\r\n [modalData]=\"modalData\"\r\n [modalSize]=\"modalSize\"\r\n [showUploadButton]=\"false\"\r\n [showNoteButton]=\"false\"\r\n [showCalenderView]=\"false\"\r\n [showFormButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showConsultButton]=\"true\"\r\n presentationDesigner />\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: ["entityInfo", "modalData", "columns", "gridConfiguration", "cudComponent", "crudService", "header", "modalSize", "descriminatorValue", "presentationSettings", "preventAddEvent", "formEndpoint", "formName", "isSearchButtonDisabled", "showHeaderFilters", "showEditButton", "showDeleteButton", "showAddButton", "showConsultButton", "showUploadButton", "showNoteButton", "showDownloadButton", "showInfoButton", "showDuplicateButton", "showFormButton", "showCalenderView", "showCardView", "showImportFromOutlookButton", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "showSearchField", "searchFields", "calenderSchema", "showActionButton", "sizingMode", "selectKeyOnly", "selectionMode", "selectedItems", "key", "id", "businessClass", "searchOnInit", "showGlobalSearch", "showExportButton", "showReporting", "extraData"], outputs: ["selectedItemsChange", "searchFieldsValueChanged", "buttonColumnClicked", "onImportFromOutlookClicked"] }, { kind: "directive", type: i6.PresentationDesignerDirective, selector: "[presentationDesigner]:not(tsi-tab-panel)" }] }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DynamicFormListComponent, decorators: [{
124
124
  type: Component,